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 5b06703..0000000 Binary files a/keystore.jks and /dev/null differ diff --git a/lib/constants/app_icons.dart b/lib/constants/app_icons.dart index e565c6a..d589fba 100644 --- a/lib/constants/app_icons.dart +++ b/lib/constants/app_icons.dart @@ -13,8 +13,10 @@ /// /// /// -import 'package:flutter/widgets.dart'; +// ignore_for_file: constant_identifier_names +/// +import 'package:flutter/widgets.dart'; class DidvanIcons { DidvanIcons._(); diff --git a/lib/main.dart b/lib/main.dart index 06c88b5..dac2c83 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,6 @@ import 'package:android_intent_plus/android_intent.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:didvan/config/theme_data.dart'; -import 'package:didvan/models/widget_response.dart'; import 'package:didvan/providers/media.dart'; import 'package:didvan/providers/theme.dart'; import 'package:didvan/providers/user.dart'; @@ -18,7 +17,6 @@ import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:get/get.dart'; import 'package:home_widget/home_widget.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -26,13 +24,12 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'models/requests/infography.dart'; import 'models/requests/news.dart'; import 'models/requests/radar.dart'; +import 'models/widget_response.dart'; final GlobalKey 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"