From 765d65afd421fbe0317a96fd2684cbf8f0f03138 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Thu, 12 Mar 2020 17:05:53 +0100 Subject: [PATCH] BloC --- .../player_character_bloc.dart | 161 ++++++------------ aidedejeu_flutter/lib/database.dart | 2 +- aidedejeu_flutter/lib/models/items.dart | 2 +- aidedejeu_flutter/lib/widgets/filters.dart | 1 - aidedejeu_flutter/lib/widgets/library.dart | 6 +- aidedejeu_flutter/lib/widgets/pceditor.dart | 112 ------------ 6 files changed, 60 insertions(+), 224 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 a418edd1..a147d96f 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart @@ -4,9 +4,19 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/cupertino.dart'; -class PlayerCharacterState { +class PlayerCharacterState extends Equatable { final BuildContext context; + final RaceItem race; + final SubRaceItem subRace; + final List races; + final List subRaces; + + final BackgroundItem background; + final SubBackgroundItem subBackground; + final List backgrounds; + final List subBackgrounds; + PlayerCharacterState({ this.context, this.race, @@ -17,7 +27,7 @@ class PlayerCharacterState { this.backgrounds, this.subBackground, this.subBackgrounds, - }) {} + }); PlayerCharacterState copyWith({ BuildContext context, @@ -43,15 +53,29 @@ class PlayerCharacterState { ); } - RaceItem race; - SubRaceItem subRace; - List races; - List subRaces; - - BackgroundItem background; - SubBackgroundItem subBackground; - List backgrounds; - List subBackgrounds; + PlayerCharacterState copyWithClean({ + BuildContext context, + RaceItem race, + List races, + SubRaceItem subRace, + List subRaces, + BackgroundItem background, + List backgrounds, + SubBackgroundItem subBackground, + List subBackgrounds, + }) { + return PlayerCharacterState( + context: context ?? this.context, + race: race ?? this.race, + races: races ?? this.races, + subRace: race != null ? null : subRace ?? this.subRace, + subRaces: race != null ? subRaces : subRaces ?? this.subRaces, + background: background ?? this.background, + backgrounds: backgrounds ?? this.backgrounds, + subBackground: background != null ? null : subBackground ?? this.subBackground, + subBackgrounds: background != null ? subBackgrounds : subBackgrounds ?? this.subBackgrounds, + ); + } @override List get props => [ @@ -64,97 +88,25 @@ class PlayerCharacterState { backgrounds, subBackgrounds ]; - - Future initRaces() async { - print("initRaces"); - var races = await loadRaces(context); - this.races = races.toList(); - } - - Future initSubRaces(RaceItem race) async { - print("initSubRaces"); - var subRaces = await loadSubRaces(context, race); - this.subRaces = subRaces; - } - - Future initBackgrounds() async { - print("initBackgrounds"); - var backgrounds = await loadBackgrounds(context); - this.backgrounds = backgrounds; - } - - Future initSubBackgrounds(BackgroundItem background) async { - print("initSubBackgrounds"); - var subBackgrounds = await loadSubBackgrounds(context, background); - this.subBackgrounds = subBackgrounds; - } - - // setters - - Future setRace(RaceItem race) async { - this.race = race; - this.subRace = null; - this.subRaces = null; - await initSubRaces(race); - } - - Future setSubRace(SubRaceItem subRace) async { - this.subRace = subRace; - } - - Future setBackground(BackgroundItem background) async { - this.background = background; - this.subBackground = null; - this.subBackgrounds = null; - await initSubBackgrounds(background); - } - - Future setSubBackground(SubBackgroundItem subBackground) async { - this.subBackground = subBackground; - } } abstract class PlayerCharacterEvent extends Equatable {} -/* -class RacesEvent extends PlayerCharacterEvent { - List races; - - @override - List get props => [races]; -} -*/ -class RaceEvent extends PlayerCharacterEvent { - RaceItem race; - - @override - List get props => [race]; - - RaceEvent(RaceItem race) { - this.race = race; - } +class RaceEvent extends SetItemEvent { + RaceEvent(RaceItem item) : super(item); } -class SubRaceEvent extends PlayerCharacterEvent { - SubRaceItem subRace; - - @override - List get props => [subRace]; - - SubRaceEvent(SubRaceItem subRace) { - this.subRace = subRace; - } +class SubRaceEvent extends SetItemEvent { + SubRaceEvent(SubRaceItem item) : super(item); } class SetItemEvent extends PlayerCharacterEvent { - T item; + final T item; @override List get props => [item]; - SetItemEvent(T item) { - this.item = item; - } + SetItemEvent(T item) : this.item = item; } class BackgroundEvent extends SetItemEvent { @@ -170,7 +122,6 @@ class LoadEvent extends PlayerCharacterEvent { List get props => []; } -//enum PlayerCharacterEvent { setRace, setSubRace, } class PlayerCharacterBloc extends Bloc { BuildContext context; @@ -194,35 +145,33 @@ class PlayerCharacterBloc } else if (event is SubBackgroundEvent) { yield* _mapSubBackgroundEventToState(event); } else if (event is LoadEvent) { - final currentState = state.copyWith(); // state; - await currentState.initRaces(); - await currentState.initBackgrounds(); - yield currentState; + yield* _mapLoadEventToState(event); } } Stream _mapRaceEventToState( RaceEvent event) async* { - final currentState = state.copyWith(); - await currentState.setRace(event.race); - yield currentState; + var subRaces = await loadSubRaces(context, event.item); + yield state.copyWithClean(race: event.item, subRaces: subRaces); } + Stream _mapSubRaceEventToState( SubRaceEvent event) async* { - final currentState = state.copyWith(); - await currentState.setSubRace(event.subRace); - yield currentState; + yield state.copyWith(subRace: event.item); } Stream _mapBackgroundEventToState( BackgroundEvent event) async* { - final currentState = state.copyWith(); - await currentState.setBackground(event.item); - yield currentState; + var subBackgrounds = await loadSubBackgrounds(context, event.item); + yield state.copyWithClean(background: event.item,subBackgrounds: subBackgrounds); } Stream _mapSubBackgroundEventToState( SubBackgroundEvent event) async* { - final currentState = state.copyWith(); - await currentState.setSubBackground(event.item); - yield currentState; + yield state.copyWith(subBackground: event.item); + } + Stream _mapLoadEventToState( + LoadEvent event) async* { + var races = await loadRaces(context); + var backgrounds = await loadBackgrounds(context); + yield state.copyWith(races: races, backgrounds: backgrounds); // state; } } diff --git a/aidedejeu_flutter/lib/database.dart b/aidedejeu_flutter/lib/database.dart index 78178c66..c8d1d1ee 100644 --- a/aidedejeu_flutter/lib/database.dart +++ b/aidedejeu_flutter/lib/database.dart @@ -120,7 +120,7 @@ Future> loadSubRaces(BuildContext context, RaceItem race) asyn return null; } -Future> loadTypedItems(BuildContext context, {String itemType, Item item = null}) async { +Future> loadTypedItems(BuildContext context, {String itemType, Item item}) async { final db = await database; var response = await db.query( "Items", diff --git a/aidedejeu_flutter/lib/models/items.dart b/aidedejeu_flutter/lib/models/items.dart index b394e1e0..7c49355d 100644 --- a/aidedejeu_flutter/lib/models/items.dart +++ b/aidedejeu_flutter/lib/models/items.dart @@ -119,7 +119,7 @@ class SpellItem extends Item { } class Items extends Item { - Items(Map map) : super(map) {} + Items(Map map) : super(map); } abstract class FilteredItems extends Items { diff --git a/aidedejeu_flutter/lib/widgets/filters.dart b/aidedejeu_flutter/lib/widgets/filters.dart index 79d12732..4d603245 100644 --- a/aidedejeu_flutter/lib/widgets/filters.dart +++ b/aidedejeu_flutter/lib/widgets/filters.dart @@ -1,4 +1,3 @@ -import 'package:aidedejeu_flutter/models/items.dart'; import 'package:aidedejeu_flutter/theme.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/aidedejeu_flutter/lib/widgets/library.dart b/aidedejeu_flutter/lib/widgets/library.dart index b77a1ced..5efd10f4 100644 --- a/aidedejeu_flutter/lib/widgets/library.dart +++ b/aidedejeu_flutter/lib/widgets/library.dart @@ -23,7 +23,7 @@ class _LibraryPageState extends State { setState(() { this.item = item; if (item is FilteredItems) { - this.filters = (item as FilteredItems).toFilterList(); + this.filters = item.toFilterList(); } else { this.filters = null; } @@ -35,9 +35,9 @@ class _LibraryPageState extends State { } String markdown = ""; - Item item = null; + Item item; MarkdownStyleSheet styleSheet; - List filters = null; + List filters; @override void initState() { diff --git a/aidedejeu_flutter/lib/widgets/pceditor.dart b/aidedejeu_flutter/lib/widgets/pceditor.dart index f759d6f7..66071151 100644 --- a/aidedejeu_flutter/lib/widgets/pceditor.dart +++ b/aidedejeu_flutter/lib/widgets/pceditor.dart @@ -1,127 +1,15 @@ import 'package:aidedejeu_flutter/blocs/player_character/player_character_bloc.dart'; -import 'package:aidedejeu_flutter/database.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:bloc/bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; -import 'package:equatable/equatable.dart'; class PCEditorPage extends StatelessWidget { - // StatefulWidget { -/* PCEditorPage({Key key}) : super(key: key); - @override - State createState() => _PCEditorPageState(); -}*/ -/* -class PCEditorViewModel { - RaceItem _race; - SubRaceItem _subRace; - List _races; - List _subRaces; - - BackgroundItem _background; - SubBackgroundItem _subBackground; - List _backgrounds; - List _subBackgrounds; - - _PCEditorPageState state; - BuildContext context; - PCEditorViewModel(_PCEditorPageState state, BuildContext context) { - this.state = state; - this.context = context; - } - - void _initRaces() async { - var races = await loadRaces(context); - state.setState(() { - _races = races.toList(); - }); - } - - void _initSubRaces(RaceItem race) async { - var subRaces = await loadSubRaces(context, race); - state.setState(() { - _subRaces = subRaces; - }); - } - - void _initBackgrounds() async { - var backgrounds = await loadBackgrounds(context); - state.setState(() { - _backgrounds = backgrounds; - }); - } - - void _initSubBackgrounds(BackgroundItem background) async { - var subBackgrounds = await loadSubBackgrounds(context, background); - state.setState(() { - _subBackgrounds = subBackgrounds; - }); - } - - // setters - - void _setRace(RaceItem race) { - state.setState(() { - this._race = race; - this._subRace = null; - this._subRaces = null; - }); - _initSubRaces(race); - } - - void _setSubRace(SubRaceItem subRace) { - state.setState(() { - this._subRace = subRace; - }); - } - - void _setBackground(BackgroundItem background) { - state.setState(() { - this._background = background; - this._subBackground = null; - this._subBackgrounds = null; - }); - _initSubBackgrounds(background); - } - - void _setSubBackground(SubBackgroundItem subBackground) { - state.setState(() { - this._subBackground = subBackground; - }); - } - - -} - - */ - -//class _PCEditorPageState extends State { MarkdownStyleSheet styleSheet; - //PCEditorViewModel vm; - // inits -/* - @override - void initState() { - super.initState(); - //vm = PCEditorViewModel(this, context); - //vm._initRaces(); - //vm._initBackgrounds(); - } - - @protected - @mustCallSuper - void didChangeDependencies() { - super.didChangeDependencies(); - styleSheet = mainMarkdownStyleSheet(context); - } -*/ // widgets generics Widget _buildMarkdown(