didvan-app/lib/services/app_home_widget/home_widget_repository.dart

234 lines
7.8 KiB
Dart

import 'package:didvan/models/notification_message.dart';
import 'package:flutter/cupertino.dart';
import 'package:home_widget/home_widget.dart';
import 'package:persian_number_utility/persian_number_utility.dart';
import 'package:url_launcher/url_launcher_string.dart';
// import 'package:url_launcher/url_launcher_string.dart';
import '../../main.dart';
import '../../models/requests/infography.dart';
import '../../models/requests/news.dart';
import '../../models/requests/radar.dart';
import '../../models/widget_response.dart';
import '../../routes/routes.dart';
import '../network/request.dart';
import '../network/request_helper.dart';
class HomeWidgetRepository {
static Future<void> fetchWidget() async {
// RequestService.token = await StorageService.getValue(key: 'token');
final service = RequestService(
RequestHelper.widgetNews(),
);
await service.httpGet();
if (service.isSuccess) {
final favourites = service.data('content');
HomeWidget.saveWidgetData("token", RequestService.token.toString());
for (var i = 0; i < favourites.length; i++) {
HomeWidget.saveWidgetData(
"id${i + 1}", WidgetResponse.fromJson(favourites[i]).id.toString());
HomeWidget.saveWidgetData("title${i + 1}",
WidgetResponse.fromJson(favourites[i]).title.toString());
HomeWidget.saveWidgetData(
"createdAt${i + 1}",
DateTime.parse(
WidgetResponse.fromJson(favourites[i]).createdAt.toString())
.toPersianDateStr());
HomeWidget.saveWidgetData("type${i + 1}",
WidgetResponse.fromJson(favourites[i]).type.toString());
HomeWidget.saveWidgetData("link${i + 1}",
WidgetResponse.fromJson(favourites[i]).link.toString());
HomeWidget.saveWidgetData("category${i + 1}",
WidgetResponse.fromJson(favourites[i]).category.toString());
HomeWidget.saveWidgetData("image${i + 1}",
WidgetResponse.fromJson(favourites[i]).image.toString());
}
HomeWidget.updateWidget(
androidName: "FavWidget",
);
}
}
static Future<void> decideWhereToGo() async {
String? uri =
await HomeWidget.getWidgetData<String>('uri', defaultValue: "");
if (uri!.isNotEmpty) {
int row = 0;
String route = "";
dynamic args;
switch (uri) {
case 'setting':
route = Routes.favouritesStep;
args = {"toTimer": false};
break;
case 'rowfirst':
row = 1;
break;
case 'rowmiddle':
row = 2;
break;
case 'rowlast':
row = 3;
break;
}
if (row != 0) {
String? id =
await HomeWidget.getWidgetData<String>("id$row", defaultValue: "");
WidgetResponse data = WidgetResponse(
id: int.parse(id!),
title: await HomeWidget.getWidgetData("title$row", defaultValue: ""),
createdAt:
await HomeWidget.getWidgetData("createdAt$row", defaultValue: ""),
type: await HomeWidget.getWidgetData("type$row", defaultValue: ""),
link: await HomeWidget.getWidgetData("link$row", defaultValue: ""),
category:
await HomeWidget.getWidgetData("category$row", defaultValue: ""),
image: await HomeWidget.getWidgetData("image$row", defaultValue: ""),
);
if (data.link!.startsWith('http')) {
launchUrlString(
'${data.link}',
mode: LaunchMode.inAppWebView,
);
} else {
switch (data.type!) {
case "infography":
route = Routes.infography;
args = {
// 'onMarkChanged': (id, value) =>
// markChangeHandler(data.type, id, value),
'id': data.id,
'args': const InfographyRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
};
break;
case "news":
route = Routes.newsDetails;
args = {
// 'onMarkChanged': (id, value) =>
// markChangeHandler(data.type, id, value),
'id': data.id,
'args': const NewsRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
};
break;
case "radar":
route = Routes.radarDetails;
args = {
// 'onMarkChanged': (id, value) =>
// markChangeHandler(data.type, id, value),
'id': data.id,
'args': const RadarRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
};
break;
case "video":
route = Routes.studioDetails;
args = {
'type': 'podcast',
'id': data.id,
};
break;
case "podcast":
route = Routes.podcasts;
args = {
'type': 'podcast',
'id': data.id,
};
break;
}
}
}
if (route.isNotEmpty) {
Future.delayed(
const Duration(milliseconds: 500),
() => Navigator.of(navigatorKey.currentContext!)
.pushNamed(route.toString(), arguments: args));
}
}
await HomeWidget.saveWidgetData("uri", "");
data = null;
return;
}
static NotificationMessage? data;
static Future<void> decideWhereToGoNotif() async {
NotificationMessage? data = HomeWidgetRepository.data;
// Navigate into pages, avoiding to open the notification details page over another details page already opened
String route = "";
dynamic args;
bool openComments = data!.notificationType.toString() == "2";
if (data.link.toString().isEmpty) {
switch (data.type!) {
case "infography":
route = Routes.infography;
args = {
// 'onMarkChanged': (id, value) =>
// markChangeHandler(data.type, id, value),
'id': int.parse(data.id.toString()),
'args': const InfographyRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
'goToComment': openComments
};
break;
case "news":
route = Routes.newsDetails;
args = {
// 'onMarkChanged': (id, value) =>
// markChangeHandler(data.type, id, value),
'id': int.parse(data.id.toString()),
'args': const NewsRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
'goToComment': openComments
};
break;
case "radar":
route = Routes.radarDetails;
args = {
// 'onMarkChanged': (id, value) =>
// markChangeHandler(data.type, id, value),
'id': int.parse(data.id.toString()),
'args': const RadarRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
'goToComment': openComments
};
break;
case "video":
route = Routes.studioDetails;
args = {
'type': 'podcast',
'id': int.parse(data.id.toString()),
'goToComment': openComments
};
break;
case "podcast":
route = Routes.podcasts;
args = {
'type': 'podcast',
'id': int.parse(data.id.toString()),
'goToComment': openComments
};
break;
}
} else {
if (data.link!.startsWith('http')) {
launchUrlString(
'${data.link}',
mode: LaunchMode.inAppWebView,
);
}
}
if (route.isNotEmpty) {
navigatorKey.currentState!.pushNamed(route, arguments: args);
}
return;
}
}