From dece242a5418ebe05d124df307243d6730b8b072 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sun, 1 Mar 2020 21:30:33 +0100 Subject: [PATCH] Background + clean --- aidedejeu_flutter/lib/database.dart | 23 +++ aidedejeu_flutter/lib/models/items.dart | 24 +++ aidedejeu_flutter/lib/widgets/pceditor.dart | 204 ++++++++++++-------- 3 files changed, 169 insertions(+), 82 deletions(-) diff --git a/aidedejeu_flutter/lib/database.dart b/aidedejeu_flutter/lib/database.dart index cde70336..f04c3cb6 100644 --- a/aidedejeu_flutter/lib/database.dart +++ b/aidedejeu_flutter/lib/database.dart @@ -118,3 +118,26 @@ Future> loadSubRaces(RaceItem race) async { } return null; } + +Future> loadTypedItems({String itemType, Item item = null}) async { + final db = await database; + var response = await db.query( + "Items", + where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""), + whereArgs: item != null ? [itemType, item.id] : [itemType], + orderBy: "NormalizedName" + ); + if (response.isNotEmpty) { + return itemsFromMapList(response); + } + return null; +} + +Future> loadBackgrounds() async { + return loadTypedItems(itemType: "BackgroundItem"); +} + +Future> loadSubBackgrounds(Item item) async { + return loadTypedItems(itemType: "SubBackgroundItem", item: item); +} + diff --git a/aidedejeu_flutter/lib/models/items.dart b/aidedejeu_flutter/lib/models/items.dart index 2bbcb11f..2c18d3d9 100644 --- a/aidedejeu_flutter/lib/models/items.dart +++ b/aidedejeu_flutter/lib/models/items.dart @@ -205,6 +205,26 @@ class RaceItems extends FilteredItems { } } + +class BackgroundItem extends Item { + + String skillProficiencies; + String masteredTools; + String masteredLanguages; + String equipment; + + BackgroundItem(Map map) : super(map) { + this.skillProficiencies = map["SkillProficiencies"]; + this.masteredTools = map["MasteredTools"]; + this.masteredLanguages = map["MasteredLanguages"]; + this.equipment = map["Equipment"]; + } +} + +class SubBackgroundItem extends BackgroundItem { + SubBackgroundItem(Map map) : super(map); +} + Item itemFromMap(Map map) { switch (map["ItemType"]) { case "RaceItem": @@ -213,6 +233,10 @@ Item itemFromMap(Map map) { return SubRaceItem(map); case "RaceItems": return RaceItems(map); + case "BackgroundItem": + return BackgroundItem(map); + case "SubBackgroundItem": + return SubBackgroundItem(map); case "MonsterItem": return MonsterItem(map); case "MonsterItems": diff --git a/aidedejeu_flutter/lib/widgets/pceditor.dart b/aidedejeu_flutter/lib/widgets/pceditor.dart index e98c1bbb..443d82cd 100644 --- a/aidedejeu_flutter/lib/widgets/pceditor.dart +++ b/aidedejeu_flutter/lib/widgets/pceditor.dart @@ -26,11 +26,18 @@ class _PCEditorPageState extends State { List _races; List _subRaces; + BackgroundItem _background; + SubBackgroundItem _subBackground; + List _backgrounds; + List _subBackgrounds; + + // inits + @override void initState() { - // TODO: implement initState super.initState(); _initRaces(); + _initBackgrounds(); } void _initRaces() async { @@ -47,6 +54,23 @@ class _PCEditorPageState extends State { }); } + void _initBackgrounds() async { + var backgrounds = await loadBackgrounds(); + setState(() { + _backgrounds = backgrounds.map((e) => e as BackgroundItem).toList(); + }); + } + + void _initSubBackgrounds(BackgroundItem background) async { + var subBackgrounds = await loadSubBackgrounds(background); + setState(() { + _subBackgrounds = + subBackgrounds.map((e) => e as SubBackgroundItem).toList(); + }); + } + + // setters + void _setRace(RaceItem race) { setState(() { this._race = race; @@ -62,15 +86,46 @@ class _PCEditorPageState extends State { }); } - Widget _loadRacesWidget() { + void _setBackground(BackgroundItem background) { + setState(() { + this._background = background; + this._subBackground = null; + this._subBackgrounds = null; + }); + _initSubBackgrounds(background); + } + + void _setSubBackground(SubBackgroundItem subBackground) { + setState(() { + this._subBackground = subBackground; + }); + } + + // widgets generics + + Widget _loadMarkdown(String markdown) { + return MarkdownBody( + data: markdown ?? "", + onTapLink: (link) => Navigator.push( + context, + MaterialPageRoute(builder: (context) => LibraryPage(id: link)), + ), + ); + } + + Widget _loadItemsWidget( + {String hintText, + List items, + T selectedItem, + ValueChanged onChanged}) { return DropdownButton( - hint: Text("Race"), - value: _races != null ? _race : "", + hint: Text(hintText), + value: items != null ? selectedItem : "", onChanged: (value) { - _setRace(value); + onChanged(value); }, - items: _races != null - ? _races + items: items != null + ? items .map((e) => DropdownMenuItem( value: e, child: Text(e.name), @@ -80,96 +135,76 @@ class _PCEditorPageState extends State { ); } - Widget _loadRaceSubRaceWidget() { + // widgets specifics + + Widget _loadRacesWidget() { + return _loadItemsWidget( + hintText: "Race", + items: _races, + selectedItem: _race, + onChanged: (value) { + _setRace(value); + }, + ); + } + + Widget _loadSubRacesWidget() { + return _subRaces != null + ? _loadItemsWidget( + hintText: "Variante", + items: _subRaces, + selectedItem: _subRace, + onChanged: (value) { + _setSubRace(value); + }, + ) + : SizedBox.shrink(); + } + + Widget _loadRaceDetailsWidget() { return _race != null ? Column( children: [ Text("Augmentation de caractéristiques"), - MarkdownBody( - data: (_race?.abilityScoreIncrease ?? "") + - "\n\n" + - (_subRace?.abilityScoreIncrease ?? ""), - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.abilityScoreIncrease), + _loadMarkdown(_subRace?.abilityScoreIncrease), Text("Âge"), - MarkdownBody( - data: _race?.age ?? "", - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.age), Text("Alignement"), - MarkdownBody( - data: _race?.alignment ?? "", - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.alignment), Text("Taille"), - MarkdownBody( - data: _race?.size ?? "", - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.size), Text("Vitesse"), - MarkdownBody( - data: _race?.speed ?? "", - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.speed), Text("Vision dans le noir"), - MarkdownBody( - data: _race?.darkvision ?? "", - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.darkvision), Text("Langues"), - MarkdownBody( - data: _race?.languages ?? "", - onTapLink: (link) => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => LibraryPage(id: link)), - ), - ), + _loadMarkdown(_race?.languages), ], ) : SizedBox.shrink(); } - Widget _loadSubRacesWidget() { - return _subRaces != null - ? DropdownButton( - hint: Text("Sous-Race"), - value: _subRaces != null ? _subRace : "", + Widget _loadBackgroundsWidget() { + return _loadItemsWidget( + hintText: "Historique", + items: _backgrounds, + selectedItem: _background, + onChanged: (value) { + _setBackground(value); + }, + ); + } + + Widget _loadSubBackgroundsWidget() { + return _subBackgrounds != null + ? _loadItemsWidget( + hintText: "Variante", + items: _subBackgrounds, + selectedItem: _subBackground, onChanged: (value) { - _setSubRace(value); + _setSubBackground(value); }, - items: _subRaces != null - ? _subRaces - .map((e) => DropdownMenuItem( - value: e, - child: Text(e.name), - )) - .toList() - : null, ) : SizedBox.shrink(); } @@ -204,10 +239,15 @@ class _PCEditorPageState extends State { children: [ _loadRacesWidget(), _loadSubRacesWidget(), - _loadRaceSubRaceWidget(), + _loadRaceDetailsWidget(), + ], + ), + ListView( + children: [ + _loadBackgroundsWidget(), + _loadSubBackgroundsWidget(), ], ), - Text(""), Text(""), ], ),