1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-29 14:35:45 +00:00

Background + clean

This commit is contained in:
Yan Maniez 2020-03-01 21:30:33 +01:00
parent 28fd23b2d1
commit dece242a54
3 changed files with 169 additions and 82 deletions

View file

@ -118,3 +118,26 @@ Future<List<SubRaceItem>> loadSubRaces(RaceItem race) async {
} }
return null; return null;
} }
Future<List<T>> loadTypedItems<T extends Item>({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<List<BackgroundItem>> loadBackgrounds() async {
return loadTypedItems<BackgroundItem>(itemType: "BackgroundItem");
}
Future<List<SubBackgroundItem>> loadSubBackgrounds(Item item) async {
return loadTypedItems<SubBackgroundItem>(itemType: "SubBackgroundItem", item: item);
}

View file

@ -205,6 +205,26 @@ class RaceItems extends FilteredItems {
} }
} }
class BackgroundItem extends Item {
String skillProficiencies;
String masteredTools;
String masteredLanguages;
String equipment;
BackgroundItem(Map<String, dynamic> 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<String, dynamic> map) : super(map);
}
Item itemFromMap(Map<String, dynamic> map) { Item itemFromMap(Map<String, dynamic> map) {
switch (map["ItemType"]) { switch (map["ItemType"]) {
case "RaceItem": case "RaceItem":
@ -213,6 +233,10 @@ Item itemFromMap(Map<String, dynamic> map) {
return SubRaceItem(map); return SubRaceItem(map);
case "RaceItems": case "RaceItems":
return RaceItems(map); return RaceItems(map);
case "BackgroundItem":
return BackgroundItem(map);
case "SubBackgroundItem":
return SubBackgroundItem(map);
case "MonsterItem": case "MonsterItem":
return MonsterItem(map); return MonsterItem(map);
case "MonsterItems": case "MonsterItems":

View file

@ -26,11 +26,18 @@ class _PCEditorPageState extends State<PCEditorPage> {
List<RaceItem> _races; List<RaceItem> _races;
List<SubRaceItem> _subRaces; List<SubRaceItem> _subRaces;
BackgroundItem _background;
SubBackgroundItem _subBackground;
List<BackgroundItem> _backgrounds;
List<SubBackgroundItem> _subBackgrounds;
// inits
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
_initRaces(); _initRaces();
_initBackgrounds();
} }
void _initRaces() async { void _initRaces() async {
@ -47,6 +54,23 @@ class _PCEditorPageState extends State<PCEditorPage> {
}); });
} }
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) { void _setRace(RaceItem race) {
setState(() { setState(() {
this._race = race; this._race = race;
@ -62,15 +86,46 @@ class _PCEditorPageState extends State<PCEditorPage> {
}); });
} }
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<T extends Item>(
{String hintText,
List<T> items,
T selectedItem,
ValueChanged<T> onChanged}) {
return DropdownButton( return DropdownButton(
hint: Text("Race"), hint: Text(hintText),
value: _races != null ? _race : "", value: items != null ? selectedItem : "",
onChanged: (value) { onChanged: (value) {
_setRace(value); onChanged(value);
}, },
items: _races != null items: items != null
? _races ? items
.map((e) => DropdownMenuItem( .map((e) => DropdownMenuItem(
value: e, value: e,
child: Text(e.name), child: Text(e.name),
@ -80,96 +135,76 @@ class _PCEditorPageState extends State<PCEditorPage> {
); );
} }
Widget _loadRaceSubRaceWidget() { // widgets specifics
Widget _loadRacesWidget() {
return _loadItemsWidget<RaceItem>(
hintText: "Race",
items: _races,
selectedItem: _race,
onChanged: (value) {
_setRace(value);
},
);
}
Widget _loadSubRacesWidget() {
return _subRaces != null
? _loadItemsWidget<SubRaceItem>(
hintText: "Variante",
items: _subRaces,
selectedItem: _subRace,
onChanged: (value) {
_setSubRace(value);
},
)
: SizedBox.shrink();
}
Widget _loadRaceDetailsWidget() {
return _race != null return _race != null
? Column( ? Column(
children: [ children: [
Text("Augmentation de caractéristiques"), Text("Augmentation de caractéristiques"),
MarkdownBody( _loadMarkdown(_race?.abilityScoreIncrease),
data: (_race?.abilityScoreIncrease ?? "") + _loadMarkdown(_subRace?.abilityScoreIncrease),
"\n\n" +
(_subRace?.abilityScoreIncrease ?? ""),
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
Text("Âge"), Text("Âge"),
MarkdownBody( _loadMarkdown(_race?.age),
data: _race?.age ?? "",
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
Text("Alignement"), Text("Alignement"),
MarkdownBody( _loadMarkdown(_race?.alignment),
data: _race?.alignment ?? "",
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
Text("Taille"), Text("Taille"),
MarkdownBody( _loadMarkdown(_race?.size),
data: _race?.size ?? "",
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
Text("Vitesse"), Text("Vitesse"),
MarkdownBody( _loadMarkdown(_race?.speed),
data: _race?.speed ?? "",
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
Text("Vision dans le noir"), Text("Vision dans le noir"),
MarkdownBody( _loadMarkdown(_race?.darkvision),
data: _race?.darkvision ?? "",
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
Text("Langues"), Text("Langues"),
MarkdownBody( _loadMarkdown(_race?.languages),
data: _race?.languages ?? "",
onTapLink: (link) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LibraryPage(id: link)),
),
),
], ],
) )
: SizedBox.shrink(); : SizedBox.shrink();
} }
Widget _loadSubRacesWidget() { Widget _loadBackgroundsWidget() {
return _subRaces != null return _loadItemsWidget<BackgroundItem>(
? DropdownButton( hintText: "Historique",
hint: Text("Sous-Race"), items: _backgrounds,
value: _subRaces != null ? _subRace : "", selectedItem: _background,
onChanged: (value) {
_setBackground(value);
},
);
}
Widget _loadSubBackgroundsWidget() {
return _subBackgrounds != null
? _loadItemsWidget<SubBackgroundItem>(
hintText: "Variante",
items: _subBackgrounds,
selectedItem: _subBackground,
onChanged: (value) { onChanged: (value) {
_setSubRace(value); _setSubBackground(value);
}, },
items: _subRaces != null
? _subRaces
.map((e) => DropdownMenuItem(
value: e,
child: Text(e.name),
))
.toList()
: null,
) )
: SizedBox.shrink(); : SizedBox.shrink();
} }
@ -204,10 +239,15 @@ class _PCEditorPageState extends State<PCEditorPage> {
children: <Widget>[ children: <Widget>[
_loadRacesWidget(), _loadRacesWidget(),
_loadSubRacesWidget(), _loadSubRacesWidget(),
_loadRaceSubRaceWidget(), _loadRaceDetailsWidget(),
],
),
ListView(
children: <Widget>[
_loadBackgroundsWidget(),
_loadSubBackgroundsWidget(),
], ],
), ),
Text(""),
Text(""), Text(""),
], ],
), ),