mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-29 14:35:45 +00:00
Background + clean
This commit is contained in:
parent
28fd23b2d1
commit
dece242a54
3 changed files with 169 additions and 82 deletions
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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":
|
||||||
|
|
|
||||||
|
|
@ -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(""),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue