From f68b7973e6578eda20c0aad9df748940c843a1ab Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Sat, 26 Feb 2022 02:05:44 +0330 Subject: [PATCH] D1APP-104 new models updates for bookmarks -_-+-- --- lib/models/item_overview.dart | 26 -------- lib/models/news_details_data.dart | 2 +- lib/models/news_overview.dart | 34 ----------- lib/models/overview_data.dart | 61 +++++++++++++++++++ lib/models/radar_details_data.dart | 2 +- lib/models/radar_overview.dart | 49 --------------- lib/pages/home/hashtag/hashtag.dart | 21 +++++++ lib/pages/home/hashtag/hashtag_state.dart | 20 ++++++ .../news/news_details/news_details_state.dart | 2 +- lib/pages/home/news/news_state.dart | 6 +- .../radar_details/radar_details_state.dart | 6 +- lib/pages/home/radar/radar_state.dart | 6 +- .../settings/bookmarks/bookmark_state.dart | 4 +- .../home/settings/bookmarks/bookmarks.dart | 4 +- .../filtered_bookmark/filtered_bookmark.dart | 14 ++--- .../filtered_bookmarks_state.dart | 16 ++--- .../home/widgets/multitype_overview.dart | 2 +- lib/pages/home/widgets/news_overview.dart | 6 +- lib/pages/home/widgets/radar_overview.dart | 6 +- lib/services/network/request_helper.dart | 8 ++- 20 files changed, 141 insertions(+), 154 deletions(-) delete mode 100644 lib/models/item_overview.dart delete mode 100644 lib/models/news_overview.dart create mode 100644 lib/models/overview_data.dart delete mode 100644 lib/models/radar_overview.dart create mode 100644 lib/pages/home/hashtag/hashtag.dart create mode 100644 lib/pages/home/hashtag/hashtag_state.dart diff --git a/lib/models/item_overview.dart b/lib/models/item_overview.dart deleted file mode 100644 index 921d7db..0000000 --- a/lib/models/item_overview.dart +++ /dev/null @@ -1,26 +0,0 @@ -class OverviewData { - final int id; - final String title; - final String image; - final String description; - final String createdAt; - final String? type; - - const OverviewData({ - required this.id, - required this.title, - required this.image, - required this.description, - required this.createdAt, - required this.type, - }); - - factory OverviewData.fromJson(Map json) => OverviewData( - id: json['id'], - title: json['title'], - image: json['image'], - description: json['description'], - createdAt: json['createdAt'], - type: json['type'], - ); -} diff --git a/lib/models/news_details_data.dart b/lib/models/news_details_data.dart index 75430e6..0a1a68b 100644 --- a/lib/models/news_details_data.dart +++ b/lib/models/news_details_data.dart @@ -1,5 +1,5 @@ import 'package:didvan/models/content.dart'; -import 'package:didvan/models/item_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/tag.dart'; class NewsDetailsData { diff --git a/lib/models/news_overview.dart b/lib/models/news_overview.dart deleted file mode 100644 index 35d2161..0000000 --- a/lib/models/news_overview.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:didvan/models/item_overview.dart'; - -class NewsOverviewData extends OverviewData { - final String reference; - bool marked; - - NewsOverviewData({ - required this.reference, - required this.marked, - required id, - required createdAt, - required description, - required title, - required image, - }) : super( - createdAt: createdAt, - description: description, - id: id, - image: image, - title: title, - type: 'news', - ); - - factory NewsOverviewData.fromJson(Map json) => - NewsOverviewData( - id: json['id'], - title: json['title'], - reference: json['reference'], - description: json['description'], - image: json['image'], - createdAt: json['createdAt'], - marked: json['marked'] ?? true, - ); -} diff --git a/lib/models/overview_data.dart b/lib/models/overview_data.dart new file mode 100644 index 0000000..4d16449 --- /dev/null +++ b/lib/models/overview_data.dart @@ -0,0 +1,61 @@ +import 'package:didvan/models/category.dart'; + +class OverviewData { + final int id; + final String title; + final String image; + final String description; + final int? timeToRead; + final String? reference; + final bool forManagers; + final String createdAt; + final String type; + int comments; + bool marked; + final List? categories; + + OverviewData({ + required this.id, + required this.title, + required this.image, + required this.description, + required this.createdAt, + required this.type, + required this.marked, + required this.comments, + required this.forManagers, + this.timeToRead, + this.reference, + this.categories, + }); + + factory OverviewData.fromJson(Map json) => OverviewData( + id: json['id'], + title: json['title'], + image: json['image'], + description: json['description'], + timeToRead: json['timeToRead'], + reference: json['reference'], + forManagers: json['forManagers'] ?? false, + comments: json['comments'] ?? 0, + createdAt: json['createdAt'], + type: json['type'] ?? '', + marked: json['marked'] ?? false, + categories: (json['categories'] as List?) + ?.map((e) => CategoryData.fromJson(e as Map)) + .toList(), + ); + + Map toJson() => { + 'id': id, + 'title': title, + 'image': image, + 'description': description, + 'timeToRead': timeToRead, + 'reference': reference, + 'forManagers': forManagers, + 'createdAt': createdAt, + 'type': type, + 'categories': categories?.map((e) => e.toJson()).toList(), + }; +} diff --git a/lib/models/radar_details_data.dart b/lib/models/radar_details_data.dart index d075e09..a41bb1e 100644 --- a/lib/models/radar_details_data.dart +++ b/lib/models/radar_details_data.dart @@ -1,5 +1,5 @@ import 'package:didvan/models/category.dart'; -import 'package:didvan/models/item_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'content.dart'; import 'tag.dart'; diff --git a/lib/models/radar_overview.dart b/lib/models/radar_overview.dart deleted file mode 100644 index db1cb54..0000000 --- a/lib/models/radar_overview.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:didvan/models/item_overview.dart'; - -import 'category.dart'; - -class RadarOverviewData extends OverviewData { - final bool forManagers; - final List categories; - final int timeToRead; - int comments; - bool marked; - - RadarOverviewData({ - required this.forManagers, - required this.categories, - required this.comments, - required this.timeToRead, - required this.marked, - required createdAt, - required description, - required id, - required image, - required title, - }) : super( - createdAt: createdAt, - description: description, - id: id, - image: image, - title: title, - type: 'radar', - ); - - factory RadarOverviewData.fromJson(Map json) => - RadarOverviewData( - id: json['id'], - image: json['image'], - title: json['title'], - description: json['description'], - timeToRead: json['timeToRead'], - createdAt: json['createdAt'], - forManagers: json['forManagers'], - marked: json['marked'], - comments: json['comments'], - categories: List.from( - json['categories'].map( - (category) => CategoryData.fromJson(category), - ), - ), - ); -} diff --git a/lib/pages/home/hashtag/hashtag.dart b/lib/pages/home/hashtag/hashtag.dart new file mode 100644 index 0000000..acd93a2 --- /dev/null +++ b/lib/pages/home/hashtag/hashtag.dart @@ -0,0 +1,21 @@ +import 'package:didvan/models/tag.dart'; +import 'package:didvan/models/view/app_bar_data.dart'; +import 'package:didvan/widgets/didvan/scaffold.dart'; +import 'package:flutter/material.dart'; + +class Hashtag extends StatefulWidget { + final Tag tag; + const Hashtag({Key? key, required this.tag}) : super(key: key); + + @override + _HashtagState createState() => _HashtagState(); +} + +class _HashtagState extends State { + @override + Widget build(BuildContext context) { + return DidvanScaffold( + appBarData: AppBarData(title: widget.tag.label, hasBack: true), + ); + } +} diff --git a/lib/pages/home/hashtag/hashtag_state.dart b/lib/pages/home/hashtag/hashtag_state.dart new file mode 100644 index 0000000..6369e13 --- /dev/null +++ b/lib/pages/home/hashtag/hashtag_state.dart @@ -0,0 +1,20 @@ +import 'package:didvan/models/enums.dart'; +import 'package:didvan/providers/core_provider.dart'; +import 'package:didvan/services/network/request.dart'; +import 'package:didvan/services/network/request_helper.dart'; + +class HashtagState extends CoreProvier { + late final int id; + int page = 1; + + Future getTagItems({required int page}) async { + appState = AppState.busy; + final service = RequestService(RequestHelper.tag( + ids: [id], + limit: 15, + page: page, + )); + await service.httpGet(); + if (service.isSuccess) {} + } +} diff --git a/lib/pages/home/news/news_details/news_details_state.dart b/lib/pages/home/news/news_details/news_details_state.dart index b9ac878..879a178 100644 --- a/lib/pages/home/news/news_details/news_details_state.dart +++ b/lib/pages/home/news/news_details/news_details_state.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'dart:math'; import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/item_overview.dart'; import 'package:didvan/models/news_details_data.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/news.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/services/network/request.dart'; diff --git a/lib/pages/home/news/news_state.dart b/lib/pages/home/news/news_state.dart index 735011e..47f3366 100644 --- a/lib/pages/home/news/news_state.dart +++ b/lib/pages/home/news/news_state.dart @@ -1,5 +1,5 @@ import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/news_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/news.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/providers/user_provider.dart'; @@ -14,7 +14,7 @@ class NewsState extends CoreProvier { int page = 1; int lastPage = 0; - final List news = []; + final List news = []; void init() { search = ''; @@ -61,7 +61,7 @@ class NewsState extends CoreProvier { lastPage = service.result['lastPage']; final newsList = service.result['news']; for (var i = 0; i < newsList.length; i++) { - news.add(NewsOverviewData.fromJson(newsList[i])); + news.add(OverviewData.fromJson(newsList[i])); } appState = AppState.idle; return; diff --git a/lib/pages/home/radar/radar_details/radar_details_state.dart b/lib/pages/home/radar/radar_details/radar_details_state.dart index ed210be..e08e1c8 100644 --- a/lib/pages/home/radar/radar_details/radar_details_state.dart +++ b/lib/pages/home/radar/radar_details/radar_details_state.dart @@ -2,12 +2,13 @@ import 'dart:async'; import 'dart:math'; import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/item_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/radar_details_data.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; +import 'package:flutter/material.dart'; class RadarDetailsState extends CoreProvier { final List radars = []; @@ -41,6 +42,7 @@ class RadarDetailsState extends CoreProvier { _handleTracking(sendRequest: isForward != null); if (service.isSuccess) { final result = service.result; + debugPrint(service.result.toString()); final radar = RadarDetailsData.fromJson(result['radar']); if (args.page == 0) { radars.add(radar); @@ -96,7 +98,7 @@ class RadarDetailsState extends CoreProvier { final service = RequestService(RequestHelper.tag( ids: currentRadar.tags.map((tag) => tag.id).toList(), itemId: currentRadar.id, - type: 'news', + type: 'radar', )); await service.httpGet(); if (service.isSuccess) { diff --git a/lib/pages/home/radar/radar_state.dart b/lib/pages/home/radar/radar_state.dart index b3da200..75318ee 100644 --- a/lib/pages/home/radar/radar_state.dart +++ b/lib/pages/home/radar/radar_state.dart @@ -1,8 +1,8 @@ import 'package:didvan/constants/assets.dart'; import 'package:didvan/models/enums.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/view/radar_category.dart'; -import 'package:didvan/models/radar_overview.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/providers/user_provider.dart'; import 'package:didvan/services/network/request.dart'; @@ -19,7 +19,7 @@ class RadarState extends CoreProvier { bool shouldColapse = false; final List selectedCats = []; List categories = []; - final List radars = []; + final List radars = []; bool get filtering => selectedCats.length > 1 || startDate != null || endDate != null; @@ -70,7 +70,7 @@ class RadarState extends CoreProvier { lastPage = service.result['lastPage']; final radarsList = service.result['radars']; for (var i = 0; i < radarsList.length; i++) { - radars.add(RadarOverviewData.fromJson(radarsList[i])); + radars.add(OverviewData.fromJson(radarsList[i])); } if (searching || filtering || isColapsed || isCategorySelected) { shouldColapse = true; diff --git a/lib/pages/home/settings/bookmarks/bookmark_state.dart b/lib/pages/home/settings/bookmarks/bookmark_state.dart index 5786b50..1807179 100644 --- a/lib/pages/home/settings/bookmarks/bookmark_state.dart +++ b/lib/pages/home/settings/bookmarks/bookmark_state.dart @@ -1,5 +1,5 @@ import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/item_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/providers/user_provider.dart'; import 'package:didvan/services/network/request.dart'; @@ -36,7 +36,7 @@ class BookmarksState extends CoreProvier { if (value) return; final type = bookmarks.firstWhere((element) => element.id == id).type; switch (type) { - case 'radars': + case 'radar': UserProvider.changeRadarMark(id, value); break; case 'news': diff --git a/lib/pages/home/settings/bookmarks/bookmarks.dart b/lib/pages/home/settings/bookmarks/bookmarks.dart index 6d1474a..05a7e10 100644 --- a/lib/pages/home/settings/bookmarks/bookmarks.dart +++ b/lib/pages/home/settings/bookmarks/bookmarks.dart @@ -60,7 +60,7 @@ class _BookmarksState extends State { child: Column( children: [ MenuItem( - onTap: () => _onCategorySelected('radars'), + onTap: () => _onCategorySelected('radar'), title: 'تحلیل‌های رادار', icon: DidvanIcons.radar_regular, iconSize: 24, @@ -122,7 +122,7 @@ class _BookmarksState extends State { } void _onCategorySelected(String type) { - if (type != 'radars' && type != 'news') return; + if (type != 'radar' && type != 'news') return; FocusScope.of(context).unfocus(); Navigator.of(context).pushNamed(Routes.filteredBookmarks, arguments: type); } 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 ac5bee1..1c9d760 100644 --- a/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart +++ b/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart @@ -1,5 +1,3 @@ -import 'package:didvan/models/news_overview.dart'; -import 'package:didvan/models/radar_overview.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart'; import 'package:didvan/pages/home/widgets/news_overview.dart'; @@ -29,13 +27,13 @@ class _FilteredBookmarksState extends State { String get _appBarTitle { switch (context.read().type) { - case 'radars': + case 'radar': return 'تحلیل‌های رادار'; case 'news': return 'اخبار'; - case 'videos': + case 'video': return 'ویدئو‌ها'; - case 'podcasts': + case 'podcast': return 'پادکست‌ها'; default: return 'پادکست‌ها'; @@ -56,16 +54,16 @@ class _FilteredBookmarksState extends State { placeholder: RadarOverview.placeholder, emptyState: const EmptyList(), builder: (context, state, index) { - if (state.type == 'radars') { + if (state.type == 'radar') { return RadarOverview( - radar: state.bookmarks[index] as RadarOverviewData, + radar: state.bookmarks[index], onMarkChanged: _onBookmarkChanged, onCommentsChanged: state.onCommentsChanged, hasUnmarkConfirmation: true, ); } return NewsOverview( - news: state.bookmarks[index] as NewsOverviewData, + news: state.bookmarks[index], onMarkChanged: _onBookmarkChanged, hasUnmarkConfirmation: true, ); diff --git a/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart b/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart index 99c7476..4625410 100644 --- a/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart +++ b/lib/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart @@ -1,7 +1,5 @@ import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/item_overview.dart'; -import 'package:didvan/models/news_overview.dart'; -import 'package:didvan/models/radar_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/providers/user_provider.dart'; import 'package:didvan/services/network/request.dart'; @@ -29,12 +27,7 @@ class FilteredBookmarksState extends CoreProvier { final marks = service.result[type]; bookmarks.clear(); for (var i = 0; i < marks.length; i++) { - if (type == 'radars') { - bookmarks.add(RadarOverviewData.fromJson(marks[i])); - } - if (type == 'news') { - bookmarks.add(NewsOverviewData.fromJson(marks[i])); - } + bookmarks.add(OverviewData.fromJson(marks[i])); } appState = AppState.idle; return; @@ -44,7 +37,7 @@ class FilteredBookmarksState extends CoreProvier { void onMarkChanged(int id, bool value) { switch (type) { - case 'radars': + case 'radar': UserProvider.changeRadarMark(id, value); break; case 'news': @@ -57,8 +50,7 @@ class FilteredBookmarksState extends CoreProvier { } void onCommentsChanged(int id, int value) { - (bookmarks.firstWhere((radar) => radar.id == id) as RadarOverviewData) - .comments = value; + bookmarks.firstWhere((radar) => radar.id == id).comments = value; notifyListeners(); } } diff --git a/lib/pages/home/widgets/multitype_overview.dart b/lib/pages/home/widgets/multitype_overview.dart index 4cd5f54..f45ea16 100644 --- a/lib/pages/home/widgets/multitype_overview.dart +++ b/lib/pages/home/widgets/multitype_overview.dart @@ -1,6 +1,6 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; -import 'package:didvan/models/item_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/routes/routes.dart'; diff --git a/lib/pages/home/widgets/news_overview.dart b/lib/pages/home/widgets/news_overview.dart index 0c625de..03a19aa 100644 --- a/lib/pages/home/widgets/news_overview.dart +++ b/lib/pages/home/widgets/news_overview.dart @@ -1,4 +1,4 @@ -import 'package:didvan/models/news_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/news.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/date_time.dart'; @@ -11,7 +11,7 @@ import 'package:didvan/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; class NewsOverview extends StatelessWidget { - final NewsOverviewData news; + final OverviewData news; final NewsRequestArgs? newsRequestArgs; final void Function(int id, bool value) onMarkChanged; final bool hasUnmarkConfirmation; @@ -69,7 +69,7 @@ class NewsOverview extends StatelessWidget { Row( children: [ DidvanText( - news.reference, + news.reference!, style: Theme.of(context).textTheme.caption, ), DidvanText( diff --git a/lib/pages/home/widgets/radar_overview.dart b/lib/pages/home/widgets/radar_overview.dart index e6c252b..64d462d 100644 --- a/lib/pages/home/widgets/radar_overview.dart +++ b/lib/pages/home/widgets/radar_overview.dart @@ -1,6 +1,6 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; -import 'package:didvan/models/radar_overview.dart'; +import 'package:didvan/models/overview_data.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/utils/date_time.dart'; @@ -14,7 +14,7 @@ import 'package:didvan/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; class RadarOverview extends StatelessWidget { - final RadarOverviewData radar; + final OverviewData radar; final void Function(int id, int count) onCommentsChanged; final void Function(int id, bool value) onMarkChanged; final bool hasUnmarkConfirmation; @@ -81,7 +81,7 @@ class RadarOverview extends StatelessWidget { Row( children: [ DidvanText( - radar.categories.first.label, + radar.categories!.first.label, style: Theme.of(context).textTheme.overline, color: Theme.of(context).colorScheme.caption, ), diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index ba7e262..7e1902e 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -24,13 +24,15 @@ class RequestHelper { _baseDirectUrl + '/$id/sendMessage'; static String tag({ required List ids, - required String type, - required int itemId, + String? type, + int? itemId, + int? page, + int? limit, }) => baseUrl + '/tag' + _urlConcatGenerator([ - const MapEntry('limit', '3'), + MapEntry('limit', limit?.toString() ?? '3'), MapEntry('type', type), MapEntry('id', itemId.toString()), MapEntry('tags', _urlListConcatGenerator(ids))