D1APP-104 new models updates for bookmarks -_-+--

This commit is contained in:
MohammadTaha Basiri 2022-02-26 02:05:44 +03:30
parent 05e15b55c4
commit f68b7973e6
20 changed files with 141 additions and 154 deletions

View File

@ -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<String, dynamic> json) => OverviewData(
id: json['id'],
title: json['title'],
image: json['image'],
description: json['description'],
createdAt: json['createdAt'],
type: json['type'],
);
}

View File

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

View File

@ -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<String, dynamic> json) =>
NewsOverviewData(
id: json['id'],
title: json['title'],
reference: json['reference'],
description: json['description'],
image: json['image'],
createdAt: json['createdAt'],
marked: json['marked'] ?? true,
);
}

View File

@ -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<CategoryData>? 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<String, dynamic> 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<dynamic>?)
?.map((e) => CategoryData.fromJson(e as Map<String, dynamic>))
.toList(),
);
Map<String, dynamic> 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(),
};
}

View File

@ -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';

View File

@ -1,49 +0,0 @@
import 'package:didvan/models/item_overview.dart';
import 'category.dart';
class RadarOverviewData extends OverviewData {
final bool forManagers;
final List<CategoryData> 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<String, dynamic> 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<CategoryData>.from(
json['categories'].map(
(category) => CategoryData.fromJson(category),
),
),
);
}

View File

@ -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<Hashtag> {
@override
Widget build(BuildContext context) {
return DidvanScaffold(
appBarData: AppBarData(title: widget.tag.label, hasBack: true),
);
}
}

View File

@ -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<void> 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) {}
}
}

View File

@ -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';

View File

@ -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<NewsOverviewData> news = [];
final List<OverviewData> 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;

View File

@ -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<RadarDetailsData?> 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) {

View File

@ -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<RadarCategory> selectedCats = [];
List<RadarCategory> categories = [];
final List<RadarOverviewData> radars = [];
final List<OverviewData> 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;

View File

@ -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':

View File

@ -60,7 +60,7 @@ class _BookmarksState extends State<Bookmarks> {
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<Bookmarks> {
}
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);
}

View File

@ -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<FilteredBookmarks> {
String get _appBarTitle {
switch (context.read<FilteredBookmarksState>().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<FilteredBookmarks> {
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,
);

View File

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

View File

@ -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';

View File

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

View File

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

View File

@ -24,13 +24,15 @@ class RequestHelper {
_baseDirectUrl + '/$id/sendMessage';
static String tag({
required List<int> 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))