From f93587c7452a7896954389a89b190599d2c1400f Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Fri, 13 Mar 2020 09:46:17 +0100 Subject: [PATCH] Clean BuildContext --- .../player_character_bloc.dart | 18 ++--- .../player_character_event.dart | 16 ++--- .../player_character_state.dart | 7 -- aidedejeu_flutter/lib/database.dart | 29 ++++---- aidedejeu_flutter/lib/localization.dart | 9 +++ aidedejeu_flutter/lib/models/filters.dart | 3 +- aidedejeu_flutter/lib/models/items.dart | 67 ++++++++++++------- aidedejeu_flutter/lib/widgets/library.dart | 13 ++-- aidedejeu_flutter/lib/widgets/pceditor.dart | 7 +- aidedejeu_flutter/pubspec.lock | 2 +- 10 files changed, 89 insertions(+), 82 deletions(-) diff --git a/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart b/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart index 36b6d147..dc39c0d6 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart @@ -1,21 +1,13 @@ import 'package:aidedejeu_flutter/blocs/player_character/player_character_event.dart'; import 'package:aidedejeu_flutter/blocs/player_character/player_character_state.dart'; import 'package:aidedejeu_flutter/database.dart'; -import 'package:aidedejeu_flutter/models/items.dart'; import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; -import 'package:flutter/cupertino.dart'; class PlayerCharacterBloc extends Bloc { - BuildContext context; - - PlayerCharacterBloc(BuildContext context) { - this.context = context; - } @override - PlayerCharacterState get initialState => PlayerCharacterState(context: context); + PlayerCharacterState get initialState => PlayerCharacterState(); @override Stream mapEventToState( @@ -35,7 +27,7 @@ class PlayerCharacterBloc } Stream _mapRaceEventToState( RaceEvent event) async* { - var subRaces = await loadSubRaces(context, event.item); + var subRaces = await loadSubRaces(event.item); yield state.copyWithClean(race: event.item, subRaces: subRaces); } @@ -45,7 +37,7 @@ class PlayerCharacterBloc } Stream _mapBackgroundEventToState( BackgroundEvent event) async* { - var subBackgrounds = await loadSubBackgrounds(context, event.item); + var subBackgrounds = await loadSubBackgrounds(event.item); yield state.copyWithClean(background: event.item,subBackgrounds: subBackgrounds); } Stream _mapSubBackgroundEventToState( @@ -54,8 +46,8 @@ class PlayerCharacterBloc } Stream _mapLoadEventToState( LoadEvent event) async* { - var races = await loadRaces(context); - var backgrounds = await loadBackgrounds(context); + var races = await loadRaces(); + var backgrounds = await loadBackgrounds(); yield state.copyWith(races: races, backgrounds: backgrounds); // state; } } diff --git a/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart b/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart index 6101213c..e4fe9186 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart @@ -3,14 +3,6 @@ import 'package:equatable/equatable.dart'; abstract class PlayerCharacterEvent extends Equatable {} -class RaceEvent extends SetItemEvent { - RaceEvent(RaceItem item) : super(item); -} - -class SubRaceEvent extends SetItemEvent { - SubRaceEvent(SubRaceItem item) : super(item); -} - class SetItemEvent extends PlayerCharacterEvent { final T item; @@ -20,6 +12,14 @@ class SetItemEvent extends PlayerCharacterEvent { SetItemEvent(T item) : this.item = item; } +class RaceEvent extends SetItemEvent { + RaceEvent(RaceItem item) : super(item); +} + +class SubRaceEvent extends SetItemEvent { + SubRaceEvent(SubRaceItem item) : super(item); +} + class BackgroundEvent extends SetItemEvent { BackgroundEvent(BackgroundItem item) : super(item); } diff --git a/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart b/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart index b9e2c189..e2843b8b 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart @@ -1,9 +1,7 @@ import 'package:aidedejeu_flutter/models/items.dart'; import 'package:equatable/equatable.dart'; -import 'package:flutter/cupertino.dart'; class PlayerCharacterState extends Equatable { - final BuildContext context; final RaceItem race; final SubRaceItem subRace; @@ -16,7 +14,6 @@ class PlayerCharacterState extends Equatable { final List subBackgrounds; PlayerCharacterState({ - this.context, this.race, this.races, this.subRace, @@ -28,7 +25,6 @@ class PlayerCharacterState extends Equatable { }); PlayerCharacterState copyWith({ - BuildContext context, RaceItem race, List races, SubRaceItem subRace, @@ -39,7 +35,6 @@ class PlayerCharacterState extends Equatable { List subBackgrounds, }) { return PlayerCharacterState( - context: context ?? this.context, race: race ?? this.race, races: races ?? this.races, subRace: subRace ?? this.subRace, @@ -52,7 +47,6 @@ class PlayerCharacterState extends Equatable { } PlayerCharacterState copyWithClean({ - BuildContext context, RaceItem race, List races, SubRaceItem subRace, @@ -63,7 +57,6 @@ class PlayerCharacterState extends Equatable { List subBackgrounds, }) { return PlayerCharacterState( - context: context ?? this.context, race: race ?? this.race, races: races ?? this.races, subRace: race != null ? null : subRace ?? this.subRace, diff --git a/aidedejeu_flutter/lib/database.dart b/aidedejeu_flutter/lib/database.dart index c8d1d1ee..615459a3 100644 --- a/aidedejeu_flutter/lib/database.dart +++ b/aidedejeu_flutter/lib/database.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:aidedejeu_flutter/models/items.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; import 'package:path/path.dart'; import 'package:sqflite/sqflite.dart'; @@ -41,7 +40,7 @@ Future getDatabaseInstance() async { return await openDatabase(path, readOnly: true); } -Future getItemWithId(BuildContext context, String id) async { +Future getItemWithId(String id) async { print("getItemWithId " + id); final db = await database; var response = await db.query( @@ -52,10 +51,10 @@ Future getItemWithId(BuildContext context, String id) async { if (response.isEmpty) { print("Id not found"); } - return response.isNotEmpty ? itemFromMap(context, response.first) : null; + return response.isNotEmpty ? itemFromMap(response.first) : null; } -Future loadChildrenItems(BuildContext context, Item item, List filters) async { +Future loadChildrenItems(Item item, List filters) async { print("getChildrenItems " + (item?.itemType ?? "")); if (item.itemType.endsWith("Items")) { String itemType = @@ -87,13 +86,13 @@ Future loadChildrenItems(BuildContext context, Item item, List fil print("Children not found"); } item.children = response.isNotEmpty - ? itemsFromMapList(context, response) + ? itemsFromMapList(response) : null; } return item; } -Future> loadRaces(BuildContext context) async { +Future> loadRaces() async { final db = await database; var response = await db.query( "Items", @@ -101,12 +100,12 @@ Future> loadRaces(BuildContext context) async { orderBy: "NormalizedName" ); if (response.isNotEmpty) { - return itemsFromMapList(context, response); + return itemsFromMapList(response); } return null; } -Future> loadSubRaces(BuildContext context, RaceItem race) async { +Future> loadSubRaces(RaceItem race) async { final db = await database; var response = await db.query( "Items", @@ -115,12 +114,12 @@ Future> loadSubRaces(BuildContext context, RaceItem race) asyn orderBy: "NormalizedName" ); if (response.isNotEmpty) { - return itemsFromMapList(context, response); + return itemsFromMapList(response); } return null; } -Future> loadTypedItems(BuildContext context, {String itemType, Item item}) async { +Future> loadTypedItems({String itemType, Item item}) async { final db = await database; var response = await db.query( "Items", @@ -129,16 +128,16 @@ Future> loadTypedItems(BuildContext context, {String ite orderBy: "NormalizedName" ); if (response.isNotEmpty) { - return itemsFromMapList(context, response); + return itemsFromMapList(response); } return null; } -Future> loadBackgrounds(BuildContext context) async { - return loadTypedItems(context, itemType: "BackgroundItem"); +Future> loadBackgrounds() async { + return loadTypedItems(itemType: "BackgroundItem"); } -Future> loadSubBackgrounds(BuildContext context, Item item) async { - return loadTypedItems(context, itemType: "SubBackgroundItem", item: item); +Future> loadSubBackgrounds(Item item) async { + return loadTypedItems(itemType: "SubBackgroundItem", item: item); } diff --git a/aidedejeu_flutter/lib/localization.dart b/aidedejeu_flutter/lib/localization.dart index 6e98dd9c..60520ed2 100644 --- a/aidedejeu_flutter/lib/localization.dart +++ b/aidedejeu_flutter/lib/localization.dart @@ -19,6 +19,15 @@ class AppLocalizations { return Localizations.of(context, AppLocalizations); } + String translate(name) { + return Intl.message( + name, + name: name, + desc: name, + locale: localeName, + ); + } + final String localeName; String get appTitle { diff --git a/aidedejeu_flutter/lib/models/filters.dart b/aidedejeu_flutter/lib/models/filters.dart index cdecaea0..9bc92177 100644 --- a/aidedejeu_flutter/lib/models/filters.dart +++ b/aidedejeu_flutter/lib/models/filters.dart @@ -6,12 +6,13 @@ enum FilterType { } class Filter { String name; + String displayName; FilterType type; List values; Set selectedValues = Set(); RangeValues rangeValues; - Filter({this.name, this.type, this.values}) { + Filter({this.name, this.type, this.values, this.displayName}) { rangeValues = RangeValues(0, values.length.toDouble() - 1); } } diff --git a/aidedejeu_flutter/lib/models/items.dart b/aidedejeu_flutter/lib/models/items.dart index 7c49355d..7f08e02b 100644 --- a/aidedejeu_flutter/lib/models/items.dart +++ b/aidedejeu_flutter/lib/models/items.dart @@ -1,6 +1,4 @@ -import 'package:aidedejeu_flutter/localization.dart'; import 'package:aidedejeu_flutter/models/filters.dart'; -import 'package:flutter/cupertino.dart'; class Item { String id; @@ -139,25 +137,30 @@ class MonsterItems extends FilteredItems { Filter sources; Filter terrains; - MonsterItems(BuildContext context, Map map) : super(map) { + MonsterItems(Map map) : super(map) { this.types = Filter( - name: AppLocalizations.of(context).monstersTypes, + name: "Types", + displayName: "monstersTypes", type: FilterType.Choices, values: map["Types"].toString().split("|")); this.challenges = Filter( - name: AppLocalizations.of(context).monstersChallenges, + name: "Challenges", + displayName: "monstersChallenges", type: FilterType.Range, values: map["Challenges"].toString().split("|")); this.sizes = Filter( - name: AppLocalizations.of(context).monstersSizes, + name: "Sizes", + displayName: "monstersSizes", type: FilterType.Range, values: map["Sizes"].toString().split("|")); this.sources = Filter( - name: AppLocalizations.of(context).monstersSources, + name: "Sources", + displayName: "monstersSources", type: FilterType.Choices, values: map["Sources"].toString().split("|")); this.terrains = Filter( - name: AppLocalizations.of(context).monstersTerrains, + name: "Terrains", + displayName: "monstersTerrains", type: FilterType.Choices, values: map["Terrains"].toString().split("|")); } @@ -185,53 +188,65 @@ class SpellItems extends FilteredItems { Filter durations; Filter sources; - SpellItems(BuildContext context, Map map) : super(map) { + SpellItems(Map map) : super(map) { this.classes = Filter( - name: AppLocalizations.of(context).spellsClasses, + name: "Classes", + displayName: "spellsClasses", type: FilterType.Choices, values: map["Classes"].toString().split("|")); this.levels = Filter( - name: AppLocalizations.of(context).spellsLevels, + name: "Levels", + displayName: "spellsLevels", type: FilterType.Choices, values: map["Levels"].toString().split("|")); this.schools = Filter( - name: AppLocalizations.of(context).spellsSchools, + name: "Schools", + displayName: "spellsSchools", type: FilterType.Choices, values: map["Schools"].toString().split("|")); this.rituals = Filter( - name: AppLocalizations.of(context).spellsRituals, + name: "Rituals", + displayName: "spellsRituals", type: FilterType.Choices, values: map["Rituals"].toString().split("|")); this.castingTimes = Filter( - name: AppLocalizations.of(context).spellsCastingTimes, + name: "CastingTimes", + displayName: "spellsCastingTimes", type: FilterType.Choices, values: map["CastingTimes"].toString().split("|")); this.ranges = Filter( - name: AppLocalizations.of(context).spellsRanges, + name: "Ranges", + displayName: "spellsRanges", type: FilterType.Choices, values: map["Ranges"].toString().split("|")); this.verbalComponents = Filter( - name: AppLocalizations.of(context).spellsVerbalComponents, + name: "VerbalComponents", + displayName: "spellsVerbalComponents", type: FilterType.Choices, values: map["VerbalComponents"].toString().split("|")); this.somaticComponents = Filter( - name: AppLocalizations.of(context).spellsSomaticComponents, + name: "SomaticComponents", + displayName: "spellsSomaticComponents", type: FilterType.Choices, values: map["SomaticComponents"].toString().split("|")); this.materialComponents = Filter( - name: AppLocalizations.of(context).spellsMaterialComponents, + name: "MaterialComponents", + displayName: "spellsMaterialComponents", type: FilterType.Choices, values: map["MaterialComponents"].toString().split("|")); this.concentrations = Filter( - name: AppLocalizations.of(context).spellsConcentrations, + name: "Concentrations", + displayName: "spellsConcentrations", type: FilterType.Choices, values: map["Concentrations"].toString().split("|")); this.durations = Filter( - name: AppLocalizations.of(context).spellsDurations, + name: "Durations", + displayName: "spellsDurations", type: FilterType.Choices, values: map["Durations"].toString().split("|")); this.sources = Filter( - name: AppLocalizations.of(context).spellsSources, + name: "Sources", + displayName: "spellsSources", type: FilterType.Choices, values: map["Sources"].toString().split("|")); } @@ -337,7 +352,7 @@ class SubBackgroundItem extends BackgroundItem { SubBackgroundItem(Map map) : super(map); } -Item itemFromMap(BuildContext context, Map map) { +Item itemFromMap(Map map) { switch (map["ItemType"]) { case "RaceItem": return RaceItem(map); @@ -352,17 +367,17 @@ Item itemFromMap(BuildContext context, Map map) { case "MonsterItem": return MonsterItem(map); case "MonsterItems": - return MonsterItems(context, map); + return MonsterItems(map); case "SpellItem": return SpellItem(map); case "SpellItems": - return SpellItems(context, map); + return SpellItems(map); } return Item(map); } -List itemsFromMapList(BuildContext context, List> mapList) { +List itemsFromMapList(List> mapList) { return List.generate(mapList.length, (i) { - return itemFromMap(context, mapList[i]); + return itemFromMap(mapList[i]); }); } diff --git a/aidedejeu_flutter/lib/widgets/library.dart b/aidedejeu_flutter/lib/widgets/library.dart index 5efd10f4..0fd77175 100644 --- a/aidedejeu_flutter/lib/widgets/library.dart +++ b/aidedejeu_flutter/lib/widgets/library.dart @@ -54,9 +54,8 @@ class _LibraryPageState extends State { } Future _loadItem() async { - var item = await getItemWithId(context, this.widget.id); - var items = await loadChildrenItems(context, item, filters); - //setItem(item); + var item = await getItemWithId(this.widget.id); + await loadChildrenItems(item, filters); return item; } @@ -177,7 +176,7 @@ class _LibraryPageState extends State { setState(() { filter.selectedValues = choices; }); - loadChildrenItems(context, item, filters).then((value) => { + loadChildrenItems(item, filters).then((value) => { setState(() { this.item = item; this.filters = filters; @@ -195,7 +194,7 @@ class _LibraryPageState extends State { setState(() { filter.rangeValues = values; }); - loadChildrenItems(context, item, filters).then((value) => { + loadChildrenItems(item, filters).then((value) => { setState(() { this.item = item; this.filters = filters; @@ -214,7 +213,7 @@ class _LibraryPageState extends State { alignment: Alignment.centerLeft, child: Padding( padding: const EdgeInsets.fromLTRB(8.0,1.0,8.0,1.0), - child: Text(filter.name, style: TextStyle(fontFamily: "Cinzel"),), + child: Text(AppLocalizations.of(context).translate(filter.name), style: TextStyle(fontFamily: "Cinzel"),), ), ), Container( @@ -280,7 +279,7 @@ class _LibraryPageState extends State { height: 30.0, width: 30.0, allowDrawingOutsideViewBox: true, - ), //Icon(Icons.filter), + ), onPressed: () => Scaffold.of(context).openEndDrawer(), tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip, diff --git a/aidedejeu_flutter/lib/widgets/pceditor.dart b/aidedejeu_flutter/lib/widgets/pceditor.dart index 0ea73800..4d856087 100644 --- a/aidedejeu_flutter/lib/widgets/pceditor.dart +++ b/aidedejeu_flutter/lib/widgets/pceditor.dart @@ -3,6 +3,7 @@ import 'package:aidedejeu_flutter/blocs/player_character/player_character_event. import 'package:aidedejeu_flutter/blocs/player_character/player_character_state.dart'; import 'package:aidedejeu_flutter/localization.dart'; import 'package:aidedejeu_flutter/models/items.dart'; +import 'package:aidedejeu_flutter/theme.dart'; import 'package:aidedejeu_flutter/widgets/library.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -10,15 +11,13 @@ import 'package:flutter_markdown/flutter_markdown.dart'; class PCEditorPage extends StatelessWidget { - MarkdownStyleSheet styleSheet; - // widgets generics Widget _buildMarkdown( BuildContext context, PlayerCharacterState state, String markdown) { return MarkdownBody( data: markdown ?? "", - styleSheet: styleSheet, + styleSheet: mainMarkdownStyleSheet(context), onTapLink: (link) => Navigator.push( context, MaterialPageRoute(builder: (context) => LibraryPage(id: link)), @@ -176,7 +175,7 @@ class PCEditorPage extends StatelessWidget { providers: [ BlocProvider( create: (context) { - return PlayerCharacterBloc(context) + return PlayerCharacterBloc() ..add( LoadEvent(), ); diff --git a/aidedejeu_flutter/pubspec.lock b/aidedejeu_flutter/pubspec.lock index 939ca36b..2ac70421 100644 --- a/aidedejeu_flutter/pubspec.lock +++ b/aidedejeu_flutter/pubspec.lock @@ -169,7 +169,7 @@ packages: name: intl url: "https://pub.dartlang.org" source: hosted - version: "0.16.0" + version: "0.16.1" intl_translation: dependency: "direct main" description: