From e845cf7c7f88c9541c53c0f49c8cc5c6ef8f531f Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sun, 1 Mar 2020 00:27:51 +0100 Subject: [PATCH] Races+SubRaces --- aidedejeu_flutter/lib/database.dart | 26 +++++++ aidedejeu_flutter/lib/models/items.dart | 12 ++- aidedejeu_flutter/lib/widgets/pceditor.dart | 81 ++++++++++++++++++--- 3 files changed, 105 insertions(+), 14 deletions(-) diff --git a/aidedejeu_flutter/lib/database.dart b/aidedejeu_flutter/lib/database.dart index 1c74c89e..cde70336 100644 --- a/aidedejeu_flutter/lib/database.dart +++ b/aidedejeu_flutter/lib/database.dart @@ -92,3 +92,29 @@ Future loadChildrenItems(Item item, List filters) async { return item; } +Future> loadRaces() async { + final db = await database; + var response = await db.query( + "Items", + where: "ItemType = 'RaceItem'", + orderBy: "NormalizedName" + ); + if (response.isNotEmpty) { + return itemsFromMapList(response); + } + return null; +} + +Future> loadSubRaces(RaceItem race) async { + final db = await database; + var response = await db.query( + "Items", + where: "ItemType = 'SubRaceItem' AND ParentLink = ?", + whereArgs: [race.id], + orderBy: "NormalizedName" + ); + if (response.isNotEmpty) { + return itemsFromMapList(response); + } + return null; +} diff --git a/aidedejeu_flutter/lib/models/items.dart b/aidedejeu_flutter/lib/models/items.dart index e4b747e6..7cb6014f 100644 --- a/aidedejeu_flutter/lib/models/items.dart +++ b/aidedejeu_flutter/lib/models/items.dart @@ -3,6 +3,7 @@ import 'package:aidedejeu_flutter/models/filters.dart'; class Item { String id; String rootId; + String newId; String parentLink; String name; String normalizedName; @@ -20,6 +21,7 @@ class Item { Item(Map map) { this.id = map["Id"]; this.rootId = map["RootId"]; + this.newId = map["NewId"]; this.name = map["Name"]; this.alias = map["AltName"]; this.aliasText = map["AltNameText"]; @@ -134,6 +136,11 @@ class RaceItem extends Item { } +class SubRaceItem extends RaceItem { + SubRaceItem(Map map) : super(map); + +} + class RaceItems extends FilteredItems { RaceItems(Map map) : super(map); @@ -147,6 +154,7 @@ class RaceItems extends FilteredItems { Item itemFromMap(Map map) { switch(map["ItemType"]) { case "RaceItem": return RaceItem(map); + case "SubRaceItem": return SubRaceItem(map); case "RaceItems": return RaceItems(map); case "MonsterItem": return MonsterItem(map); case "MonsterItems": return MonsterItems(map); @@ -154,8 +162,8 @@ Item itemFromMap(Map map) { return Item(map); } -List itemsFromMapList(List> mapList) { +List itemsFromMapList(List> mapList) { return List.generate(mapList.length, (i) { return itemFromMap(mapList[i]); }); -} \ No newline at end of file +} diff --git a/aidedejeu_flutter/lib/widgets/pceditor.dart b/aidedejeu_flutter/lib/widgets/pceditor.dart index 2ffa8bbf..37e9650c 100644 --- a/aidedejeu_flutter/lib/widgets/pceditor.dart +++ b/aidedejeu_flutter/lib/widgets/pceditor.dart @@ -1,12 +1,6 @@ import 'package:aidedejeu_flutter/database.dart'; -import 'package:aidedejeu_flutter/models/filters.dart'; -import 'package:aidedejeu_flutter/widgets/filters.dart'; import 'package:aidedejeu_flutter/models/items.dart'; -import 'package:aidedejeu_flutter/widgets/library.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_markdown/flutter_markdown.dart'; -import 'package:flutter_svg/flutter_svg.dart'; class PCEditorPage extends StatefulWidget { PCEditorPage({Key key}) : super(key: key); @@ -25,7 +19,74 @@ class PCEditorPage extends StatefulWidget { } class _PCEditorPageState extends State { - RaceItem race; + RaceItem _race; + SubRaceItem _subRace; + List _races; + List _subRaces; + + @override + void initState() { + // TODO: implement initState + super.initState(); + loadRaces().then((value) => setState(() { + _races = value.map((e) => e as RaceItem).toList(); + })); + } + + void _setRace(RaceItem race) { + setState(() { + this._race = race; + this._subRace = null; + this._subRaces = null; + }); + loadSubRaces(race).then((value) => setState(() { + _subRaces = value.map((e) => e as SubRaceItem).toList(); + })); + } + + void _setSubRace(SubRaceItem subRace) { + setState(() { + this._subRace = subRace; + }); + } + + Widget _loadRacesWidget() { + return DropdownButton( + hint: Text("Race"), + value: _races != null ? _race : "", + onChanged: (value) { + _setRace(value); + }, + items: _races != null + ? _races + .map((e) => DropdownMenuItem( + value: e, + child: Text(e.name), + )) + .toList() + : null, + ); + } + + Widget _loadSubRacesWidget() { + return _subRaces != null + ? DropdownButton( + hint: Text("Sous-Race"), + value: _subRaces != null ? _subRace : "", + onChanged: (value) { + _setSubRace(value); + }, + items: _subRaces != null + ? _subRaces + .map((e) => DropdownMenuItem( + value: e, + child: Text(e.name), + )) + .toList() + : null, + ) + : SizedBox.shrink(); + } @override Widget build(BuildContext context) { @@ -34,11 +95,7 @@ class _PCEditorPageState extends State { title: Text("Personnage"), ), body: Column( - children: [ - race != null - ? Text(race.name) - : DropdownButton(hint: Text("Race"), value: "") - ], + children: [_loadRacesWidget(), _loadSubRacesWidget()], ), ); }