Skip to content

Commit 34b206d

Browse files
feat(characters): update search global
1 parent 7e9658d commit 34b206d

File tree

6 files changed

+156
-10
lines changed

6 files changed

+156
-10
lines changed

libs/flutter/characters/lib/src/characters_controller.dart

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,47 @@ var characterService = CharacterService();
77
class CharactersController = CharactersControllerBase with _$CharactersController;
88

99
abstract class CharactersControllerBase with Store {
10+
@observable
11+
List<Character> allCharacters = <Character>[];
12+
1013
@observable
1114
List<Character> characters = <Character>[];
1215

1316
@observable
1417
bool hasCharacters = false;
1518

19+
@observable
20+
bool hasFilterCharacters = false;
21+
1622
@action
1723
getAllCharacters() async {
18-
characters = await characterService.getAllCharacters();
24+
allCharacters = await characterService.getAllCharacters();
25+
characters = allCharacters;
1926
hasCharacters = true;
2027
}
2128

2229
@action
2330
getFilteredCharacters(CharacterFilters filters) async {
2431
hasCharacters = false;
2532

26-
characters = await characterService.getFilteredCharacters(filters);
33+
allCharacters = await characterService.getFilteredCharacters(filters);
34+
characters = allCharacters;
2735

2836
hasCharacters = true;
2937
}
38+
39+
@action
40+
getFilteredToCharacter(String value) async {
41+
if (value.isEmpty) {
42+
hasFilterCharacters = false;
43+
characters = allCharacters;
44+
} else {
45+
List<Character> searchCharacter = allCharacters
46+
.where((element) => element.name.toLowerCase().contains(value.toLowerCase()))
47+
.toList();
48+
49+
hasFilterCharacters = true;
50+
characters = searchCharacter;
51+
}
52+
}
3053
}

libs/flutter/characters/lib/src/characters_controller.g.dart

Lines changed: 45 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

libs/flutter/characters/lib/src/characters_page.dart

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ class _CharactersPageState extends State<CharactersPage> {
4040
searchController: searchValueController,
4141
textInputAction: TextInputAction.search,
4242
onSubmitted: (value) {
43-
Modular.to.pushNamed('/character/search/$value');
43+
Modular.to.pushNamed('/character/search/$value')
44+
.then((value) => charactersController.getAllCharacters());
4445
searchValueController.clear();
4546
},
47+
onChanged: ((value) => charactersController.getFilteredToCharacter(value)),
4648
actions: [
4749
IconButton(
4850
icon: const Icon(
@@ -70,9 +72,19 @@ class _CharactersPageState extends State<CharactersPage> {
7072
return Observer(
7173
builder: (_) {
7274
if (charactersController.characters.isEmpty && charactersController.hasCharacters) {
73-
return const FeedbackPageWidget(
74-
illustration: Assets.ilSearch,
75-
message: 'Desculpe, não conseguimos \n encontrar o personagem',
75+
return SingleChildScrollView(
76+
child: FeedbackPageWidget(
77+
illustration: Assets.ilSearch,
78+
message: 'Desculpe, não conseguimos \n encontrar o personagem',
79+
description: 'Não se preocupe, ainda podemos \nbuscar no banco de dados.',
80+
enabledAction: true,
81+
textButton: 'Buscar',
82+
onPressed: () {
83+
Modular.to.pushNamed('/character/search/${searchValueController.text}')
84+
.then((value) => charactersController.getAllCharacters());
85+
searchValueController.clear();
86+
},
87+
),
7688
);
7789
}
7890

libs/flutter/characters/lib/src/pages/search/search_controller.dart

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,38 @@ var characterService = CharacterService();
77
class SearchController = SearchControllerBase with _$SearchController;
88

99
abstract class SearchControllerBase with Store {
10+
@observable
11+
List<Character> allCharacters = <Character>[];
12+
1013
@observable
1114
List<Character> characters = <Character>[];
1215

1316
@observable
1417
bool hasCharacters = false;
1518

19+
@observable
20+
bool hasFilterCharacters = false;
21+
1622
@action
1723
getFilteredCharacters(String name) async {
18-
characters = await characterService.getFilteredCharacters(CharacterFilters(name: name));
19-
2024
hasCharacters = true;
25+
allCharacters = await characterService.getFilteredCharacters(CharacterFilters(name: name));
26+
characters = allCharacters;
27+
hasCharacters = true;
28+
}
29+
30+
@action
31+
getFilteredToSearchCharacter(String value) async {
32+
if (value.isEmpty) {
33+
hasFilterCharacters = false;
34+
characters = allCharacters;
35+
} else {
36+
List<Character> searchCharacter = allCharacters
37+
.where((element) => element.name.toLowerCase().contains(value.toLowerCase()))
38+
.toList();
39+
40+
hasFilterCharacters = true;
41+
characters = searchCharacter;
42+
}
2143
}
2244
}

libs/flutter/characters/lib/src/pages/search/search_controller.g.dart

Lines changed: 45 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

libs/flutter/characters/lib/src/pages/search/search_page.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class _SearchPageState extends State<SearchPage> {
4242
textInputAction: TextInputAction.search,
4343
onSubmitted: (value) => searchController.getFilteredCharacters(value),
4444
onPressedLeadingIcon: () => Modular.to.pop(),
45+
onChanged: ((value) => searchController.getFilteredToSearchCharacter(value)),
4546
),
4647
body: SafeArea(
4748
child: buildList(),

0 commit comments

Comments
 (0)