From 67d75e4a5ec36f3dbc33a6927eb1b1e87447f3b9 Mon Sep 17 00:00:00 2001 From: MohammadIq123 Date: Sun, 17 Oct 2021 18:12:42 +0300 Subject: [PATCH] fix: add single item to favorites list one time --- lib/main.dart | 35 ++++++++++++++++++++++++--------- lib/models/users_viewmodel.dart | 17 +++++++++++----- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index c55ccd4..803b566 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -65,12 +65,27 @@ class _MyHomePageState extends State { child: Text(user.phone), ), ), - IconButton( - icon: Icon(Icons.add), - onPressed: () { - // var favoritesViewModel = context.read(); - var favoritesViewModel = Provider.of(context, listen: false); - favoritesViewModel.insert(user); + Consumer( + builder: (context, usersViewModel, child) { + if (!usersViewModel.iFFav(user)) { + return IconButton( + icon: Icon(Icons.add), + onPressed: () { + // var favoritesViewModel = context.read(); + + var favoritesViewModel = + Provider.of(context, listen: false); + favoritesViewModel.insert(user); + }, + ); + } else { + return IconButton( + icon: Icon(Icons.download_done), + onPressed: () { + debugPrint('it is in favorites'); + }, + ); + } }, ), ], @@ -100,11 +115,12 @@ class _MyHomePageState extends State { title: Text(widget.title), actions: [ IconButton( - onPressed: () => Navigator.of(context).push(MaterialPageRoute(builder: (_context) => FavoritesPage())), + onPressed: () => Navigator.of(context).push( + MaterialPageRoute(builder: (_context) => FavoritesPage())), icon: Consumer( builder: (context, favoritesViewModel, child) => Text( '${favoritesViewModel.favorites.length}', - style: Theme.of(context).textTheme.headline4, + style: TextStyle(fontSize: 15), ), ), ), @@ -113,7 +129,8 @@ class _MyHomePageState extends State { body: Center(child: Consumer( builder: (context, usersViewModel, child) { debugPrint('building users list..'); - debugPrint('usersViewModel.loadingState: ${usersViewModel.loadingState}'); + debugPrint( + 'usersViewModel.loadingState: ${usersViewModel.loadingState}'); if (usersViewModel.loadingState == LoadingState.loading) { return const Center(child: CircularProgressIndicator()); diff --git a/lib/models/users_viewmodel.dart b/lib/models/users_viewmodel.dart index b5f2a73..9f41910 100644 --- a/lib/models/users_viewmodel.dart +++ b/lib/models/users_viewmodel.dart @@ -21,9 +21,11 @@ class UsersViewModel extends ChangeNotifier { notifyListeners(); } - void fetchUsers() async { - + bool iFFav(User user) { + return favorites.contains(user); + } + void fetchUsers() async { loadingState = LoadingState.loading; notifyListeners(); @@ -38,16 +40,21 @@ class UsersViewModel extends ChangeNotifier { debugPrint('response.statusCode: ${response.statusCode}'); var jsonUsers = jsonDecode(response.body); // jsonUsers[0]['name'] = null; - var users = jsonUsers.map((_userJson) => User.fromJson(_userJson)).toList(); + var users = + jsonUsers.map((_userJson) => User.fromJson(_userJson)).toList(); // debugPrint('users.length: ${users.length}'); usersResponse = Tuple2(null, users); notifyListeners(); } catch (e) { if (response?.statusCode == 200) { - usersResponse = Tuple2(ErrorResponse('توجد مشكلة في عرض المعلومات', response?.statusCode), null); + usersResponse = Tuple2( + ErrorResponse('توجد مشكلة في عرض المعلومات', response?.statusCode), + null); } else { - usersResponse = Tuple2(ErrorResponse('لا يمكن الإتصال. يرجى المحاولة فيما بعد...', -1), null); + usersResponse = Tuple2( + ErrorResponse('لا يمكن الإتصال. يرجى المحاولة فيما بعد...', -1), + null); } debugPrint('e: $e');