From 8d84f0df472c66150cc2c93995c470d9471a2b8a Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Sat, 29 Jan 2022 15:58:15 +0330 Subject: [PATCH] bookmark bug fixed --- lib/pages/home/news/news.dart | 9 ++++++- lib/pages/home/radar/radar.dart | 24 ++++++++++++----- .../radar/radar_details/radar_details.dart | 8 +++++- .../home/radar/widgets/categories_gird.dart | 4 +-- .../home/radar/widgets/categories_list.dart | 2 +- .../filtered_bookmark/filtered_bookmark.dart | 8 +++--- lib/pages/home/widgets/news_overview.dart | 27 ++++++++----------- lib/pages/home/widgets/radar_overview.dart | 6 ++--- lib/providers/user_provider.dart | 24 +++++++---------- lib/routes/route_generator.dart | 23 +++------------- 10 files changed, 67 insertions(+), 68 deletions(-) diff --git a/lib/pages/home/news/news.dart b/lib/pages/home/news/news.dart index 7e80527..ab60ad2 100644 --- a/lib/pages/home/news/news.dart +++ b/lib/pages/home/news/news.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/enums.dart'; +import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/pages/home/news/news_state.dart'; import 'package:didvan/pages/home/widgets/news_overview.dart'; @@ -60,7 +61,13 @@ class _NewsState extends State { final news = state.news[index]; return NewsOverview( news: news, - onMarkChanged: (value) => state.onMarkChanged(news.id, value), + onMarkChanged: (id, value) => state.onMarkChanged(id, value), + newsRequestArgs: NewsRequestArgs( + page: state.page, + endDate: state.endDate, + startDate: state.startDate, + search: state.search, + ), ); }, enableEmptyState: state.news.isEmpty, diff --git a/lib/pages/home/radar/radar.dart b/lib/pages/home/radar/radar.dart index 3765857..1baf079 100644 --- a/lib/pages/home/radar/radar.dart +++ b/lib/pages/home/radar/radar.dart @@ -1,3 +1,5 @@ +// ignore_for_file: prefer_const_constructors + import 'dart:async'; import 'dart:math'; @@ -5,6 +7,7 @@ import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/enums.dart'; +import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/pages/home/radar/radar_state.dart'; import 'package:didvan/pages/home/radar/widgets/categories_gird.dart'; @@ -132,9 +135,18 @@ class _RadarState extends State { final radar = state.radars[index]; return RadarOverview( radar: radar, - onMarkChanged: (value) => state.changeMark(radar.id, value), - onCommentsChanged: (count) => - state.onCommentsChanged(radar.id, count), + onMarkChanged: (id, value) => state.changeMark(id, value), + onCommentsChanged: (id, count) => + state.onCommentsChanged(id, count), + radarRequestArgs: RadarRequestArgs( + page: state.page, + categories: + List.from(state.selectedCats.map((cat) => cat.id)), + endDate: state.endDate, + isSingleItem: false, + search: state.search, + startDate: state.startDate, + ), ); }, childCount: state.radars.length, @@ -145,9 +157,9 @@ class _RadarState extends State { ), ], ), - if (state.appState != AppState.failed) const CategoriesRow1(), - if (state.appState != AppState.failed) const CategoriesRow2(), - if (state.appState != AppState.failed) const CategoriesList(), + if (state.appState != AppState.failed) CategoriesRow1(), + if (state.appState != AppState.failed) CategoriesRow2(), + if (state.appState != AppState.failed) CategoriesList(), ], ), ); diff --git a/lib/pages/home/radar/radar_details/radar_details.dart b/lib/pages/home/radar/radar_details/radar_details.dart index 4d1fcf7..0702917 100644 --- a/lib/pages/home/radar/radar_details/radar_details.dart +++ b/lib/pages/home/radar/radar_details/radar_details.dart @@ -59,9 +59,15 @@ class _RadarDetailsState extends State { state.currentRadar.id, value, ), - onCommentsChanged: state.onCommentsChanged, categories: state.currentRadar.categories, scrollController: _scrollController, + onCommentsChanged: (count) { + state.onCommentsChanged(count); + widget.pageData['onCommentsChanged']( + state.currentRadar.id, + count, + ); + }, ), ), ], diff --git a/lib/pages/home/radar/widgets/categories_gird.dart b/lib/pages/home/radar/widgets/categories_gird.dart index 8fc0048..9818b02 100644 --- a/lib/pages/home/radar/widgets/categories_gird.dart +++ b/lib/pages/home/radar/widgets/categories_gird.dart @@ -9,7 +9,7 @@ class CategoriesRow1 extends StatelessWidget { @override Widget build(BuildContext context) { - final state = context.watch(); + final state = context.read(); final isColapsed = state.isColapsed || state.searching || state.filtering; final MediaQueryData d = MediaQuery.of(context); return AnimatedPositioned( @@ -47,7 +47,7 @@ class CategoriesRow2 extends StatelessWidget { @override Widget build(BuildContext context) { - final state = context.watch(); + final state = context.read(); final isColapsed = state.isColapsed || state.searching || state.filtering; final MediaQueryData d = MediaQuery.of(context); return AnimatedPositioned( diff --git a/lib/pages/home/radar/widgets/categories_list.dart b/lib/pages/home/radar/widgets/categories_list.dart index 83995b3..6546c61 100644 --- a/lib/pages/home/radar/widgets/categories_list.dart +++ b/lib/pages/home/radar/widgets/categories_list.dart @@ -37,7 +37,7 @@ class _CategoriesListState extends State { @override Widget build(BuildContext context) { final MediaQueryData d = MediaQuery.of(context); - final state = context.watch(); + final state = context.read(); final isColapsed = state.isColapsed || state.searching || state.filtering; return Positioned( top: 0, diff --git a/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart b/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart index 9b5fa6e..e250b17 100644 --- a/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart +++ b/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart @@ -54,11 +54,9 @@ class _FilteredBookmarksState extends State { emptyState: const EmptyList(), builder: (context, state, index) => RadarOverview( radar: state.filterdBookmarks[index], - onMarkChanged: (value) {}, - onCommentsChanged: (count) => state.onCommentsChanged( - state.filterdBookmarks[index].id, - count, - ), + onMarkChanged: (id, value) {}, + onCommentsChanged: (id, count) => + state.onCommentsChanged(id, count), ), childCount: state.filterdBookmarks.length, onRetry: state.getBookmarks, diff --git a/lib/pages/home/widgets/news_overview.dart b/lib/pages/home/widgets/news_overview.dart index 009f7fa..8454fd1 100644 --- a/lib/pages/home/widgets/news_overview.dart +++ b/lib/pages/home/widgets/news_overview.dart @@ -1,6 +1,5 @@ import 'package:didvan/models/news_overview.dart'; import 'package:didvan/models/requests/news.dart'; -import 'package:didvan/pages/home/news/news_state.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/date_time.dart'; import 'package:didvan/widgets/bookmark_button.dart'; @@ -9,30 +8,27 @@ import 'package:didvan/widgets/didvan/divider.dart'; import 'package:didvan/widgets/didvan/text.dart'; import 'package:didvan/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class NewsOverview extends StatelessWidget { final NewsOverviewData news; - final void Function(bool value) onMarkChanged; - const NewsOverview( - {Key? key, required this.news, required this.onMarkChanged}) - : super(key: key); + final NewsRequestArgs? newsRequestArgs; + final void Function(int id, bool value) onMarkChanged; + const NewsOverview({ + Key? key, + required this.news, + required this.onMarkChanged, + this.newsRequestArgs, + }) : super(key: key); @override Widget build(BuildContext context) { - final state = context.read(); return DidvanCard( onTap: () => Navigator.of(context).pushNamed( Routes.newsDetails, arguments: { - 'state': state, + 'onMarkChanged': onMarkChanged, 'id': news.id, - 'args': NewsRequestArgs( - page: state.page, - endDate: state.endDate, - search: state.search, - startDate: state.startDate, - ) + 'args': newsRequestArgs, }, ), child: Column( @@ -80,8 +76,7 @@ class NewsOverview extends StatelessWidget { ), BookmarkButton( value: news.marked, - onMarkChanged: onMarkChanged, - bigGestureSize: true, + onMarkChanged: (value) => onMarkChanged(news.id, value), ), ], ), diff --git a/lib/pages/home/widgets/radar_overview.dart b/lib/pages/home/widgets/radar_overview.dart index e246463..c9430ba 100644 --- a/lib/pages/home/widgets/radar_overview.dart +++ b/lib/pages/home/widgets/radar_overview.dart @@ -14,8 +14,8 @@ import 'package:flutter/material.dart'; class RadarOverview extends StatelessWidget { final RadarOverviewData radar; - final void Function(int count) onCommentsChanged; - final void Function(bool value) onMarkChanged; + final void Function(int id, int count) onCommentsChanged; + final void Function(int id, bool value) onMarkChanged; final RadarRequestArgs? radarRequestArgs; const RadarOverview({ Key? key, @@ -100,7 +100,7 @@ class RadarOverview extends StatelessWidget { children: [ BookmarkButton( value: radar.marked, - onMarkChanged: onMarkChanged, + onMarkChanged: (value) => onMarkChanged(radar.id, value), ), const Spacer(), if (radar.comments != 0) DidvanText(radar.comments.toString()), diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index 605e8de..3be9ea5 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -104,15 +104,13 @@ class UserProvider extends CoreProvier { final MapEntry? lastChange = _radarMarkQueue.lastWhereOrNull((item) => item.key == id); if (lastChange == null) return; + final service = RequestService(RequestHelper.markRadar(id)); if (lastChange.value) { - final service = RequestService(RequestHelper.markRadar(id)); - if (value) { - await service.post(); - } else { - await service.delete(); - } - _radarMarkQueue.removeWhere((element) => element.key == id); + await service.post(); + } else { + await service.delete(); } + _radarMarkQueue.removeWhere((element) => element.key == id); }); } @@ -122,15 +120,13 @@ class UserProvider extends CoreProvier { final MapEntry? lastChange = _newsMarkQueue.lastWhereOrNull((item) => item.key == id); if (lastChange == null) return; + final service = RequestService(RequestHelper.markNews(id)); if (lastChange.value) { - final service = RequestService(RequestHelper.markNews(id)); - if (value) { - await service.post(); - } else { - await service.delete(); - } - _newsMarkQueue.removeWhere((element) => element.key == id); + await service.post(); + } else { + await service.delete(); } + _newsMarkQueue.removeWhere((element) => element.key == id); }); } } diff --git a/lib/routes/route_generator.dart b/lib/routes/route_generator.dart index ca22e7e..85164f2 100644 --- a/lib/routes/route_generator.dart +++ b/lib/routes/route_generator.dart @@ -81,16 +81,8 @@ class RouteGenerator { ); case Routes.radarDetails: return _createRoute( - MultiProvider( - providers: [ - ChangeNotifierProvider( - create: (context) => RadarDetailsState(), - ), - if ((settings.arguments as Map)['state'] != null) - ChangeNotifierProvider.value( - value: (settings.arguments as Map)['state'], - ) - ], + ChangeNotifierProvider( + create: (context) => RadarDetailsState(), child: RadarDetails( pageData: settings.arguments as Map, ), @@ -98,15 +90,8 @@ class RouteGenerator { ); case Routes.newsDetails: return _createRoute( - MultiProvider( - providers: [ - ChangeNotifierProvider( - create: (context) => NewsDetailsState(), - ), - ChangeNotifierProvider.value( - value: (settings.arguments as Map)['state'], - ) - ], + ChangeNotifierProvider( + create: (context) => NewsDetailsState(), child: NewsDetails( pageData: settings.arguments as Map, ),