bookmark bug fixed
This commit is contained in:
parent
c282921b2b
commit
8d84f0df47
|
|
@ -2,6 +2,7 @@ import 'dart:async';
|
||||||
|
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/enums.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/models/view/action_sheet_data.dart';
|
||||||
import 'package:didvan/pages/home/news/news_state.dart';
|
import 'package:didvan/pages/home/news/news_state.dart';
|
||||||
import 'package:didvan/pages/home/widgets/news_overview.dart';
|
import 'package:didvan/pages/home/widgets/news_overview.dart';
|
||||||
|
|
@ -60,7 +61,13 @@ class _NewsState extends State<News> {
|
||||||
final news = state.news[index];
|
final news = state.news[index];
|
||||||
return NewsOverview(
|
return NewsOverview(
|
||||||
news: news,
|
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,
|
enableEmptyState: state.news.isEmpty,
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
// ignore_for_file: prefer_const_constructors
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
|
|
@ -5,6 +7,7 @@ import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/enums.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/models/view/action_sheet_data.dart';
|
||||||
import 'package:didvan/pages/home/radar/radar_state.dart';
|
import 'package:didvan/pages/home/radar/radar_state.dart';
|
||||||
import 'package:didvan/pages/home/radar/widgets/categories_gird.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];
|
final radar = state.radars[index];
|
||||||
return RadarOverview(
|
return RadarOverview(
|
||||||
radar: radar,
|
radar: radar,
|
||||||
onMarkChanged: (value) => state.changeMark(radar.id, value),
|
onMarkChanged: (id, value) => state.changeMark(id, value),
|
||||||
onCommentsChanged: (count) =>
|
onCommentsChanged: (id, count) =>
|
||||||
state.onCommentsChanged(radar.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,
|
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) CategoriesRow1(),
|
||||||
if (state.appState != AppState.failed) const CategoriesRow2(),
|
if (state.appState != AppState.failed) CategoriesRow2(),
|
||||||
if (state.appState != AppState.failed) const CategoriesList(),
|
if (state.appState != AppState.failed) CategoriesList(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -59,9 +59,15 @@ class _RadarDetailsState extends State<RadarDetails> {
|
||||||
state.currentRadar.id,
|
state.currentRadar.id,
|
||||||
value,
|
value,
|
||||||
),
|
),
|
||||||
onCommentsChanged: state.onCommentsChanged,
|
|
||||||
categories: state.currentRadar.categories,
|
categories: state.currentRadar.categories,
|
||||||
scrollController: _scrollController,
|
scrollController: _scrollController,
|
||||||
|
onCommentsChanged: (count) {
|
||||||
|
state.onCommentsChanged(count);
|
||||||
|
widget.pageData['onCommentsChanged'](
|
||||||
|
state.currentRadar.id,
|
||||||
|
count,
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class CategoriesRow1 extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = context.watch<RadarState>();
|
final state = context.read<RadarState>();
|
||||||
final isColapsed = state.isColapsed || state.searching || state.filtering;
|
final isColapsed = state.isColapsed || state.searching || state.filtering;
|
||||||
final MediaQueryData d = MediaQuery.of(context);
|
final MediaQueryData d = MediaQuery.of(context);
|
||||||
return AnimatedPositioned(
|
return AnimatedPositioned(
|
||||||
|
|
@ -47,7 +47,7 @@ class CategoriesRow2 extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = context.watch<RadarState>();
|
final state = context.read<RadarState>();
|
||||||
final isColapsed = state.isColapsed || state.searching || state.filtering;
|
final isColapsed = state.isColapsed || state.searching || state.filtering;
|
||||||
final MediaQueryData d = MediaQuery.of(context);
|
final MediaQueryData d = MediaQuery.of(context);
|
||||||
return AnimatedPositioned(
|
return AnimatedPositioned(
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ class _CategoriesListState extends State<CategoriesList> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final MediaQueryData d = MediaQuery.of(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;
|
final isColapsed = state.isColapsed || state.searching || state.filtering;
|
||||||
return Positioned(
|
return Positioned(
|
||||||
top: 0,
|
top: 0,
|
||||||
|
|
|
||||||
|
|
@ -54,11 +54,9 @@ class _FilteredBookmarksState extends State<FilteredBookmarks> {
|
||||||
emptyState: const EmptyList(),
|
emptyState: const EmptyList(),
|
||||||
builder: (context, state, index) => RadarOverview(
|
builder: (context, state, index) => RadarOverview(
|
||||||
radar: state.filterdBookmarks[index],
|
radar: state.filterdBookmarks[index],
|
||||||
onMarkChanged: (value) {},
|
onMarkChanged: (id, value) {},
|
||||||
onCommentsChanged: (count) => state.onCommentsChanged(
|
onCommentsChanged: (id, count) =>
|
||||||
state.filterdBookmarks[index].id,
|
state.onCommentsChanged(id, count),
|
||||||
count,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
childCount: state.filterdBookmarks.length,
|
childCount: state.filterdBookmarks.length,
|
||||||
onRetry: state.getBookmarks,
|
onRetry: state.getBookmarks,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import 'package:didvan/models/news_overview.dart';
|
import 'package:didvan/models/news_overview.dart';
|
||||||
import 'package:didvan/models/requests/news.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/routes/routes.dart';
|
||||||
import 'package:didvan/utils/date_time.dart';
|
import 'package:didvan/utils/date_time.dart';
|
||||||
import 'package:didvan/widgets/bookmark_button.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/didvan/text.dart';
|
||||||
import 'package:didvan/widgets/skeleton_image.dart';
|
import 'package:didvan/widgets/skeleton_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
|
|
||||||
class NewsOverview extends StatelessWidget {
|
class NewsOverview extends StatelessWidget {
|
||||||
final NewsOverviewData news;
|
final NewsOverviewData news;
|
||||||
final void Function(bool value) onMarkChanged;
|
final NewsRequestArgs? newsRequestArgs;
|
||||||
const NewsOverview(
|
final void Function(int id, bool value) onMarkChanged;
|
||||||
{Key? key, required this.news, required this.onMarkChanged})
|
const NewsOverview({
|
||||||
: super(key: key);
|
Key? key,
|
||||||
|
required this.news,
|
||||||
|
required this.onMarkChanged,
|
||||||
|
this.newsRequestArgs,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = context.read<NewsState>();
|
|
||||||
return DidvanCard(
|
return DidvanCard(
|
||||||
onTap: () => Navigator.of(context).pushNamed(
|
onTap: () => Navigator.of(context).pushNamed(
|
||||||
Routes.newsDetails,
|
Routes.newsDetails,
|
||||||
arguments: {
|
arguments: {
|
||||||
'state': state,
|
'onMarkChanged': onMarkChanged,
|
||||||
'id': news.id,
|
'id': news.id,
|
||||||
'args': NewsRequestArgs(
|
'args': newsRequestArgs,
|
||||||
page: state.page,
|
|
||||||
endDate: state.endDate,
|
|
||||||
search: state.search,
|
|
||||||
startDate: state.startDate,
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
|
|
@ -80,8 +76,7 @@ class NewsOverview extends StatelessWidget {
|
||||||
),
|
),
|
||||||
BookmarkButton(
|
BookmarkButton(
|
||||||
value: news.marked,
|
value: news.marked,
|
||||||
onMarkChanged: onMarkChanged,
|
onMarkChanged: (value) => onMarkChanged(news.id, value),
|
||||||
bigGestureSize: true,
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class RadarOverview extends StatelessWidget {
|
class RadarOverview extends StatelessWidget {
|
||||||
final RadarOverviewData radar;
|
final RadarOverviewData radar;
|
||||||
final void Function(int count) onCommentsChanged;
|
final void Function(int id, int count) onCommentsChanged;
|
||||||
final void Function(bool value) onMarkChanged;
|
final void Function(int id, bool value) onMarkChanged;
|
||||||
final RadarRequestArgs? radarRequestArgs;
|
final RadarRequestArgs? radarRequestArgs;
|
||||||
const RadarOverview({
|
const RadarOverview({
|
||||||
Key? key,
|
Key? key,
|
||||||
|
|
@ -100,7 +100,7 @@ class RadarOverview extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
BookmarkButton(
|
BookmarkButton(
|
||||||
value: radar.marked,
|
value: radar.marked,
|
||||||
onMarkChanged: onMarkChanged,
|
onMarkChanged: (value) => onMarkChanged(radar.id, value),
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
if (radar.comments != 0) DidvanText(radar.comments.toString()),
|
if (radar.comments != 0) DidvanText(radar.comments.toString()),
|
||||||
|
|
|
||||||
|
|
@ -104,15 +104,13 @@ class UserProvider extends CoreProvier {
|
||||||
final MapEntry? lastChange =
|
final MapEntry? lastChange =
|
||||||
_radarMarkQueue.lastWhereOrNull((item) => item.key == id);
|
_radarMarkQueue.lastWhereOrNull((item) => item.key == id);
|
||||||
if (lastChange == null) return;
|
if (lastChange == null) return;
|
||||||
if (lastChange.value) {
|
|
||||||
final service = RequestService(RequestHelper.markRadar(id));
|
final service = RequestService(RequestHelper.markRadar(id));
|
||||||
if (value) {
|
if (lastChange.value) {
|
||||||
await service.post();
|
await service.post();
|
||||||
} else {
|
} else {
|
||||||
await service.delete();
|
await service.delete();
|
||||||
}
|
}
|
||||||
_radarMarkQueue.removeWhere((element) => element.key == id);
|
_radarMarkQueue.removeWhere((element) => element.key == id);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,15 +120,13 @@ class UserProvider extends CoreProvier {
|
||||||
final MapEntry? lastChange =
|
final MapEntry? lastChange =
|
||||||
_newsMarkQueue.lastWhereOrNull((item) => item.key == id);
|
_newsMarkQueue.lastWhereOrNull((item) => item.key == id);
|
||||||
if (lastChange == null) return;
|
if (lastChange == null) return;
|
||||||
if (lastChange.value) {
|
|
||||||
final service = RequestService(RequestHelper.markNews(id));
|
final service = RequestService(RequestHelper.markNews(id));
|
||||||
if (value) {
|
if (lastChange.value) {
|
||||||
await service.post();
|
await service.post();
|
||||||
} else {
|
} else {
|
||||||
await service.delete();
|
await service.delete();
|
||||||
}
|
}
|
||||||
_newsMarkQueue.removeWhere((element) => element.key == id);
|
_newsMarkQueue.removeWhere((element) => element.key == id);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -81,16 +81,8 @@ class RouteGenerator {
|
||||||
);
|
);
|
||||||
case Routes.radarDetails:
|
case Routes.radarDetails:
|
||||||
return _createRoute(
|
return _createRoute(
|
||||||
MultiProvider(
|
|
||||||
providers: [
|
|
||||||
ChangeNotifierProvider<RadarDetailsState>(
|
ChangeNotifierProvider<RadarDetailsState>(
|
||||||
create: (context) => RadarDetailsState(),
|
create: (context) => RadarDetailsState(),
|
||||||
),
|
|
||||||
if ((settings.arguments as Map<String, dynamic>)['state'] != null)
|
|
||||||
ChangeNotifierProvider<RadarState>.value(
|
|
||||||
value: (settings.arguments as Map<String, dynamic>)['state'],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
child: RadarDetails(
|
child: RadarDetails(
|
||||||
pageData: settings.arguments as Map<String, dynamic>,
|
pageData: settings.arguments as Map<String, dynamic>,
|
||||||
),
|
),
|
||||||
|
|
@ -98,15 +90,8 @@ class RouteGenerator {
|
||||||
);
|
);
|
||||||
case Routes.newsDetails:
|
case Routes.newsDetails:
|
||||||
return _createRoute(
|
return _createRoute(
|
||||||
MultiProvider(
|
|
||||||
providers: [
|
|
||||||
ChangeNotifierProvider<NewsDetailsState>(
|
ChangeNotifierProvider<NewsDetailsState>(
|
||||||
create: (context) => NewsDetailsState(),
|
create: (context) => NewsDetailsState(),
|
||||||
),
|
|
||||||
ChangeNotifierProvider<NewsState>.value(
|
|
||||||
value: (settings.arguments as Map<String, dynamic>)['state'],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
child: NewsDetails(
|
child: NewsDetails(
|
||||||
pageData: settings.arguments as Map<String, dynamic>,
|
pageData: settings.arguments as Map<String, dynamic>,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue