From c6e07bbb2e21f76e850c648a866fb13c96151849 Mon Sep 17 00:00:00 2001 From: OkaykOrhmn Date: Tue, 21 May 2024 10:07:44 +0330 Subject: [PATCH] 01-02-1403 / Rhmn / release test 2. --- android/app/build.gradle | 29 +++---- android/app/src/main/AndroidManifest.xml | 1 + .../kotlin/com/example/didvan/MainActivity.kt | 7 ++ android/app/src/main/res/values/strings.xml | 4 +- android/build.gradle | 4 +- keystore.jks | Bin 2243 -> 0 bytes lib/constants/app_icons.dart | 4 +- lib/main.dart | 25 ++---- lib/models/comment/comment.dart | 2 +- .../favorites_response.dart | 8 +- lib/models/notification_message.dart | 36 ++++---- lib/models/users_mention.dart | 10 +-- lib/models/widget_response.dart | 2 +- .../home_widget_repository.dart | 68 +++++++-------- .../awsome_notification_controller.dart | 1 - .../awsome/awsome_notification_handler.dart | 2 +- .../fcm/firebase_notification_handler.dart | 78 +++++++++--------- .../lc/local_notification_service.dart | 29 +++---- .../lc/show_notification_handler.dart | 8 +- lib/utils/date_time.dart | 24 +++--- .../authentication/screens/password.dart | 6 +- lib/views/comments/widgets/comment.dart | 2 +- .../customize_category_state.dart | 8 +- .../customize_category/favorites_step.dart | 4 - .../notification_status_step.dart | 5 -- .../widgets/customize_category_checkbox.dart | 17 ++-- .../widgets/customize_category_switch.dart | 8 +- lib/views/home/home.dart | 12 --- .../notification_time/notification_time.dart | 24 ++---- .../notification_time_state.dart | 6 -- .../widgets/custom_cupertino_date_picker.dart | 34 ++++---- lib/views/splash/splash.dart | 8 +- lib/views/widgets/didvan/checkbox.dart | 9 +- .../notification_dynamic_dialog.dart | 3 +- lib/views/widgets/user_mention.dart | 2 - pubspec.yaml | 2 +- 36 files changed, 216 insertions(+), 276 deletions(-) delete mode 100644 keystore.jks diff --git a/android/app/build.gradle b/android/app/build.gradle index e6c7983..189bbb2 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -52,26 +52,27 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.didvan.didvanapp" minSdkVersion 24 + //noinspection ExpiredTargetSdkVersion targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } - signingConfigs { - release { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null - storePassword keystoreProperties['storePassword'] - } - } - buildTypes { - release { - signingConfig signingConfigs.release - } - } + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] + } + } + buildTypes { + release { + signingConfig signingConfigs.release + } + } - lintOptions { + lintOptions { disable 'InvalidPackage' checkReleaseBuilds false } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 4450b50..af5a512 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -14,6 +14,7 @@ android:icon="@mipmap/ic_launcher" android:label="Didvan" android:requestLegacyExternalStorage="true" + android:enableOnBackInvokedCallback="true" android:usesCleartextTraffic="true"> - EXAMPLE + Didvan Add widget - This is an app widget description + چشم همیشه باز مدیران \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index d91b133..5152e0f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -22,9 +22,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { delete rootProject.buildDir -} +} \ No newline at end of file diff --git a/keystore.jks b/keystore.jks deleted file mode 100644 index 5b06703cccfdccfdbb3a0feecdb0032272e7e7d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2243 zcmchYS5VW58pZQZLMV~YMNmMR1r$PrAWCs*Lcm0%h!Bd>ENmze2{=+hZwg{iT#*t$ zx&$$i5-=K2st5$>pooezg9<@NSZ3$mJ3Hh1eK-&2_w>z~Gv^a53Kl^i5O`a_KY|g1 z1B1@{Zrd1#1QrYg5(1E9C?AP{iD|*_Byj>I!X?h~ZUF&QtyILc8#4hf|+`5;UYrEBeML$K?twTuv&E z*Yd4S_m5+04V1@L;U?b-{U^fR4HR+$MD8HZ2WGyZHO$CwC63d<0t~o%af#f;9<(D) zMBzzR-@O;3E>ui*U5*$Zpf1}w@2cNQ%{TbGLmg4W{waLHyA5XPE~@?BMsiUwM4U41 zhM)@Bm-Z%SH*w(8bA2+UA~PGC@k>-QR-?%7Vn}8#L_AD;ZpdGP)cUoWcVCBgB@k}U z%IB<`!BV)((golr#Zy_XzzgbrDX$^8RP3o|0iAl6FTJeHM!B34({1+`wDt3azpoWH z&|T#X6|eC=$1CdVLN$Z`Sjk)t-boNOntc_Fk;g`=g;!dxLRWdxtDc|KMHHnW zlh?_HNf#799Z(Y{x>QTtDsmOw6We5wV92!LG@nkkQyCqWDGBUb={{z>5{c(v8`_Ra zm}R7vaJ!FOX9UrmuD&Dk9};b3&KQ9$RnB%jS~EKL^SupY`V)gGk`qd=!gH}%j}bwj zmk&$YYkvGyehBTeseWnl_E+BA=3sE#%>3FT*E1Z&C1t-u7P#aoax?TtkZhgqe4B-k z{xtfDZa-^)k>>2r^hXEpK4vw!XLq5?0xK!iS}&f!Ha9~%jhnt5T>Ai_$Hl=&iqNI~ zW|YxR_t;H>jaIDoImi2aEau|8hdJN+?g^*VbOk2A`GP7L!ax4k`TK{(UMjD(%6!c8 z5QzKTz&@Puaf?^nhhAe63FCrY{U2GW=o_Qh2m;+F}#=Yo!ven28){GxbJT705nzj zgLcUh)9wbb~cJ2c6oO1|Hoxn(4%&f3!Iu?^@< z9~JzH-gu)D?C|UMV&yzKd4#WlX&1;ygXZ9JJesPc(+Kn3oa!XI9HafU|NeoN(aA=C zhn6C0rO#WN$le5QP}yKFv_a##nm^q8d5r_at}4{D3sKf<}hDVXFX=T%ZMZ9;_; zJO3m{Ydq-C1NWTmqI5{gFiVwxJWJf!Oh%*Crx{~6&#bBZ_%=;S?l{>z`{Oj)e&lKU*%Vd_bcE3pHQQ3& zmK&Nk3fmxv9ZYIC5O5uQ?c4s7lY7CNW&unm`^12EPmnK}FZgE|g^00u)Z<-@Na#bKgai8hIA;s5{_0wDwSB)1n6;tYk!2s;z55Q4%9|0N>7 z5#is6*lz^>8-e_fAeH6CQ7EK73Z-{M-@riMOohV24XW ziskM{>lUw@TgAg=mnHVKQb;gfkSscTk*L>NZxZ@8>L|Cuu{EOH1>taa-v|67N$438 zTRq8sS*}rK@>$dYIo~;Bu!9<&o1QdJ=&57TO#~u64#n2t z=|!c{ESeL)q7O6ab?1#;_w+3OVeI&_hdzl5vih3U*WarPBkaPq(9Kb?kqla`-a_ke z8P-sCP}7P#k;hW8BUAic~==Z8t;-0o@6e%}J)@GWCabva6MA&3-KHx^`wl=-(l3cWOIC093A= zMWNn7SJ%;ejpx=P5FQ^Hfv0ElRYD}|U`E!$87i2liUb zmN|qSH;2Df7(WT98_xEt>6=LrTX^lbpxQPal}1ZE_)}(&nw&k+!pjW1FlLjr{-8h^ z?3Ch_%ZVhNwqh>NE~1-dE16U!u4n89)O|`rRIbVSBEOPp?A$TVF$dO% ze(ke-H6)8pH^InOXQ@yf_6A|DaZJ&5tW%CSN9kzh+fVs%p^87unZmN4!#eVs; navigatorKey = GlobalKey(); @pragma('vm:entry-point') Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { - // If you're going to use other Firebase services in the background, such as Firestore, - // make sure you call `initializeApp` before using other Firebase services. WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: kIsWeb @@ -52,9 +49,6 @@ Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { ), ); - // LocalNotificationService.initialize(); - // LocalNotificationService.display(message); - // LocalNotificationService.showBigPictureNotification(); AwsomeNotificationHandler().alarm(); AwsomeNotificationHandler().show(message); } @@ -62,13 +56,11 @@ Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { void main() async { try { WidgetsFlutterBinding.ensureInitialized(); - FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); - HomeWidget.registerBackgroundCallback(backgroundCallback); - // HomeWidget.registerInteractivityCallback(backgroundCallback); - HomeWidget.widgetClicked.listen((Uri? uri) {}); FirebaseNotificationHandler().initial(); + FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); + HomeWidget.registerInteractivityCallback(backgroundCallback); } catch (e) { - print(e.toString()); + debugPrintStack(); } runApp(const Didvan()); @@ -80,13 +72,10 @@ Future backgroundCallback(Uri? uri) async { package: 'com.didvan.didvanapp', componentName: 'com.didvan.didvanapp.MainActivity', ); - await intent.launch(); - HomeWidget.saveWidgetData("uri", uri!.host); } - class Didvan extends StatefulWidget { const Didvan({Key? key}) : super(key: key); @@ -99,12 +88,12 @@ class _DidvanState extends State with WidgetsBindingObserver { void initState() { super.initState(); - WidgetsBinding.instance?.addObserver(this); + WidgetsBinding.instance.addObserver(this); } @override void dispose() { - WidgetsBinding.instance?.removeObserver(this); + WidgetsBinding.instance.removeObserver(this); super.dispose(); } @@ -126,7 +115,7 @@ class _DidvanState extends State with WidgetsBindingObserver { switch (value) { case 'setting': route = Routes.favouritesStep; - args = {"toTimer":false}; + args = {"toTimer": false}; break; case 'rowfirst': row = 1; diff --git a/lib/models/comment/comment.dart b/lib/models/comment/comment.dart index 89c4d1e..c0f127b 100644 --- a/lib/models/comment/comment.dart +++ b/lib/models/comment/comment.dart @@ -11,7 +11,7 @@ class CommentData { bool disliked; bool private; int status; - dynamic? mention; + dynamic mention; final FeedbackData feedback; final UserOverview user; final List replies; diff --git a/lib/models/customize_categories/favorites_response.dart b/lib/models/customize_categories/favorites_response.dart index 02750df..109e443 100644 --- a/lib/models/customize_categories/favorites_response.dart +++ b/lib/models/customize_categories/favorites_response.dart @@ -14,10 +14,10 @@ class FavoritesResponse { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['selected'] = this.selected; + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['selected'] = selected; return data; } } \ No newline at end of file diff --git a/lib/models/notification_message.dart b/lib/models/notification_message.dart index 049594c..63e6096 100644 --- a/lib/models/notification_message.dart +++ b/lib/models/notification_message.dart @@ -31,27 +31,27 @@ class NotificationMessage { } Map toJson() { - final Map data = new Map(); - data['notificationType'] = this.notificationType; - data['title'] = this.title; - data['body'] = this.body; - data['id'] = this.id; - data['type'] = this.type; - data['link'] = this.link; - data['image'] = this.image; - data['photo'] = this.photo; + final Map data = {}; + data['notificationType'] = notificationType; + data['title'] = title; + data['body'] = body; + data['id'] = id; + data['type'] = type; + data['link'] = link; + data['image'] = image; + data['photo'] = photo; return data; } Map toPayload() { - final Map data = new Map(); - data['notificationType'] = this.notificationType!; - data['title'] = this.title!; - data['body'] = this.body!; - data['id'] = this.id!; - data['type'] = this.type!; - data['link'] = this.link!; - data['image'] = this.image!; - data['photo'] = this.photo!; + final Map data = {}; + data['notificationType'] = notificationType!; + data['title'] = title!; + data['body'] = body!; + data['id'] = id!; + data['type'] = type!; + data['link'] = link!; + data['image'] = image!; + data['photo'] = photo!; return data; } } \ No newline at end of file diff --git a/lib/models/users_mention.dart b/lib/models/users_mention.dart index 0a75aa1..96da502 100644 --- a/lib/models/users_mention.dart +++ b/lib/models/users_mention.dart @@ -14,11 +14,11 @@ class UsersMention { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['type'] = this.type; - data['photo'] = this.photo; + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['type'] = type; + data['photo'] = photo; return data; } } \ No newline at end of file diff --git a/lib/models/widget_response.dart b/lib/models/widget_response.dart index 12be31e..757d220 100644 --- a/lib/models/widget_response.dart +++ b/lib/models/widget_response.dart @@ -27,7 +27,7 @@ class WidgetResponse { } Map toJson() { - final Map data = Map(); + final Map data = {}; data['id'] = id; data['title'] = title; data['createdAt'] = createdAt; diff --git a/lib/services/app_home_widget/home_widget_repository.dart b/lib/services/app_home_widget/home_widget_repository.dart index f69f6d7..1027667 100644 --- a/lib/services/app_home_widget/home_widget_repository.dart +++ b/lib/services/app_home_widget/home_widget_repository.dart @@ -6,41 +6,41 @@ import '../network/request.dart'; import '../network/request_helper.dart'; class HomeWidgetRepository { - Future fetchWidget() async { - final service = RequestService( - RequestHelper.widgetNews(), - ); - await service.httpGet(); - List responseList = []; - if (service.isSuccess) { - final favourites = service.data('content'); - HomeWidget.saveWidgetData("token", - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NCwicm9sZUlkIjo0LCJhcHBJZCI6MCwiaWF0IjoxNzEzOTM1NzkwfQ.i-SO9tLy0M9j-_C2Wh8tdp01vtYGlDZIBFPygglHQF0"); - 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", + if (RequestService.token != null && RequestService.token.isNotEmpty) { + final service = RequestService( + RequestHelper.widgetNews(), ); + await service.httpGet(); + List responseList = []; + 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", + ); + } } } - -} \ No newline at end of file +} diff --git a/lib/services/notification/awsome/awsome_notification_controller.dart b/lib/services/notification/awsome/awsome_notification_controller.dart index 2f8b4f4..9cde9bb 100644 --- a/lib/services/notification/awsome/awsome_notification_controller.dart +++ b/lib/services/notification/awsome/awsome_notification_controller.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'package:awesome_notifications/awesome_notifications.dart'; import 'package:didvan/main.dart'; diff --git a/lib/services/notification/awsome/awsome_notification_handler.dart b/lib/services/notification/awsome/awsome_notification_handler.dart index deb5277..8fcae3f 100644 --- a/lib/services/notification/awsome/awsome_notification_handler.dart +++ b/lib/services/notification/awsome/awsome_notification_handler.dart @@ -37,7 +37,7 @@ class AwsomeNotificationHandler { // channelGroupKey: 'basic_channel_group', // channelGroupName: 'Basic group') // ], - debug: true); + debug: false); initialAction = await AwesomeNotifications() .getInitialNotificationAction(removeFromActionEvents: false); diff --git a/lib/services/notification/fcm/firebase_notification_handler.dart b/lib/services/notification/fcm/firebase_notification_handler.dart index 9441a53..3c25746 100644 --- a/lib/services/notification/fcm/firebase_notification_handler.dart +++ b/lib/services/notification/fcm/firebase_notification_handler.dart @@ -60,48 +60,46 @@ class FirebaseNotificationHandler { // Listening for incoming messages while the app is in the foreground FirebaseMessaging.onMessage.listen((RemoteMessage message) { - if (message.data != null) { /* if (message.notification!.title != null && - message.notification!.body != null) { - final notificationData = message.data; - final screen = notificationData['screen']; + message.notification!.body != null) { + final notificationData = message.data; + final screen = notificationData['screen']; - // Showing an alert dialog when a notification is received (Foreground state) - // showDialog( - // context: context, - // barrierDismissible: false, - // builder: (BuildContext context) { - // return WillPopScope( - // onWillPop: () async => false, - // child: AlertDialog( - // title: Text(message.notification!.title!), - // content: Text(message.notification!.body!), - // actions: [ - // if (notificationData.containsKey('screen')) - // TextButton( - // onPressed: () { - // Navigator.pop(context); - // Navigator.of(context).pushNamed(screen); - // }, - // child: const Text('Open Screen'), - // ), - // TextButton( - // onPressed: () => Navigator.of(context).pop(), - // child: const Text('Dismiss'), - // ), - // ], - // ), - // ); - // }, - // ); - }*/ - // LocalNotificationService.initialize(); - // LocalNotificationService.showBigPictureNotification(); - // LocalNotificationService.display(message); - AwsomeNotificationHandler().alarm(); - AwsomeNotificationHandler().show(message); - } - }); + // Showing an alert dialog when a notification is received (Foreground state) + // showDialog( + // context: context, + // barrierDismissible: false, + // builder: (BuildContext context) { + // return WillPopScope( + // onWillPop: () async => false, + // child: AlertDialog( + // title: Text(message.notification!.title!), + // content: Text(message.notification!.body!), + // actions: [ + // if (notificationData.containsKey('screen')) + // TextButton( + // onPressed: () { + // Navigator.pop(context); + // Navigator.of(context).pushNamed(screen); + // }, + // child: const Text('Open Screen'), + // ), + // TextButton( + // onPressed: () => Navigator.of(context).pop(), + // child: const Text('Dismiss'), + // ), + // ], + // ), + // ); + // }, + // ); + }*/ + // LocalNotificationService.initialize(); + // LocalNotificationService.showBigPictureNotification(); + // LocalNotificationService.display(message); + AwsomeNotificationHandler().alarm(); + AwsomeNotificationHandler().show(message); + }); // Handling the initial message received when the app is launched from dead (killed state) // When the app is killed and a new notification arrives when user clicks on it diff --git a/lib/services/notification/lc/local_notification_service.dart b/lib/services/notification/lc/local_notification_service.dart index 63d9b70..b7e6b15 100644 --- a/lib/services/notification/lc/local_notification_service.dart +++ b/lib/services/notification/lc/local_notification_service.dart @@ -6,7 +6,6 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:http/http.dart'; import 'package:path_provider/path_provider.dart'; -import '../../../constants/assets.dart'; import '../../../models/notification_message.dart'; import '../../../views/widgets/notification/notification_dynamic_dialog.dart'; @@ -35,7 +34,7 @@ class LocalNotificationService { final id = DateTime.now().millisecondsSinceEpoch ~/ 1000; final BigPictureStyleInformation bigPictureStyleInformation = BigPictureStyleInformation( - FilePathAndroidBitmap( + const FilePathAndroidBitmap( "lib/assets/aaaa.jpg"), contentTitle: NotificationMessage.fromJson(message.data).title, htmlFormatContentTitle: true, @@ -45,7 +44,7 @@ class LocalNotificationService { largeIcon: const FilePathAndroidBitmap( "lib/assets/aaaa.jpg")); - NotificationDetails notificationDetails = NotificationDetails( + NotificationDetails notificationDetails = const NotificationDetails( android: AndroidNotificationDetails("Channel Id", "Main Channel", groupKey: "gfg", color: Colors.white, @@ -76,19 +75,17 @@ class LocalNotificationService { print('Got a message in the foreground!'); print('Message data: ${message.data}'); - if (message.data != null) { - print( - 'Message also contained a notification: so it will pop up ${message.notification!.body}'); - showDialog( - context: context, - // context: navigatorKey!.currentContext!, - builder: ((BuildContext context) { - return NotificationDynamicDialog( - title: message.notification!.title, - body: message.notification!.body); - })); - } - }); + print( + 'Message also contained a notification: so it will pop up ${message.notification!.body}'); + showDialog( + context: context, + // context: navigatorKey!.currentContext!, + builder: ((BuildContext context) { + return NotificationDynamicDialog( + title: message.notification!.title, + body: message.notification!.body); + })); + }); } static Future _downloadAndSaveFile(String url, String fileName) async { diff --git a/lib/services/notification/lc/show_notification_handler.dart b/lib/services/notification/lc/show_notification_handler.dart index c085647..eb0cc9b 100644 --- a/lib/services/notification/lc/show_notification_handler.dart +++ b/lib/services/notification/lc/show_notification_handler.dart @@ -8,12 +8,12 @@ void showNotificationAndroid(String title, String value) async { priority: Priority.high, ticker: 'ticker'); - int notification_id = 1; + int notificationId = 1; const NotificationDetails notificationDetails = NotificationDetails(android: androidNotificationDetails); await FlutterLocalNotificationsPlugin().show( - notification_id, title, value, notificationDetails, + notificationId, title, value, notificationDetails, payload: 'Not present'); } @@ -29,12 +29,12 @@ void showNotificationIos(String title, String value) async { //Secondary description (only from iOS 10 onwards) threadIdentifier: value); - int notification_id = 1; + int notificationId = 1; NotificationDetails platformChannelSpecifics = NotificationDetails(iOS: iOSPlatformChannelSpecifics); await FlutterLocalNotificationsPlugin().show( - notification_id, title, value, platformChannelSpecifics, + notificationId, title, value, platformChannelSpecifics, payload: 'Not present'); } diff --git a/lib/utils/date_time.dart b/lib/utils/date_time.dart index a280907..2eb34a0 100644 --- a/lib/utils/date_time.dart +++ b/lib/utils/date_time.dart @@ -9,21 +9,21 @@ class DateTimeUtils { static DayTime handleDayTime(String dayTime) { DateFormat format = DateFormat("HH:mm"); DateTime dateTime = format.parse(dayTime); - int _selectedTimeHour = dateTime.hour; - String _selectedTimeMinute = dateTime.minute.toString(); - Meridiem _selectedMeridiem = Meridiem.AM; + int selectedTimeHour = dateTime.hour; + String selectedTimeMinute = dateTime.minute.toString(); + Meridiem selectedMeridiem = Meridiem.AM; - if (_selectedTimeHour > 12) { - _selectedTimeHour -= 12; - _selectedMeridiem = Meridiem.PM; - } else if (_selectedTimeHour == 0) { - _selectedTimeHour = 24; - _selectedMeridiem = Meridiem.AM; + if (selectedTimeHour > 12) { + selectedTimeHour -= 12; + selectedMeridiem = Meridiem.PM; + } else if (selectedTimeHour == 0) { + selectedTimeHour = 24; + selectedMeridiem = Meridiem.AM; } return DayTime( - hour: _selectedTimeHour.toString(), - minute: _selectedTimeMinute, - meridiem: _selectedMeridiem); + hour: selectedTimeHour.toString(), + minute: selectedTimeMinute, + meridiem: selectedMeridiem); } static String handleDayTimeReverse(DayTime dayTime) { diff --git a/lib/views/authentication/screens/password.dart b/lib/views/authentication/screens/password.dart index 1f3e9dc..adbe625 100644 --- a/lib/views/authentication/screens/password.dart +++ b/lib/views/authentication/screens/password.dart @@ -117,7 +117,7 @@ class _PasswordInputState extends State { children: [ InkWrapper( onPressed:Navigator.of(ActionSheetUtils.context).pop, - child: Icon( + child: const Icon( DidvanIcons.close_solid, size: 24, ), @@ -127,8 +127,8 @@ class _PasswordInputState extends State { style: Theme.of(context).textTheme.displaySmall, color: Theme.of(context).colorScheme.text, ), - InkWrapper( - child: const Icon( + const InkWrapper( + child: Icon( DidvanIcons.close_regular, size: 24, color: Colors.transparent, diff --git a/lib/views/comments/widgets/comment.dart b/lib/views/comments/widgets/comment.dart index 9a0d3ed..785d99e 100644 --- a/lib/views/comments/widgets/comment.dart +++ b/lib/views/comments/widgets/comment.dart @@ -116,7 +116,7 @@ class CommentState extends State { color: Theme.of(context).colorScheme.primary, style: Theme.of(context).textTheme.titleSmall, ) - : SizedBox(), + : const SizedBox(), const SizedBox(height: 8), if (isReply) DidvanText( diff --git a/lib/views/customize_category/customize_category_state.dart b/lib/views/customize_category/customize_category_state.dart index 391f056..75452f7 100644 --- a/lib/views/customize_category/customize_category_state.dart +++ b/lib/views/customize_category/customize_category_state.dart @@ -35,11 +35,11 @@ class CustomizeCategoryState extends CoreProvier { faves.add(FavoritesResponse.fromJson(favourites[i])); } selectedFavIds.clear(); - faves.forEach((element) { + for (var element in faves) { if (element.selected!) { selectedFavIds.add(element.id!); } - }); + } appState = AppState.idle; } else { @@ -62,11 +62,11 @@ class CustomizeCategoryState extends CoreProvier { notifs.add(FavoritesResponse.fromJson(notificationsStatuses[i])); } selectedNotifIds.clear(); - notifs.forEach((element) { + for (var element in notifs) { if (element.selected!) { selectedNotifIds.add(element.id!); } - }); + } appState = AppState.idle; } else { appState = AppState.failed; diff --git a/lib/views/customize_category/favorites_step.dart b/lib/views/customize_category/favorites_step.dart index 88226cc..3132ec6 100644 --- a/lib/views/customize_category/favorites_step.dart +++ b/lib/views/customize_category/favorites_step.dart @@ -1,13 +1,10 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/users_mention.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/views/customize_category/customize_category_state.dart'; import 'package:didvan/views/customize_category/widgets/customize_category_checkbox.dart'; -import 'package:didvan/views/widgets/didvan/checkbox.dart'; import 'package:didvan/views/widgets/didvan/scaffold.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -17,7 +14,6 @@ import '../widgets/didvan/button.dart'; import '../widgets/shimmer_placeholder.dart'; import '../widgets/state_handlers/empty_state.dart'; import '../widgets/state_handlers/sliver_state_handler.dart'; -import '../widgets/user_mention.dart'; class FavoritesStep extends StatefulWidget { final Map pageData; diff --git a/lib/views/customize_category/notification_status_step.dart b/lib/views/customize_category/notification_status_step.dart index 9e9021f..e95bfa1 100644 --- a/lib/views/customize_category/notification_status_step.dart +++ b/lib/views/customize_category/notification_status_step.dart @@ -1,14 +1,10 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/users_mention.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/views/customize_category/customize_category_state.dart'; -import 'package:didvan/views/customize_category/widgets/customize_category_checkbox.dart'; -import 'package:didvan/views/widgets/didvan/checkbox.dart'; import 'package:didvan/views/widgets/didvan/scaffold.dart'; import 'package:didvan/views/widgets/didvan/switch.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -18,7 +14,6 @@ import '../widgets/didvan/button.dart'; import '../widgets/shimmer_placeholder.dart'; import '../widgets/state_handlers/empty_state.dart'; import '../widgets/state_handlers/sliver_state_handler.dart'; -import '../widgets/user_mention.dart'; class NotificationStatusStep extends StatefulWidget { final Map pageData; diff --git a/lib/views/customize_category/widgets/customize_category_checkbox.dart b/lib/views/customize_category/widgets/customize_category_checkbox.dart index a250dfd..d54192d 100644 --- a/lib/views/customize_category/widgets/customize_category_checkbox.dart +++ b/lib/views/customize_category/widgets/customize_category_checkbox.dart @@ -2,7 +2,6 @@ import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class CustomizeCategoryCheckbox extends StatefulWidget { @@ -36,11 +35,11 @@ class _CustomizeCategoryCheckboxState extends State { @override Widget build(BuildContext context) { - Color? _checkColor = widget.checkColor; - _checkColor ??= Theme.of(context).colorScheme.text; + Color? checkColor = widget.checkColor; + checkColor ??= Theme.of(context).colorScheme.text; - Color? _textColor = widget.textColor; - _textColor ??= Theme.of(context).colorScheme.text; + Color? textColor = widget.textColor; + textColor ??= Theme.of(context).colorScheme.text; return GestureDetector( onTap: () { @@ -61,17 +60,17 @@ class _CustomizeCategoryCheckboxState extends State { decoration: BoxDecoration( color: Colors.transparent, borderRadius: BorderRadius.circular(6), - border: Border.all(width: 1.0, color: _value? _checkColor: Theme.of(context).colorScheme.text), + border: Border.all(width: 1.0, color: _value? checkColor: Theme.of(context).colorScheme.text), ), - margin: EdgeInsets.all(8), + margin: const EdgeInsets.all(8), child: AnimatedVisibility( isVisible: _value, duration: DesignConfig.mediumAnimationDuration, - child: Center(child: Icon(Icons.check,size: 12,color: _value? _checkColor: Theme.of(context).colorScheme.text,)) + child: Center(child: Icon(Icons.check,size: 12,color: _value? checkColor: Theme.of(context).colorScheme.text,)) ), ), - ), DidvanText(widget.title,fontSize: widget.size,color: _value? _textColor: Theme.of(context).colorScheme.text, ), + ), DidvanText(widget.title,fontSize: widget.size,color: _value? textColor: Theme.of(context).colorScheme.text, ), ], ), ), diff --git a/lib/views/customize_category/widgets/customize_category_switch.dart b/lib/views/customize_category/widgets/customize_category_switch.dart index f5dc44c..f6c9c24 100644 --- a/lib/views/customize_category/widgets/customize_category_switch.dart +++ b/lib/views/customize_category/widgets/customize_category_switch.dart @@ -1,9 +1,5 @@ -import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; -import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/didvan/switch.dart'; -import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class CustomizeCategorySwitch extends StatefulWidget { @@ -40,8 +36,8 @@ class _CustomizeCategorySwitchState extends State { @override Widget build(BuildContext context) { - Color? _color = widget.color; - _color ??= Theme.of(context).colorScheme.caption; + Color? color = widget.color; + color ??= Theme.of(context).colorScheme.caption; return GestureDetector( onTap: () { diff --git a/lib/views/home/home.dart b/lib/views/home/home.dart index 79e9d4e..d34f3ee 100644 --- a/lib/views/home/home.dart +++ b/lib/views/home/home.dart @@ -1,27 +1,15 @@ 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/view/action_sheet_data.dart'; -import 'package:didvan/models/widget_response.dart'; import 'package:didvan/providers/theme.dart'; -import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/app_initalizer.dart'; -import 'package:didvan/services/network/request.dart'; -import 'package:didvan/services/network/request_helper.dart'; -import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/views/home/bookmarks/bookmarks.dart'; import 'package:didvan/views/home/categories/categories_page.dart'; import 'package:didvan/views/home/main/main_page.dart'; import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/views/home/new_statistic/new_statistic.dart'; import 'package:didvan/views/home/search/search.dart'; -import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:didvan/views/widgets/ink_wrapper.dart'; import 'package:didvan/views/widgets/logo_app_bar.dart'; import 'package:didvan/views/widgets/didvan/bnb.dart'; import 'package:flutter/material.dart'; -import 'package:home_widget/home_widget.dart'; -import 'package:persian_number_utility/persian_number_utility.dart'; import 'package:provider/provider.dart'; import '../../services/app_home_widget/home_widget_repository.dart'; diff --git a/lib/views/notification_time/notification_time.dart b/lib/views/notification_time/notification_time.dart index b1a3046..f31aea7 100644 --- a/lib/views/notification_time/notification_time.dart +++ b/lib/views/notification_time/notification_time.dart @@ -1,29 +1,15 @@ import 'package:didvan/config/theme_data.dart'; -import 'package:didvan/models/day_time.dart'; import 'package:didvan/models/enums.dart'; -import 'package:didvan/models/users_mention.dart'; import 'package:didvan/models/view/app_bar_data.dart'; -import 'package:didvan/views/customize_category/customize_category_state.dart'; -import 'package:didvan/views/customize_category/widgets/customize_category_switch.dart'; import 'package:didvan/views/notification_time/notification_time_state.dart'; import 'package:didvan/views/notification_time/widgets/custom_cupertino_date_picker.dart'; -import 'package:didvan/views/customize_category/widgets/customize_category_checkbox.dart'; -import 'package:didvan/views/widgets/didvan/checkbox.dart'; import 'package:didvan/views/widgets/didvan/scaffold.dart'; import 'package:didvan/views/widgets/didvan/switch.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:persian_datetime_picker/persian_datetime_picker.dart'; import 'package:provider/provider.dart'; -import '../../constants/assets.dart'; -import '../widgets/date_picker_button.dart'; import '../widgets/didvan/button.dart'; -import '../widgets/state_handlers/empty_state.dart'; -import '../widgets/state_handlers/sliver_state_handler.dart'; -import '../widgets/user_mention.dart'; class NotificationTime extends StatefulWidget { final Map pageData; @@ -71,7 +57,7 @@ class _NotificationTimeState extends State { padding: const EdgeInsets.all(16), showSliversFirst: false, backgroundColor: Theme.of(context).colorScheme.background, - slivers: [], + slivers: const [], children: [ Consumer( builder: (context, state, child) => state.appState == @@ -83,7 +69,7 @@ class _NotificationTimeState extends State { style: Theme.of(context).textTheme.bodyMedium, ), Container( - margin: EdgeInsets.all(24), + margin: const EdgeInsets.all(24), height: 210, child: CustomCupertinoDatePicker( disable: state.isAnytime, @@ -94,7 +80,7 @@ class _NotificationTimeState extends State { .titleMedium! .copyWith( color: state.isAnytime - ? Color(0xFFC8E0F4) + ? const Color(0xFFC8E0F4) : Theme.of(context) .colorScheme .white), @@ -114,7 +100,7 @@ class _NotificationTimeState extends State { Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, border: Border.all( @@ -133,7 +119,7 @@ class _NotificationTimeState extends State { ), ], ) - : SizedBox(), + : const SizedBox(), ) ], ), diff --git a/lib/views/notification_time/notification_time_state.dart b/lib/views/notification_time/notification_time_state.dart index 8ab7d03..dcce95f 100644 --- a/lib/views/notification_time/notification_time_state.dart +++ b/lib/views/notification_time/notification_time_state.dart @@ -1,20 +1,14 @@ -import 'package:didvan/main.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/providers/core.dart'; -import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; import '../../models/day_time.dart'; import '../../models/view/alert_data.dart'; -import '../../routes/routes.dart'; import '../../services/network/request.dart'; import '../../services/network/request_helper.dart'; import '../../utils/action_sheet.dart'; import '../../utils/date_time.dart'; -import '../profile/general_settings/settings_state.dart'; class NotificationTimeState extends CoreProvier { late DayTime selectedTime; diff --git a/lib/views/notification_time/widgets/custom_cupertino_date_picker.dart b/lib/views/notification_time/widgets/custom_cupertino_date_picker.dart index 9ea7f8d..2e9524a 100644 --- a/lib/views/notification_time/widgets/custom_cupertino_date_picker.dart +++ b/lib/views/notification_time/widgets/custom_cupertino_date_picker.dart @@ -1,9 +1,5 @@ -import 'package:day_night_time_picker/lib/state/time.dart'; -import 'package:didvan/config/theme_data.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:intl/intl.dart'; import '../../../models/day_time.dart'; import '../../../utils/date_time.dart'; @@ -163,7 +159,7 @@ class _CustomCupertinoDatePickerState extends State { } setState(() {}); - widget.onSelectedItemChanged(selectedTime!); + widget.onSelectedItemChanged(selectedTime); } /// check if the given day, month or year index is disabled @@ -183,7 +179,7 @@ class _CustomCupertinoDatePickerState extends State { @override Widget build(BuildContext context) { - Color _shadow = Theme.of(context).colorScheme.background; + Color shadow = Theme.of(context).colorScheme.background; return IgnorePointer( ignoring: widget.disable, child: Stack( @@ -232,12 +228,12 @@ class _CustomCupertinoDatePickerState extends State { begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ - _shadow.withOpacity(1), - _shadow.withOpacity(0.9), - _shadow.withOpacity(0.8), - _shadow.withOpacity(0.6), - _shadow.withOpacity(0.5), - _shadow.withOpacity(0.4), + shadow.withOpacity(1), + shadow.withOpacity(0.9), + shadow.withOpacity(0.8), + shadow.withOpacity(0.6), + shadow.withOpacity(0.5), + shadow.withOpacity(0.4), ])), )), Positioned( @@ -251,12 +247,12 @@ class _CustomCupertinoDatePickerState extends State { begin: Alignment.bottomCenter, end: Alignment.topCenter, colors: [ - _shadow.withOpacity(1), - _shadow.withOpacity(0.9), - _shadow.withOpacity(0.8), - _shadow.withOpacity(0.6), - _shadow.withOpacity(0.5), - _shadow.withOpacity(0.4), + shadow.withOpacity(1), + shadow.withOpacity(0.9), + shadow.withOpacity(0.8), + shadow.withOpacity(0.6), + shadow.withOpacity(0.5), + shadow.withOpacity(0.4), ])), )), ], @@ -285,7 +281,7 @@ class _CustomCupertinoDatePickerState extends State { itemBuilder: (context, index) => Container( height: widget.itemExtent, alignment: Alignment.center, - decoration: BoxDecoration(), + decoration: const BoxDecoration(), child: Text( '${values[index]}', style: index == selectedValueIndex diff --git a/lib/views/splash/splash.dart b/lib/views/splash/splash.dart index f14a573..f2bdfb9 100644 --- a/lib/views/splash/splash.dart +++ b/lib/views/splash/splash.dart @@ -39,7 +39,7 @@ class _SplashState extends State { Widget build(BuildContext context) { if (_isGettingThemeData) { return Container( - color: Colors.black, + color: Colors.transparent, height: double.infinity, width: double.infinity, ); @@ -56,10 +56,8 @@ class _SplashState extends State { child: Column( children: [ const SizedBox(height: 70), - Expanded( - child: SvgPicture.asset( - Assets.horizontalLogoWithText, - ), + SvgPicture.asset( + Assets.horizontalLogoWithText, ), if (!_errorOccured) Image.asset( diff --git a/lib/views/widgets/didvan/checkbox.dart b/lib/views/widgets/didvan/checkbox.dart index 3bbb8d9..2446917 100644 --- a/lib/views/widgets/didvan/checkbox.dart +++ b/lib/views/widgets/didvan/checkbox.dart @@ -1,6 +1,5 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class DidvanCheckbox extends StatefulWidget { @@ -33,8 +32,8 @@ class _DidvanCheckboxState extends State { @override Widget build(BuildContext context) { - Color? _color = widget.color; - _color ??= Theme.of(context).colorScheme.text; + Color? color = widget.color; + color ??= Theme.of(context).colorScheme.text; return GestureDetector( onTap: () { @@ -53,7 +52,7 @@ class _DidvanCheckboxState extends State { activeColor: widget.color, visualDensity: const VisualDensity(horizontal: -4, vertical: -4), - side: BorderSide(color: _color, width: 1.5), + side: BorderSide(color: color, width: 1.5), value: _value, onChanged: (value) { setState(() { @@ -62,7 +61,7 @@ class _DidvanCheckboxState extends State { widget.onChanged(_value); }, ), - ), DidvanText(widget.title,fontSize: widget.size,color: _color, ), + ), DidvanText(widget.title,fontSize: widget.size,color: color, ), ], ), ), diff --git a/lib/views/widgets/notification/notification_dynamic_dialog.dart b/lib/views/widgets/notification/notification_dynamic_dialog.dart index 4256ae5..0a9a54b 100644 --- a/lib/views/widgets/notification/notification_dynamic_dialog.dart +++ b/lib/views/widgets/notification/notification_dynamic_dialog.dart @@ -1,10 +1,9 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class NotificationDynamicDialog extends StatefulWidget { final title; final body; - const NotificationDynamicDialog({this.title, this.body}); + const NotificationDynamicDialog({super.key, this.title, this.body}); @override _NotificationDynamicDialogState createState() => _NotificationDynamicDialogState(); } diff --git a/lib/views/widgets/user_mention.dart b/lib/views/widgets/user_mention.dart index 201ff39..e4febab 100644 --- a/lib/views/widgets/user_mention.dart +++ b/lib/views/widgets/user_mention.dart @@ -1,11 +1,9 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/views/widgets/ink_wrapper.dart'; import 'package:didvan/views/widgets/skeleton_image.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import '../../config/design_config.dart'; import '../../constants/app_icons.dart'; import '../../models/users_mention.dart'; import '../comments/comments_state.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index f488f96..5e3ed2e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 3.1.4+3140 +version: 3.2.0+3200 environment: sdk: ">=2.17.0 <3.0.0"