bookmark bug fixed

This commit is contained in:
MohammadTaha Basiri 2022-01-29 15:58:15 +03:30
parent c282921b2b
commit 8d84f0df47
10 changed files with 67 additions and 68 deletions

View File

@ -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<News> {
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,

View File

@ -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<Radar> {
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<Radar> {
),
],
),
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(),
],
),
);

View File

@ -59,9 +59,15 @@ class _RadarDetailsState extends State<RadarDetails> {
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,
);
},
),
),
],

View File

@ -9,7 +9,7 @@ class CategoriesRow1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
final state = context.watch<RadarState>();
final state = context.read<RadarState>();
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<RadarState>();
final state = context.read<RadarState>();
final isColapsed = state.isColapsed || state.searching || state.filtering;
final MediaQueryData d = MediaQuery.of(context);
return AnimatedPositioned(

View File

@ -37,7 +37,7 @@ class _CategoriesListState extends State<CategoriesList> {
@override
Widget build(BuildContext context) {
final MediaQueryData d = MediaQuery.of(context);
final state = context.watch<RadarState>();
final state = context.read<RadarState>();
final isColapsed = state.isColapsed || state.searching || state.filtering;
return Positioned(
top: 0,

View File

@ -54,11 +54,9 @@ class _FilteredBookmarksState extends State<FilteredBookmarks> {
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,

View File

@ -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<NewsState>();
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),
),
],
),

View File

@ -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()),

View File

@ -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);
});
}
}

View File

@ -81,16 +81,8 @@ class RouteGenerator {
);
case Routes.radarDetails:
return _createRoute(
MultiProvider(
providers: [
ChangeNotifierProvider<RadarDetailsState>(
create: (context) => RadarDetailsState(),
),
if ((settings.arguments as Map<String, dynamic>)['state'] != null)
ChangeNotifierProvider<RadarState>.value(
value: (settings.arguments as Map<String, dynamic>)['state'],
)
],
ChangeNotifierProvider<RadarDetailsState>(
create: (context) => RadarDetailsState(),
child: RadarDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
@ -98,15 +90,8 @@ class RouteGenerator {
);
case Routes.newsDetails:
return _createRoute(
MultiProvider(
providers: [
ChangeNotifierProvider<NewsDetailsState>(
create: (context) => NewsDetailsState(),
),
ChangeNotifierProvider<NewsState>.value(
value: (settings.arguments as Map<String, dynamic>)['state'],
)
],
ChangeNotifierProvider<NewsDetailsState>(
create: (context) => NewsDetailsState(),
child: NewsDetails(
pageData: settings.arguments as Map<String, dynamic>,
),