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/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,
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
|
|
|
|||
|
|
@ -104,15 +104,13 @@ class UserProvider extends CoreProvier {
|
|||
final MapEntry? lastChange =
|
||||
_radarMarkQueue.lastWhereOrNull((item) => item.key == id);
|
||||
if (lastChange == null) return;
|
||||
if (lastChange.value) {
|
||||
final service = RequestService(RequestHelper.markRadar(id));
|
||||
if (value) {
|
||||
if (lastChange.value) {
|
||||
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;
|
||||
if (lastChange.value) {
|
||||
final service = RequestService(RequestHelper.markNews(id));
|
||||
if (value) {
|
||||
if (lastChange.value) {
|
||||
await service.post();
|
||||
} else {
|
||||
await service.delete();
|
||||
}
|
||||
_newsMarkQueue.removeWhere((element) => element.key == id);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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'],
|
||||
)
|
||||
],
|
||||
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'],
|
||||
)
|
||||
],
|
||||
child: NewsDetails(
|
||||
pageData: settings.arguments as Map<String, dynamic>,
|
||||
),
|
||||
|
|
|
|||
Loading…
Reference in New Issue