01-02-1403 / Rhmn / release test 2.

This commit is contained in:
OkaykOrhmn 2024-05-21 10:07:44 +03:30
parent 3c01853118
commit c6e07bbb2e
36 changed files with 216 additions and 276 deletions

View File

@ -52,26 +52,27 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.didvan.didvanapp" applicationId "com.didvan.didvanapp"
minSdkVersion 24 minSdkVersion 24
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 30 targetSdkVersion 30
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
} }
signingConfigs { signingConfigs {
release { release {
keyAlias keystoreProperties['keyAlias'] keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword'] keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword'] storePassword keystoreProperties['storePassword']
} }
} }
buildTypes { buildTypes {
release { release {
signingConfig signingConfigs.release signingConfig signingConfigs.release
} }
} }
lintOptions { lintOptions {
disable 'InvalidPackage' disable 'InvalidPackage'
checkReleaseBuilds false checkReleaseBuilds false
} }

View File

@ -14,6 +14,7 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="Didvan" android:label="Didvan"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:enableOnBackInvokedCallback="true"
android:usesCleartextTraffic="true"> android:usesCleartextTraffic="true">
<receiver <receiver
android:name=".FavWidget" android:name=".FavWidget"

View File

@ -1,6 +1,13 @@
package com.didvan.didvanapp package com.didvan.didvanapp
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterActivity() { class MainActivity: FlutterActivity() {
@Override
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
}
} }

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="appwidget_text">EXAMPLE</string> <string name="appwidget_text">Didvan</string>
<string name="add_widget">Add widget</string> <string name="add_widget">Add widget</string>
<string name="app_widget_description">This is an app widget description</string> <string name="app_widget_description">چشم همیشه باز مدیران</string>
</resources> </resources>

View File

@ -22,6 +22,8 @@ allprojects {
rootProject.buildDir = '../build' rootProject.buildDir = '../build'
subprojects { subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}" project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app') project.evaluationDependsOn(':app')
} }

Binary file not shown.

View File

@ -13,8 +13,10 @@
/// ///
/// ///
/// ///
import 'package:flutter/widgets.dart'; // ignore_for_file: constant_identifier_names
///
import 'package:flutter/widgets.dart';
class DidvanIcons { class DidvanIcons {
DidvanIcons._(); DidvanIcons._();

View File

@ -1,7 +1,6 @@
import 'package:android_intent_plus/android_intent.dart'; import 'package:android_intent_plus/android_intent.dart';
import 'package:bot_toast/bot_toast.dart'; import 'package:bot_toast/bot_toast.dart';
import 'package:didvan/config/theme_data.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/media.dart';
import 'package:didvan/providers/theme.dart'; import 'package:didvan/providers/theme.dart';
import 'package:didvan/providers/user.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/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:get/get.dart';
import 'package:home_widget/home_widget.dart'; import 'package:home_widget/home_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher_string.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/infography.dart';
import 'models/requests/news.dart'; import 'models/requests/news.dart';
import 'models/requests/radar.dart'; import 'models/requests/radar.dart';
import 'models/widget_response.dart';
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
@pragma('vm:entry-point') @pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { Future<void> _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(); WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp( await Firebase.initializeApp(
options: kIsWeb options: kIsWeb
@ -52,9 +49,6 @@ Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
), ),
); );
// LocalNotificationService.initialize();
// LocalNotificationService.display(message);
// LocalNotificationService.showBigPictureNotification();
AwsomeNotificationHandler().alarm(); AwsomeNotificationHandler().alarm();
AwsomeNotificationHandler().show(message); AwsomeNotificationHandler().show(message);
} }
@ -62,13 +56,11 @@ Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
void main() async { void main() async {
try { try {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
HomeWidget.registerBackgroundCallback(backgroundCallback);
// HomeWidget.registerInteractivityCallback(backgroundCallback);
HomeWidget.widgetClicked.listen((Uri? uri) {});
FirebaseNotificationHandler().initial(); FirebaseNotificationHandler().initial();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
HomeWidget.registerInteractivityCallback(backgroundCallback);
} catch (e) { } catch (e) {
print(e.toString()); debugPrintStack();
} }
runApp(const Didvan()); runApp(const Didvan());
@ -80,13 +72,10 @@ Future<void> backgroundCallback(Uri? uri) async {
package: 'com.didvan.didvanapp', package: 'com.didvan.didvanapp',
componentName: 'com.didvan.didvanapp.MainActivity', componentName: 'com.didvan.didvanapp.MainActivity',
); );
await intent.launch(); await intent.launch();
HomeWidget.saveWidgetData("uri", uri!.host); HomeWidget.saveWidgetData("uri", uri!.host);
} }
class Didvan extends StatefulWidget { class Didvan extends StatefulWidget {
const Didvan({Key? key}) : super(key: key); const Didvan({Key? key}) : super(key: key);
@ -99,12 +88,12 @@ class _DidvanState extends State<Didvan> with WidgetsBindingObserver {
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance?.addObserver(this); WidgetsBinding.instance.addObserver(this);
} }
@override @override
void dispose() { void dispose() {
WidgetsBinding.instance?.removeObserver(this); WidgetsBinding.instance.removeObserver(this);
super.dispose(); super.dispose();
} }
@ -126,7 +115,7 @@ class _DidvanState extends State<Didvan> with WidgetsBindingObserver {
switch (value) { switch (value) {
case 'setting': case 'setting':
route = Routes.favouritesStep; route = Routes.favouritesStep;
args = {"toTimer":false}; args = {"toTimer": false};
break; break;
case 'rowfirst': case 'rowfirst':
row = 1; row = 1;

View File

@ -11,7 +11,7 @@ class CommentData {
bool disliked; bool disliked;
bool private; bool private;
int status; int status;
dynamic? mention; dynamic mention;
final FeedbackData feedback; final FeedbackData feedback;
final UserOverview user; final UserOverview user;
final List<Reply> replies; final List<Reply> replies;

View File

@ -14,10 +14,10 @@ class FavoritesResponse {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['name'] = this.name; data['name'] = name;
data['selected'] = this.selected; data['selected'] = selected;
return data; return data;
} }
} }

View File

@ -31,27 +31,27 @@ class NotificationMessage {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['notificationType'] = this.notificationType; data['notificationType'] = notificationType;
data['title'] = this.title; data['title'] = title;
data['body'] = this.body; data['body'] = body;
data['id'] = this.id; data['id'] = id;
data['type'] = this.type; data['type'] = type;
data['link'] = this.link; data['link'] = link;
data['image'] = this.image; data['image'] = image;
data['photo'] = this.photo; data['photo'] = photo;
return data; return data;
} }
Map<String, String> toPayload() { Map<String, String> toPayload() {
final Map<String, String> data = new Map<String, String>(); final Map<String, String> data = <String, String>{};
data['notificationType'] = this.notificationType!; data['notificationType'] = notificationType!;
data['title'] = this.title!; data['title'] = title!;
data['body'] = this.body!; data['body'] = body!;
data['id'] = this.id!; data['id'] = id!;
data['type'] = this.type!; data['type'] = type!;
data['link'] = this.link!; data['link'] = link!;
data['image'] = this.image!; data['image'] = image!;
data['photo'] = this.photo!; data['photo'] = photo!;
return data; return data;
} }
} }

View File

@ -14,11 +14,11 @@ class UsersMention {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['name'] = this.name; data['name'] = name;
data['type'] = this.type; data['type'] = type;
data['photo'] = this.photo; data['photo'] = photo;
return data; return data;
} }
} }

View File

@ -27,7 +27,7 @@ class WidgetResponse {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id; data['id'] = id;
data['title'] = title; data['title'] = title;
data['createdAt'] = createdAt; data['createdAt'] = createdAt;

View File

@ -6,41 +6,41 @@ import '../network/request.dart';
import '../network/request_helper.dart'; import '../network/request_helper.dart';
class HomeWidgetRepository { class HomeWidgetRepository {
Future<void> fetchWidget() async { Future<void> fetchWidget() async {
final service = RequestService( if (RequestService.token != null && RequestService.token.isNotEmpty) {
RequestHelper.widgetNews(), final service = RequestService(
); RequestHelper.widgetNews(),
await service.httpGet();
List<WidgetResponse> 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",
); );
await service.httpGet();
List<WidgetResponse> 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",
);
}
} }
} }
} }

View File

@ -1,4 +1,3 @@
import 'dart:convert';
import 'package:awesome_notifications/awesome_notifications.dart'; import 'package:awesome_notifications/awesome_notifications.dart';
import 'package:didvan/main.dart'; import 'package:didvan/main.dart';

View File

@ -37,7 +37,7 @@ class AwsomeNotificationHandler {
// channelGroupKey: 'basic_channel_group', // channelGroupKey: 'basic_channel_group',
// channelGroupName: 'Basic group') // channelGroupName: 'Basic group')
// ], // ],
debug: true); debug: false);
initialAction = await AwesomeNotifications() initialAction = await AwesomeNotifications()
.getInitialNotificationAction(removeFromActionEvents: false); .getInitialNotificationAction(removeFromActionEvents: false);

View File

@ -60,48 +60,46 @@ class FirebaseNotificationHandler {
// Listening for incoming messages while the app is in the foreground // Listening for incoming messages while the app is in the foreground
FirebaseMessaging.onMessage.listen((RemoteMessage message) { FirebaseMessaging.onMessage.listen((RemoteMessage message) {
if (message.data != null) {
/* if (message.notification!.title != null && /* if (message.notification!.title != null &&
message.notification!.body != null) { message.notification!.body != null) {
final notificationData = message.data; final notificationData = message.data;
final screen = notificationData['screen']; final screen = notificationData['screen'];
// Showing an alert dialog when a notification is received (Foreground state) // Showing an alert dialog when a notification is received (Foreground state)
// showDialog( // showDialog(
// context: context, // context: context,
// barrierDismissible: false, // barrierDismissible: false,
// builder: (BuildContext context) { // builder: (BuildContext context) {
// return WillPopScope( // return WillPopScope(
// onWillPop: () async => false, // onWillPop: () async => false,
// child: AlertDialog( // child: AlertDialog(
// title: Text(message.notification!.title!), // title: Text(message.notification!.title!),
// content: Text(message.notification!.body!), // content: Text(message.notification!.body!),
// actions: [ // actions: [
// if (notificationData.containsKey('screen')) // if (notificationData.containsKey('screen'))
// TextButton( // TextButton(
// onPressed: () { // onPressed: () {
// Navigator.pop(context); // Navigator.pop(context);
// Navigator.of(context).pushNamed(screen); // Navigator.of(context).pushNamed(screen);
// }, // },
// child: const Text('Open Screen'), // child: const Text('Open Screen'),
// ), // ),
// TextButton( // TextButton(
// onPressed: () => Navigator.of(context).pop(), // onPressed: () => Navigator.of(context).pop(),
// child: const Text('Dismiss'), // child: const Text('Dismiss'),
// ), // ),
// ], // ],
// ), // ),
// ); // );
// }, // },
// ); // );
}*/ }*/
// LocalNotificationService.initialize(); // LocalNotificationService.initialize();
// LocalNotificationService.showBigPictureNotification(); // LocalNotificationService.showBigPictureNotification();
// LocalNotificationService.display(message); // LocalNotificationService.display(message);
AwsomeNotificationHandler().alarm(); AwsomeNotificationHandler().alarm();
AwsomeNotificationHandler().show(message); AwsomeNotificationHandler().show(message);
} });
});
// Handling the initial message received when the app is launched from dead (killed state) // 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 // When the app is killed and a new notification arrives when user clicks on it

View File

@ -6,7 +6,6 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import '../../../constants/assets.dart';
import '../../../models/notification_message.dart'; import '../../../models/notification_message.dart';
import '../../../views/widgets/notification/notification_dynamic_dialog.dart'; import '../../../views/widgets/notification/notification_dynamic_dialog.dart';
@ -35,7 +34,7 @@ class LocalNotificationService {
final id = DateTime.now().millisecondsSinceEpoch ~/ 1000; final id = DateTime.now().millisecondsSinceEpoch ~/ 1000;
final BigPictureStyleInformation bigPictureStyleInformation = final BigPictureStyleInformation bigPictureStyleInformation =
BigPictureStyleInformation( BigPictureStyleInformation(
FilePathAndroidBitmap( const FilePathAndroidBitmap(
"lib/assets/aaaa.jpg"), "lib/assets/aaaa.jpg"),
contentTitle: NotificationMessage.fromJson(message.data).title, contentTitle: NotificationMessage.fromJson(message.data).title,
htmlFormatContentTitle: true, htmlFormatContentTitle: true,
@ -45,7 +44,7 @@ class LocalNotificationService {
largeIcon: const FilePathAndroidBitmap( largeIcon: const FilePathAndroidBitmap(
"lib/assets/aaaa.jpg")); "lib/assets/aaaa.jpg"));
NotificationDetails notificationDetails = NotificationDetails( NotificationDetails notificationDetails = const NotificationDetails(
android: AndroidNotificationDetails("Channel Id", "Main Channel", android: AndroidNotificationDetails("Channel Id", "Main Channel",
groupKey: "gfg", groupKey: "gfg",
color: Colors.white, color: Colors.white,
@ -76,19 +75,17 @@ class LocalNotificationService {
print('Got a message in the foreground!'); print('Got a message in the foreground!');
print('Message data: ${message.data}'); print('Message data: ${message.data}');
if (message.data != null) { print(
print( 'Message also contained a notification: so it will pop up ${message.notification!.body}');
'Message also contained a notification: so it will pop up ${message.notification!.body}'); showDialog(
showDialog( context: context,
context: context, // context: navigatorKey!.currentContext!,
// context: navigatorKey!.currentContext!, builder: ((BuildContext context) {
builder: ((BuildContext context) { return NotificationDynamicDialog(
return NotificationDynamicDialog( title: message.notification!.title,
title: message.notification!.title, body: message.notification!.body);
body: message.notification!.body); }));
})); });
}
});
} }
static Future<String> _downloadAndSaveFile(String url, String fileName) async { static Future<String> _downloadAndSaveFile(String url, String fileName) async {

View File

@ -8,12 +8,12 @@ void showNotificationAndroid(String title, String value) async {
priority: Priority.high, priority: Priority.high,
ticker: 'ticker'); ticker: 'ticker');
int notification_id = 1; int notificationId = 1;
const NotificationDetails notificationDetails = const NotificationDetails notificationDetails =
NotificationDetails(android: androidNotificationDetails); NotificationDetails(android: androidNotificationDetails);
await FlutterLocalNotificationsPlugin().show( await FlutterLocalNotificationsPlugin().show(
notification_id, title, value, notificationDetails, notificationId, title, value, notificationDetails,
payload: 'Not present'); payload: 'Not present');
} }
@ -29,12 +29,12 @@ void showNotificationIos(String title, String value) async {
//Secondary description (only from iOS 10 onwards) //Secondary description (only from iOS 10 onwards)
threadIdentifier: value); threadIdentifier: value);
int notification_id = 1; int notificationId = 1;
NotificationDetails platformChannelSpecifics = NotificationDetails platformChannelSpecifics =
NotificationDetails(iOS: iOSPlatformChannelSpecifics); NotificationDetails(iOS: iOSPlatformChannelSpecifics);
await FlutterLocalNotificationsPlugin().show( await FlutterLocalNotificationsPlugin().show(
notification_id, title, value, platformChannelSpecifics, notificationId, title, value, platformChannelSpecifics,
payload: 'Not present'); payload: 'Not present');
} }

View File

@ -9,21 +9,21 @@ class DateTimeUtils {
static DayTime handleDayTime(String dayTime) { static DayTime handleDayTime(String dayTime) {
DateFormat format = DateFormat("HH:mm"); DateFormat format = DateFormat("HH:mm");
DateTime dateTime = format.parse(dayTime); DateTime dateTime = format.parse(dayTime);
int _selectedTimeHour = dateTime.hour; int selectedTimeHour = dateTime.hour;
String _selectedTimeMinute = dateTime.minute.toString(); String selectedTimeMinute = dateTime.minute.toString();
Meridiem _selectedMeridiem = Meridiem.AM; Meridiem selectedMeridiem = Meridiem.AM;
if (_selectedTimeHour > 12) { if (selectedTimeHour > 12) {
_selectedTimeHour -= 12; selectedTimeHour -= 12;
_selectedMeridiem = Meridiem.PM; selectedMeridiem = Meridiem.PM;
} else if (_selectedTimeHour == 0) { } else if (selectedTimeHour == 0) {
_selectedTimeHour = 24; selectedTimeHour = 24;
_selectedMeridiem = Meridiem.AM; selectedMeridiem = Meridiem.AM;
} }
return DayTime( return DayTime(
hour: _selectedTimeHour.toString(), hour: selectedTimeHour.toString(),
minute: _selectedTimeMinute, minute: selectedTimeMinute,
meridiem: _selectedMeridiem); meridiem: selectedMeridiem);
} }
static String handleDayTimeReverse(DayTime dayTime) { static String handleDayTimeReverse(DayTime dayTime) {

View File

@ -117,7 +117,7 @@ class _PasswordInputState extends State<PasswordInput> {
children: [ children: [
InkWrapper( InkWrapper(
onPressed:Navigator.of(ActionSheetUtils.context).pop, onPressed:Navigator.of(ActionSheetUtils.context).pop,
child: Icon( child: const Icon(
DidvanIcons.close_solid, DidvanIcons.close_solid,
size: 24, size: 24,
), ),
@ -127,8 +127,8 @@ class _PasswordInputState extends State<PasswordInput> {
style: Theme.of(context).textTheme.displaySmall, style: Theme.of(context).textTheme.displaySmall,
color: Theme.of(context).colorScheme.text, color: Theme.of(context).colorScheme.text,
), ),
InkWrapper( const InkWrapper(
child: const Icon( child: Icon(
DidvanIcons.close_regular, DidvanIcons.close_regular,
size: 24, size: 24,
color: Colors.transparent, color: Colors.transparent,

View File

@ -116,7 +116,7 @@ class CommentState extends State<Comment> {
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
style: Theme.of(context).textTheme.titleSmall, style: Theme.of(context).textTheme.titleSmall,
) )
: SizedBox(), : const SizedBox(),
const SizedBox(height: 8), const SizedBox(height: 8),
if (isReply) if (isReply)
DidvanText( DidvanText(

View File

@ -35,11 +35,11 @@ class CustomizeCategoryState extends CoreProvier {
faves.add(FavoritesResponse.fromJson(favourites[i])); faves.add(FavoritesResponse.fromJson(favourites[i]));
} }
selectedFavIds.clear(); selectedFavIds.clear();
faves.forEach((element) { for (var element in faves) {
if (element.selected!) { if (element.selected!) {
selectedFavIds.add(element.id!); selectedFavIds.add(element.id!);
} }
}); }
appState = AppState.idle; appState = AppState.idle;
} else { } else {
@ -62,11 +62,11 @@ class CustomizeCategoryState extends CoreProvier {
notifs.add(FavoritesResponse.fromJson(notificationsStatuses[i])); notifs.add(FavoritesResponse.fromJson(notificationsStatuses[i]));
} }
selectedNotifIds.clear(); selectedNotifIds.clear();
notifs.forEach((element) { for (var element in notifs) {
if (element.selected!) { if (element.selected!) {
selectedNotifIds.add(element.id!); selectedNotifIds.add(element.id!);
} }
}); }
appState = AppState.idle; appState = AppState.idle;
} else { } else {
appState = AppState.failed; appState = AppState.failed;

View File

@ -1,13 +1,10 @@
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/models/enums.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/models/view/app_bar_data.dart';
import 'package:didvan/views/customize_category/customize_category_state.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/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/scaffold.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -17,7 +14,6 @@ import '../widgets/didvan/button.dart';
import '../widgets/shimmer_placeholder.dart'; import '../widgets/shimmer_placeholder.dart';
import '../widgets/state_handlers/empty_state.dart'; import '../widgets/state_handlers/empty_state.dart';
import '../widgets/state_handlers/sliver_state_handler.dart'; import '../widgets/state_handlers/sliver_state_handler.dart';
import '../widgets/user_mention.dart';
class FavoritesStep extends StatefulWidget { class FavoritesStep extends StatefulWidget {
final Map<String, dynamic> pageData; final Map<String, dynamic> pageData;

View File

@ -1,14 +1,10 @@
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/models/enums.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/models/view/app_bar_data.dart';
import 'package:didvan/views/customize_category/customize_category_state.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/scaffold.dart';
import 'package:didvan/views/widgets/didvan/switch.dart'; import 'package:didvan/views/widgets/didvan/switch.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -18,7 +14,6 @@ import '../widgets/didvan/button.dart';
import '../widgets/shimmer_placeholder.dart'; import '../widgets/shimmer_placeholder.dart';
import '../widgets/state_handlers/empty_state.dart'; import '../widgets/state_handlers/empty_state.dart';
import '../widgets/state_handlers/sliver_state_handler.dart'; import '../widgets/state_handlers/sliver_state_handler.dart';
import '../widgets/user_mention.dart';
class NotificationStatusStep extends StatefulWidget { class NotificationStatusStep extends StatefulWidget {
final Map<String, dynamic> pageData; final Map<String, dynamic> pageData;

View File

@ -2,7 +2,6 @@ import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/animated_visibility.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class CustomizeCategoryCheckbox extends StatefulWidget { class CustomizeCategoryCheckbox extends StatefulWidget {
@ -36,11 +35,11 @@ class _CustomizeCategoryCheckboxState extends State<CustomizeCategoryCheckbox> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Color? _checkColor = widget.checkColor; Color? checkColor = widget.checkColor;
_checkColor ??= Theme.of(context).colorScheme.text; checkColor ??= Theme.of(context).colorScheme.text;
Color? _textColor = widget.textColor; Color? textColor = widget.textColor;
_textColor ??= Theme.of(context).colorScheme.text; textColor ??= Theme.of(context).colorScheme.text;
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
@ -61,17 +60,17 @@ class _CustomizeCategoryCheckboxState extends State<CustomizeCategoryCheckbox> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.transparent, color: Colors.transparent,
borderRadius: BorderRadius.circular(6), 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( child: AnimatedVisibility(
isVisible: _value, isVisible: _value,
duration: DesignConfig.mediumAnimationDuration, 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, ),
], ],
), ),
), ),

View File

@ -1,9 +1,5 @@
import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.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/switch.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class CustomizeCategorySwitch extends StatefulWidget { class CustomizeCategorySwitch extends StatefulWidget {
@ -40,8 +36,8 @@ class _CustomizeCategorySwitchState extends State<CustomizeCategorySwitch> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Color? _color = widget.color; Color? color = widget.color;
_color ??= Theme.of(context).colorScheme.caption; color ??= Theme.of(context).colorScheme.caption;
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {

View File

@ -1,27 +1,15 @@
import 'package:didvan/config/design_config.dart'; 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/providers/theme.dart';
import 'package:didvan/routes/routes.dart';
import 'package:didvan/services/app_initalizer.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/bookmarks/bookmarks.dart';
import 'package:didvan/views/home/categories/categories_page.dart'; import 'package:didvan/views/home/categories/categories_page.dart';
import 'package:didvan/views/home/main/main_page.dart'; import 'package:didvan/views/home/main/main_page.dart';
import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/views/home/home_state.dart';
import 'package:didvan/views/home/new_statistic/new_statistic.dart'; import 'package:didvan/views/home/new_statistic/new_statistic.dart';
import 'package:didvan/views/home/search/search.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/logo_app_bar.dart';
import 'package:didvan/views/widgets/didvan/bnb.dart'; import 'package:didvan/views/widgets/didvan/bnb.dart';
import 'package:flutter/material.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 'package:provider/provider.dart';
import '../../services/app_home_widget/home_widget_repository.dart'; import '../../services/app_home_widget/home_widget_repository.dart';

View File

@ -1,29 +1,15 @@
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/models/day_time.dart';
import 'package:didvan/models/enums.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/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/notification_time_state.dart';
import 'package:didvan/views/notification_time/widgets/custom_cupertino_date_picker.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/scaffold.dart';
import 'package:didvan/views/widgets/didvan/switch.dart'; import 'package:didvan/views/widgets/didvan/switch.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.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 'package:provider/provider.dart';
import '../../constants/assets.dart';
import '../widgets/date_picker_button.dart';
import '../widgets/didvan/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 { class NotificationTime extends StatefulWidget {
final Map<String, dynamic> pageData; final Map<String, dynamic> pageData;
@ -71,7 +57,7 @@ class _NotificationTimeState extends State<NotificationTime> {
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
showSliversFirst: false, showSliversFirst: false,
backgroundColor: Theme.of(context).colorScheme.background, backgroundColor: Theme.of(context).colorScheme.background,
slivers: [], slivers: const [],
children: [ children: [
Consumer<NotificationTimeState>( Consumer<NotificationTimeState>(
builder: (context, state, child) => state.appState == builder: (context, state, child) => state.appState ==
@ -83,7 +69,7 @@ class _NotificationTimeState extends State<NotificationTime> {
style: Theme.of(context).textTheme.bodyMedium, style: Theme.of(context).textTheme.bodyMedium,
), ),
Container( Container(
margin: EdgeInsets.all(24), margin: const EdgeInsets.all(24),
height: 210, height: 210,
child: CustomCupertinoDatePicker( child: CustomCupertinoDatePicker(
disable: state.isAnytime, disable: state.isAnytime,
@ -94,7 +80,7 @@ class _NotificationTimeState extends State<NotificationTime> {
.titleMedium! .titleMedium!
.copyWith( .copyWith(
color: state.isAnytime color: state.isAnytime
? Color(0xFFC8E0F4) ? const Color(0xFFC8E0F4)
: Theme.of(context) : Theme.of(context)
.colorScheme .colorScheme
.white), .white),
@ -114,7 +100,7 @@ class _NotificationTimeState extends State<NotificationTime> {
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 16), padding: const EdgeInsets.symmetric(horizontal: 16),
child: Container( child: Container(
padding: EdgeInsets.all(16), padding: const EdgeInsets.all(16),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
border: Border.all( border: Border.all(
@ -133,7 +119,7 @@ class _NotificationTimeState extends State<NotificationTime> {
), ),
], ],
) )
: SizedBox(), : const SizedBox(),
) )
], ],
), ),

View File

@ -1,20 +1,14 @@
import 'package:didvan/main.dart';
import 'package:didvan/models/enums.dart'; import 'package:didvan/models/enums.dart';
import 'package:didvan/providers/core.dart'; import 'package:didvan/providers/core.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import '../../models/day_time.dart'; import '../../models/day_time.dart';
import '../../models/view/alert_data.dart'; import '../../models/view/alert_data.dart';
import '../../routes/routes.dart';
import '../../services/network/request.dart'; import '../../services/network/request.dart';
import '../../services/network/request_helper.dart'; import '../../services/network/request_helper.dart';
import '../../utils/action_sheet.dart'; import '../../utils/action_sheet.dart';
import '../../utils/date_time.dart'; import '../../utils/date_time.dart';
import '../profile/general_settings/settings_state.dart';
class NotificationTimeState extends CoreProvier { class NotificationTimeState extends CoreProvier {
late DayTime selectedTime; late DayTime selectedTime;

View File

@ -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/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import '../../../models/day_time.dart'; import '../../../models/day_time.dart';
import '../../../utils/date_time.dart'; import '../../../utils/date_time.dart';
@ -163,7 +159,7 @@ class _CustomCupertinoDatePickerState extends State<CustomCupertinoDatePicker> {
} }
setState(() {}); setState(() {});
widget.onSelectedItemChanged(selectedTime!); widget.onSelectedItemChanged(selectedTime);
} }
/// check if the given day, month or year index is disabled /// check if the given day, month or year index is disabled
@ -183,7 +179,7 @@ class _CustomCupertinoDatePickerState extends State<CustomCupertinoDatePicker> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Color _shadow = Theme.of(context).colorScheme.background; Color shadow = Theme.of(context).colorScheme.background;
return IgnorePointer( return IgnorePointer(
ignoring: widget.disable, ignoring: widget.disable,
child: Stack( child: Stack(
@ -232,12 +228,12 @@ class _CustomCupertinoDatePickerState extends State<CustomCupertinoDatePicker> {
begin: Alignment.topCenter, begin: Alignment.topCenter,
end: Alignment.bottomCenter, end: Alignment.bottomCenter,
colors: [ colors: [
_shadow.withOpacity(1), shadow.withOpacity(1),
_shadow.withOpacity(0.9), shadow.withOpacity(0.9),
_shadow.withOpacity(0.8), shadow.withOpacity(0.8),
_shadow.withOpacity(0.6), shadow.withOpacity(0.6),
_shadow.withOpacity(0.5), shadow.withOpacity(0.5),
_shadow.withOpacity(0.4), shadow.withOpacity(0.4),
])), ])),
)), )),
Positioned( Positioned(
@ -251,12 +247,12 @@ class _CustomCupertinoDatePickerState extends State<CustomCupertinoDatePicker> {
begin: Alignment.bottomCenter, begin: Alignment.bottomCenter,
end: Alignment.topCenter, end: Alignment.topCenter,
colors: [ colors: [
_shadow.withOpacity(1), shadow.withOpacity(1),
_shadow.withOpacity(0.9), shadow.withOpacity(0.9),
_shadow.withOpacity(0.8), shadow.withOpacity(0.8),
_shadow.withOpacity(0.6), shadow.withOpacity(0.6),
_shadow.withOpacity(0.5), shadow.withOpacity(0.5),
_shadow.withOpacity(0.4), shadow.withOpacity(0.4),
])), ])),
)), )),
], ],
@ -285,7 +281,7 @@ class _CustomCupertinoDatePickerState extends State<CustomCupertinoDatePicker> {
itemBuilder: (context, index) => Container( itemBuilder: (context, index) => Container(
height: widget.itemExtent, height: widget.itemExtent,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration(), decoration: const BoxDecoration(),
child: Text( child: Text(
'${values[index]}', '${values[index]}',
style: index == selectedValueIndex style: index == selectedValueIndex

View File

@ -39,7 +39,7 @@ class _SplashState extends State<Splash> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (_isGettingThemeData) { if (_isGettingThemeData) {
return Container( return Container(
color: Colors.black, color: Colors.transparent,
height: double.infinity, height: double.infinity,
width: double.infinity, width: double.infinity,
); );
@ -56,10 +56,8 @@ class _SplashState extends State<Splash> {
child: Column( child: Column(
children: [ children: [
const SizedBox(height: 70), const SizedBox(height: 70),
Expanded( SvgPicture.asset(
child: SvgPicture.asset( Assets.horizontalLogoWithText,
Assets.horizontalLogoWithText,
),
), ),
if (!_errorOccured) if (!_errorOccured)
Image.asset( Image.asset(

View File

@ -1,6 +1,5 @@
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class DidvanCheckbox extends StatefulWidget { class DidvanCheckbox extends StatefulWidget {
@ -33,8 +32,8 @@ class _DidvanCheckboxState extends State<DidvanCheckbox> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Color? _color = widget.color; Color? color = widget.color;
_color ??= Theme.of(context).colorScheme.text; color ??= Theme.of(context).colorScheme.text;
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
@ -53,7 +52,7 @@ class _DidvanCheckboxState extends State<DidvanCheckbox> {
activeColor: widget.color, activeColor: widget.color,
visualDensity: const VisualDensity(horizontal: -4, vertical: -4), visualDensity: const VisualDensity(horizontal: -4, vertical: -4),
side: BorderSide(color: _color, width: 1.5), side: BorderSide(color: color, width: 1.5),
value: _value, value: _value,
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
@ -62,7 +61,7 @@ class _DidvanCheckboxState extends State<DidvanCheckbox> {
widget.onChanged(_value); widget.onChanged(_value);
}, },
), ),
), DidvanText(widget.title,fontSize: widget.size,color: _color, ), ), DidvanText(widget.title,fontSize: widget.size,color: color, ),
], ],
), ),
), ),

View File

@ -1,10 +1,9 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class NotificationDynamicDialog extends StatefulWidget { class NotificationDynamicDialog extends StatefulWidget {
final title; final title;
final body; final body;
const NotificationDynamicDialog({this.title, this.body}); const NotificationDynamicDialog({super.key, this.title, this.body});
@override @override
_NotificationDynamicDialogState createState() => _NotificationDynamicDialogState(); _NotificationDynamicDialogState createState() => _NotificationDynamicDialogState();
} }

View File

@ -1,11 +1,9 @@
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/views/widgets/ink_wrapper.dart'; import 'package:didvan/views/widgets/ink_wrapper.dart';
import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:didvan/views/widgets/skeleton_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../config/design_config.dart';
import '../../constants/app_icons.dart'; import '../../constants/app_icons.dart';
import '../../models/users_mention.dart'; import '../../models/users_mention.dart';
import '../comments/comments_state.dart'; import '../comments/comments_state.dart';

View File

@ -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. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at # Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 3.1.4+3140 version: 3.2.0+3200
environment: environment:
sdk: ">=2.17.0 <3.0.0" sdk: ">=2.17.0 <3.0.0"