some changes
This commit is contained in:
parent
b5ee5887c6
commit
058ffbef0d
|
|
@ -15,6 +15,7 @@ class OverviewData {
|
||||||
final bool forManagers;
|
final bool forManagers;
|
||||||
final String createdAt;
|
final String createdAt;
|
||||||
final String type;
|
final String type;
|
||||||
|
int typeInteger;
|
||||||
int comments;
|
int comments;
|
||||||
bool marked;
|
bool marked;
|
||||||
final List<CategoryData>? categories;
|
final List<CategoryData>? categories;
|
||||||
|
|
@ -35,17 +36,41 @@ class OverviewData {
|
||||||
this.timeToRead,
|
this.timeToRead,
|
||||||
this.reference,
|
this.reference,
|
||||||
this.categories,
|
this.categories,
|
||||||
});
|
this.typeInteger = 0,
|
||||||
|
}) {
|
||||||
|
switch (type) {
|
||||||
|
case 'radar':
|
||||||
|
typeInteger = 1;
|
||||||
|
break;
|
||||||
|
case 'news':
|
||||||
|
typeInteger = 2;
|
||||||
|
break;
|
||||||
|
case 'video':
|
||||||
|
typeInteger = 3;
|
||||||
|
break;
|
||||||
|
case 'podcast':
|
||||||
|
typeInteger = 4;
|
||||||
|
break;
|
||||||
|
case 'saha':
|
||||||
|
typeInteger = 6;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
typeInteger = 5;
|
||||||
|
}
|
||||||
|
typeInteger = 2;
|
||||||
|
}
|
||||||
|
|
||||||
factory OverviewData.fromJson(Map<String, dynamic> json) {
|
factory OverviewData.fromJson(Map<String, dynamic> json) {
|
||||||
final document = parse(json['description']);
|
String? description;
|
||||||
final String parsedString =
|
if (json['description'] != null) {
|
||||||
parse(document.body!.text).documentElement!.text;
|
final document = parse(json['description']);
|
||||||
|
description = parse(document.body!.text).documentElement!.text;
|
||||||
|
}
|
||||||
return OverviewData(
|
return OverviewData(
|
||||||
id: json['id'],
|
id: json['id'],
|
||||||
title: json['title'],
|
title: json['title'],
|
||||||
image: json['image'],
|
image: json['image'] ?? 'https://wallpapercave.com/fwp/wp12977378.jpg',
|
||||||
description: parsedString,
|
description: description ?? '',
|
||||||
timeToRead: json['timeToRead'],
|
timeToRead: json['timeToRead'],
|
||||||
reference: json['reference'],
|
reference: json['reference'],
|
||||||
forManagers: json['forManagers'] ?? false,
|
forManagers: json['forManagers'] ?? false,
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,9 @@ class UserProvider extends CoreProvier {
|
||||||
|
|
||||||
int get unreadMessageCount => _unreadMessageCount;
|
int get unreadMessageCount => _unreadMessageCount;
|
||||||
|
|
||||||
static final List<MapEntry> _radarMarkQueue = [];
|
// static final List<MapEntry> _radarMarkQueue = [];
|
||||||
static final List<MapEntry> _newsMarkQueue = [];
|
// static final List<MapEntry> _newsMarkQueue = [];
|
||||||
static final List<MapEntry> _studioMarkQueue = [];
|
// static final List<MapEntry> _studioMarkQueue = [];
|
||||||
static final List<MapEntry> _statisticMarkQueue = [];
|
static final List<MapEntry> _statisticMarkQueue = [];
|
||||||
static final List<Map> _itemMarkQueue = [];
|
static final List<Map> _itemMarkQueue = [];
|
||||||
|
|
||||||
|
|
@ -188,53 +188,53 @@ class UserProvider extends CoreProvier {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> changeRadarMark(int id, bool value) async {
|
// static Future<void> changeRadarMark(int id, bool value) async {
|
||||||
_radarMarkQueue.add(MapEntry(id, value));
|
// _radarMarkQueue.add(MapEntry(id, value));
|
||||||
Future.delayed(const Duration(milliseconds: 500), () async {
|
// Future.delayed(const Duration(milliseconds: 500), () async {
|
||||||
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;
|
||||||
final service = RequestService(RequestHelper.mark(id, 'radar'));
|
// final service = RequestService(RequestHelper.mark(id, 'radar'));
|
||||||
if (lastChange.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);
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
static Future<void> changeStudioMark(int id, bool value) async {
|
// static Future<void> changeStudioMark(int id, bool value) async {
|
||||||
_studioMarkQueue.add(MapEntry(id, value));
|
// _studioMarkQueue.add(MapEntry(id, value));
|
||||||
Future.delayed(const Duration(milliseconds: 500), () async {
|
// Future.delayed(const Duration(milliseconds: 500), () async {
|
||||||
final MapEntry? lastChange =
|
// final MapEntry? lastChange =
|
||||||
_studioMarkQueue.lastWhereOrNull((item) => item.key == id);
|
// _studioMarkQueue.lastWhereOrNull((item) => item.key == id);
|
||||||
if (lastChange == null) return;
|
// if (lastChange == null) return;
|
||||||
final service = RequestService(RequestHelper.mark(id, 'studio'));
|
// final service = RequestService(RequestHelper.mark(id, 'studio'));
|
||||||
if (lastChange.value) {
|
// if (lastChange.value) {
|
||||||
await service.post();
|
// await service.post();
|
||||||
} else {
|
// } else {
|
||||||
await service.delete();
|
// await service.delete();
|
||||||
}
|
// }
|
||||||
_studioMarkQueue.removeWhere((element) => element.key == id);
|
// _studioMarkQueue.removeWhere((element) => element.key == id);
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
static Future<void> changeNewsMark(int id, bool value) async {
|
// static Future<void> changeNewsMark(int id, bool value) async {
|
||||||
_newsMarkQueue.add(MapEntry(id, value));
|
// _newsMarkQueue.add(MapEntry(id, value));
|
||||||
Future.delayed(const Duration(milliseconds: 500), () async {
|
// Future.delayed(const Duration(milliseconds: 500), () async {
|
||||||
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;
|
||||||
final service = RequestService(RequestHelper.mark(id, 'news'));
|
// final service = RequestService(RequestHelper.mark(id, 'news'));
|
||||||
if (lastChange.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);
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
static Future<void> changeStatisticMark(int id, bool value) async {
|
static Future<void> changeStatisticMark(int id, bool value) async {
|
||||||
_statisticMarkQueue.add(MapEntry(id, value));
|
_statisticMarkQueue.add(MapEntry(id, value));
|
||||||
|
|
@ -252,11 +252,11 @@ class UserProvider extends CoreProvier {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> getUnreadMessageCount() async {
|
// Future<void> getUnreadMessageCount() async {
|
||||||
final RequestService service = RequestService(RequestHelper.directs);
|
// final RequestService service = RequestService(RequestHelper.directs);
|
||||||
await service.httpGet();
|
// await service.httpGet();
|
||||||
if (service.isSuccess) {
|
// if (service.isSuccess) {
|
||||||
_unreadMessageCount = service.result['unread'] ?? 0;
|
// _unreadMessageCount = service.result['unread'] ?? 0;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,17 +51,6 @@ class RequestHelper {
|
||||||
static const String otp = '$_baseUserUrl/otp';
|
static const String otp = '$_baseUserUrl/otp';
|
||||||
static String editItemBookmark(String type, int id) =>
|
static String editItemBookmark(String type, int id) =>
|
||||||
'$_baseHomeUrl/$type/$id/mark';
|
'$_baseHomeUrl/$type/$id/mark';
|
||||||
static String bookmarks({
|
|
||||||
required int page,
|
|
||||||
String? search,
|
|
||||||
String? type,
|
|
||||||
String? studioType,
|
|
||||||
}) =>
|
|
||||||
'$_baseUserUrl/marked/${type ?? ''}${_urlConcatGenerator([
|
|
||||||
MapEntry('page', page),
|
|
||||||
MapEntry('type', studioType),
|
|
||||||
MapEntry('search', search),
|
|
||||||
])}';
|
|
||||||
|
|
||||||
static const String directTypes = '$baseUrl/direct/types';
|
static const String directTypes = '$baseUrl/direct/types';
|
||||||
static String direct(int id) => '$_baseDirectUrl/$id';
|
static String direct(int id) => '$_baseDirectUrl/$id';
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,10 @@ class BookmarksState extends CoreProvier {
|
||||||
}
|
}
|
||||||
this.page = page;
|
this.page = page;
|
||||||
appState = AppState.busy;
|
appState = AppState.busy;
|
||||||
final service =
|
final service = RequestService(
|
||||||
RequestService(RequestHelper.bookmarks(page: page, search: search));
|
RequestHelper.searchMarks(page: page, search: search),
|
||||||
|
);
|
||||||
await service.httpGet();
|
await service.httpGet();
|
||||||
|
|
||||||
if (service.isSuccess) {
|
if (service.isSuccess) {
|
||||||
lastPage = service.result['lastPage'];
|
lastPage = service.result['lastPage'];
|
||||||
final marks = service.result['contents'];
|
final marks = service.result['contents'];
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import 'package:didvan/views/widgets/overview/multitype.dart';
|
||||||
import 'package:didvan/views/widgets/animated_visibility.dart';
|
import 'package:didvan/views/widgets/animated_visibility.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/card.dart';
|
import 'package:didvan/views/widgets/didvan/card.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/divider.dart';
|
import 'package:didvan/views/widgets/didvan/divider.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
|
||||||
import 'package:didvan/views/widgets/item_title.dart';
|
import 'package:didvan/views/widgets/item_title.dart';
|
||||||
import 'package:didvan/views/widgets/state_handlers/empty_list.dart';
|
import 'package:didvan/views/widgets/state_handlers/empty_list.dart';
|
||||||
import 'package:didvan/views/widgets/state_handlers/empty_result.dart';
|
import 'package:didvan/views/widgets/state_handlers/empty_result.dart';
|
||||||
|
|
@ -40,111 +39,118 @@ class _BookmarksState extends State<Bookmarks> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = context.watch<BookmarksState>();
|
final state = context.watch<BookmarksState>();
|
||||||
return DidvanScaffold(
|
return CustomScrollView(
|
||||||
appBarData: null,
|
|
||||||
// appBarData: AppBarData(
|
|
||||||
// title: 'نشان شدهها',
|
|
||||||
// hasBack: true,
|
|
||||||
// ),
|
|
||||||
slivers: [
|
slivers: [
|
||||||
SliverStateHandler<BookmarksState>(
|
SliverPadding(
|
||||||
state: state,
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
centerEmptyState: state.searching,
|
sliver: SliverToBoxAdapter(
|
||||||
builder: (context, state, index) {
|
|
||||||
index++;
|
|
||||||
if (index % 15 == 0 && state.lastPage != state.page) {
|
|
||||||
state.getBookmarks(page: state.page + 1);
|
|
||||||
}
|
|
||||||
index--;
|
|
||||||
return MultitypeOverview(
|
|
||||||
item: state.bookmarks[index],
|
|
||||||
onMarkChanged: state.onMarkChanged,
|
|
||||||
hasUnmarkConfirmation: true,
|
|
||||||
enableCaption: true,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
placeholder: MultitypeOverview.placeholder,
|
|
||||||
itemPadding: const EdgeInsets.only(bottom: 8),
|
|
||||||
emptyState: state.searching
|
|
||||||
? EmptyResult(onNewSearch: _focuseNode.requestFocus)
|
|
||||||
: const EmptyList(),
|
|
||||||
enableEmptyState: state.bookmarks.isEmpty,
|
|
||||||
childCount:
|
|
||||||
state.bookmarks.length + (state.page != state.lastPage ? 1 : 0),
|
|
||||||
onRetry: () => state.getBookmarks(page: state.page),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
children: [
|
|
||||||
// SearchField(
|
|
||||||
// title: 'نشان شدهها',
|
|
||||||
// onChanged: _onChanged,
|
|
||||||
// focusNode: _focuseNode,
|
|
||||||
// ),
|
|
||||||
const SizedBox(height: 16),
|
|
||||||
AnimatedVisibility(
|
|
||||||
duration: DesignConfig.lowAnimationDuration,
|
|
||||||
isVisible: !state.searching,
|
|
||||||
child: DidvanCard(
|
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
MenuOption(
|
const SizedBox(height: 16),
|
||||||
onTap: () => _onCategorySelected('radar'),
|
AnimatedVisibility(
|
||||||
title: 'تحلیلهای رادار',
|
duration: DesignConfig.lowAnimationDuration,
|
||||||
icon: DidvanIcons.radar_solid,
|
isVisible: !state.searching,
|
||||||
iconSize: 24,
|
child: DidvanCard(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
MenuOption(
|
||||||
|
onTap: () => _onCategorySelected(5),
|
||||||
|
title: 'تحلیلهای رادار',
|
||||||
|
icon: DidvanIcons.radar_solid,
|
||||||
|
iconSize: 24,
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuOption(
|
||||||
|
onTap: () => _onCategorySelected(2),
|
||||||
|
title: 'دنیای فولاد',
|
||||||
|
icon: DidvanIcons.news_solid,
|
||||||
|
iconSize: 24,
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuOption(
|
||||||
|
onTap: () => _onCategorySelected(1),
|
||||||
|
title: 'پویش افق',
|
||||||
|
icon: DidvanIcons.radar_solid,
|
||||||
|
iconSize: 24,
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuOption(
|
||||||
|
onTap: () => _onCategorySelected(3),
|
||||||
|
title: 'ویدئوکست',
|
||||||
|
icon: DidvanIcons.video_solid,
|
||||||
|
iconSize: 24,
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuOption(
|
||||||
|
onTap: () => _onCategorySelected(4),
|
||||||
|
title: 'پادکستها',
|
||||||
|
icon: DidvanIcons.podcast_solid,
|
||||||
|
iconSize: 24,
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuOption(
|
||||||
|
onTap: () => _onCategorySelected(6),
|
||||||
|
title: 'سها',
|
||||||
|
icon: DidvanIcons.podcast_solid,
|
||||||
|
iconSize: 24,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const DidvanDivider(),
|
Align(
|
||||||
MenuOption(
|
alignment: Alignment.centerRight,
|
||||||
onTap: () => _onCategorySelected('news'),
|
child: AnimatedVisibility(
|
||||||
title: 'دنیای فولاد',
|
duration: DesignConfig.lowAnimationDuration,
|
||||||
icon: DidvanIcons.news_solid,
|
isVisible: !state.searching,
|
||||||
iconSize: 24,
|
child: const ItemTitle(title: 'آخرین نشان شدهها'),
|
||||||
),
|
),
|
||||||
const DidvanDivider(),
|
|
||||||
MenuOption(
|
|
||||||
onTap: () => _onCategorySelected('radar'),
|
|
||||||
title: 'پویش افق',
|
|
||||||
icon: DidvanIcons.radar_solid,
|
|
||||||
iconSize: 24,
|
|
||||||
),
|
|
||||||
const DidvanDivider(),
|
|
||||||
MenuOption(
|
|
||||||
onTap: () => _onCategorySelected('video'),
|
|
||||||
title: 'ویدئوکست',
|
|
||||||
icon: DidvanIcons.video_solid,
|
|
||||||
iconSize: 24,
|
|
||||||
),
|
|
||||||
const DidvanDivider(),
|
|
||||||
MenuOption(
|
|
||||||
onTap: () => _onCategorySelected('podcast'),
|
|
||||||
title: 'پادکستها',
|
|
||||||
icon: DidvanIcons.podcast_solid,
|
|
||||||
iconSize: 24,
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Align(
|
SliverPadding(
|
||||||
alignment: Alignment.centerRight,
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: AnimatedVisibility(
|
sliver: SliverStateHandler<BookmarksState>(
|
||||||
duration: DesignConfig.lowAnimationDuration,
|
state: state,
|
||||||
isVisible: !state.searching,
|
centerEmptyState: state.searching,
|
||||||
child: const ItemTitle(title: 'آخرین نشان شدهها'),
|
builder: (context, state, index) {
|
||||||
|
index++;
|
||||||
|
if (index % 15 == 0 && state.lastPage != state.page) {
|
||||||
|
state.getBookmarks(page: state.page + 1);
|
||||||
|
}
|
||||||
|
index--;
|
||||||
|
return MultitypeOverview(
|
||||||
|
item: state.bookmarks[index],
|
||||||
|
onMarkChanged: state.onMarkChanged,
|
||||||
|
hasUnmarkConfirmation: true,
|
||||||
|
enableCaption: true,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
placeholder: MultitypeOverview.placeholder,
|
||||||
|
itemPadding: const EdgeInsets.only(bottom: 8),
|
||||||
|
emptyState: state.searching
|
||||||
|
? EmptyResult(onNewSearch: _focuseNode.requestFocus)
|
||||||
|
: const EmptyList(),
|
||||||
|
enableEmptyState: state.bookmarks.isEmpty,
|
||||||
|
childCount:
|
||||||
|
state.bookmarks.length + (state.page != state.lastPage ? 1 : 0),
|
||||||
|
onRetry: () => state.getBookmarks(page: state.page),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onCategorySelected(String type) {
|
void _onCategorySelected(int type) {
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
Navigator.of(context).pushNamed(Routes.filteredBookmarks, arguments: {
|
Navigator.of(context).pushNamed(Routes.filteredBookmarks, arguments: {
|
||||||
'type': type,
|
'type': type,
|
||||||
'onDeleted': (int id) {
|
'onDeleted': (int id) {
|
||||||
final state = context.read<BookmarksState>();
|
final state = context.read<BookmarksState>();
|
||||||
state.bookmarks
|
state.bookmarks.removeWhere(
|
||||||
.removeWhere((element) => element.id == id && element.type == type);
|
(element) => element.id == id && element.typeInteger == type);
|
||||||
state.update();
|
state.update();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -28,18 +28,20 @@ class _FilteredBookmarksState extends State<FilteredBookmarks> {
|
||||||
|
|
||||||
String get _appBarTitle {
|
String get _appBarTitle {
|
||||||
switch (context.read<FilteredBookmarksState>().type) {
|
switch (context.read<FilteredBookmarksState>().type) {
|
||||||
case 'radar':
|
case 1:
|
||||||
return 'پویش افق';
|
return 'پویش افق';
|
||||||
case 'news':
|
case 2:
|
||||||
return 'دنیای فولاد';
|
return 'دنیای فولاد';
|
||||||
case 'video':
|
case 3:
|
||||||
return 'ویدئوکستها';
|
return 'ویدئوکستها';
|
||||||
case 'podcast':
|
case 4:
|
||||||
return 'پادکستها';
|
return 'پادکستها';
|
||||||
case 'new-radar':
|
case 5:
|
||||||
return 'تحلیلهای رادار';
|
return 'تحلیلهای رادار';
|
||||||
|
case 6:
|
||||||
|
return 'سها';
|
||||||
default:
|
default:
|
||||||
return 'پادکستها';
|
return 'پویش';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import 'package:didvan/services/network/request_helper.dart';
|
||||||
|
|
||||||
class FilteredBookmarksState extends CoreProvier {
|
class FilteredBookmarksState extends CoreProvier {
|
||||||
final List<OverviewData> bookmarks = [];
|
final List<OverviewData> bookmarks = [];
|
||||||
final String type;
|
final int type;
|
||||||
int page = 1;
|
int page = 1;
|
||||||
int lastPage = 1;
|
int lastPage = 1;
|
||||||
|
|
||||||
|
|
@ -14,26 +14,17 @@ class FilteredBookmarksState extends CoreProvier {
|
||||||
|
|
||||||
Future<void> getBookmarks({required int page}) async {
|
Future<void> getBookmarks({required int page}) async {
|
||||||
this.page = page;
|
this.page = page;
|
||||||
String typeString = '';
|
|
||||||
if (type == 'video' || type == 'podcast') {
|
|
||||||
typeString = 'studios';
|
|
||||||
} else if (type == 'news') {
|
|
||||||
typeString = type;
|
|
||||||
} else {
|
|
||||||
typeString = '${type}s';
|
|
||||||
}
|
|
||||||
final service = RequestService(
|
final service = RequestService(
|
||||||
RequestHelper.bookmarks(
|
RequestHelper.searchMarks(
|
||||||
type: typeString,
|
types: [type],
|
||||||
page: page,
|
page: page,
|
||||||
studioType: type == 'podcast' || type == 'video' ? type : null,
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
await service.httpGet();
|
await service.httpGet();
|
||||||
|
|
||||||
if (service.isSuccess) {
|
if (service.isSuccess) {
|
||||||
lastPage = service.result['lastPage'];
|
lastPage = service.result['lastPage'];
|
||||||
final marks = service.result[typeString];
|
final marks = service.result['contents'];
|
||||||
for (var i = 0; i < marks.length; i++) {
|
for (var i = 0; i < marks.length; i++) {
|
||||||
bookmarks.add(OverviewData.fromJson(marks[i]));
|
bookmarks.add(OverviewData.fromJson(marks[i]));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ class HomeState extends CoreProvier {
|
||||||
final List<CategoryData> selectedCats = [];
|
final List<CategoryData> selectedCats = [];
|
||||||
final List<OverviewData> results = [];
|
final List<OverviewData> results = [];
|
||||||
late TabController tabController;
|
late TabController tabController;
|
||||||
|
int unreadCount = 0;
|
||||||
|
|
||||||
void resetFilters(bool isInit) {
|
void resetFilters(bool isInit) {
|
||||||
startDate = null;
|
startDate = null;
|
||||||
|
|
@ -122,6 +123,7 @@ class HomeState extends CoreProvier {
|
||||||
await service.httpGet();
|
await service.httpGet();
|
||||||
if (service.isSuccess) {
|
if (service.isSuccess) {
|
||||||
lastPage = service.result['lastPage'];
|
lastPage = service.result['lastPage'];
|
||||||
|
unreadCount = service.result['unread'];
|
||||||
results.addAll(
|
results.addAll(
|
||||||
List<OverviewData>.from(
|
List<OverviewData>.from(
|
||||||
service.result['contents'].map(
|
service.result['contents'].map(
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,6 @@ class _SplashState extends State<Splash> {
|
||||||
}
|
}
|
||||||
RequestService.token = token;
|
RequestService.token = token;
|
||||||
final result = await userProvider.getUserInfo();
|
final result = await userProvider.getUserInfo();
|
||||||
await userProvider.getUnreadMessageCount();
|
|
||||||
if (!result && mounted) {
|
if (!result && mounted) {
|
||||||
StorageService.delete(key: 'token');
|
StorageService.delete(key: 'token');
|
||||||
Navigator.of(context).pushNamedAndRemoveUntil(
|
Navigator.of(context).pushNamedAndRemoveUntil(
|
||||||
|
|
|
||||||
|
|
@ -74,21 +74,7 @@ class _BookmarkButtonState extends State<BookmarkButton> {
|
||||||
_value = !_value;
|
_value = !_value;
|
||||||
});
|
});
|
||||||
widget.onMarkChanged(_value);
|
widget.onMarkChanged(_value);
|
||||||
switch (widget.type) {
|
UserProvider.changeItemMark(widget.type, widget.itemId, _value);
|
||||||
case 'radar':
|
|
||||||
UserProvider.changeRadarMark(widget.itemId, _value);
|
|
||||||
break;
|
|
||||||
case 'news':
|
|
||||||
UserProvider.changeNewsMark(widget.itemId, _value);
|
|
||||||
break;
|
|
||||||
case 'podcast':
|
|
||||||
UserProvider.changeStudioMark(widget.itemId, _value);
|
|
||||||
break;
|
|
||||||
case 'video':
|
|
||||||
UserProvider.changeStudioMark(widget.itemId, _value);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -368,7 +368,6 @@ class _NavBarItem extends StatelessWidget {
|
||||||
final String title;
|
final String title;
|
||||||
final IconData selectedIcon;
|
final IconData selectedIcon;
|
||||||
final IconData unselectedIcon;
|
final IconData unselectedIcon;
|
||||||
final bool hasBadge;
|
|
||||||
const _NavBarItem({
|
const _NavBarItem({
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.isSelected,
|
required this.isSelected,
|
||||||
|
|
@ -376,7 +375,6 @@ class _NavBarItem extends StatelessWidget {
|
||||||
required this.selectedIcon,
|
required this.selectedIcon,
|
||||||
required this.unselectedIcon,
|
required this.unselectedIcon,
|
||||||
required this.onTap,
|
required this.onTap,
|
||||||
this.hasBadge = false,
|
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -407,25 +405,12 @@ class _NavBarItem extends StatelessWidget {
|
||||||
? Theme.of(context).colorScheme.focused
|
? Theme.of(context).colorScheme.focused
|
||||||
: Theme.of(context).colorScheme.surface,
|
: Theme.of(context).colorScheme.surface,
|
||||||
),
|
),
|
||||||
child: Stack(
|
child: Icon(
|
||||||
children: [
|
isSelected ? selectedIcon : unselectedIcon,
|
||||||
Icon(
|
size: 32,
|
||||||
isSelected ? selectedIcon : unselectedIcon,
|
color: DesignConfig.isDark
|
||||||
size: 32,
|
? Theme.of(context).colorScheme.text
|
||||||
color: DesignConfig.isDark
|
: Theme.of(context).colorScheme.title,
|
||||||
? Theme.of(context).colorScheme.text
|
|
||||||
: Theme.of(context).colorScheme.title,
|
|
||||||
),
|
|
||||||
if (hasBadge)
|
|
||||||
Container(
|
|
||||||
height: 12,
|
|
||||||
width: 12,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
color: Theme.of(context).colorScheme.secondary,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
DidvanText(
|
DidvanText(
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ class LogoAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final state = context.read<HomeState>();
|
||||||
final MediaQueryData d = MediaQuery.of(context);
|
final MediaQueryData d = MediaQuery.of(context);
|
||||||
return Container(
|
return Container(
|
||||||
height: 144,
|
height: 144,
|
||||||
|
|
@ -63,10 +64,30 @@ class LogoAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
width: 1,
|
width: 1,
|
||||||
color: Theme.of(context).colorScheme.border,
|
color: Theme.of(context).colorScheme.border,
|
||||||
),
|
),
|
||||||
DidvanIconButton(
|
Stack(
|
||||||
icon: DidvanIcons.notification_light,
|
children: [
|
||||||
size: 32,
|
DidvanIconButton(
|
||||||
onPressed: () => {},
|
icon: state.unreadCount == 0
|
||||||
|
? DidvanIcons.message_light
|
||||||
|
: DidvanIcons.message_solid,
|
||||||
|
size: 32,
|
||||||
|
onPressed: () =>
|
||||||
|
Navigator.of(context).pushNamed(Routes.direct),
|
||||||
|
),
|
||||||
|
if (state.unreadCount != 0)
|
||||||
|
Positioned(
|
||||||
|
top: 8,
|
||||||
|
right: 4,
|
||||||
|
child: Container(
|
||||||
|
height: 12,
|
||||||
|
width: 12,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
color: Theme.of(context).colorScheme.secondary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue