01-02-1403 / Rhmn / release test 2.
This commit is contained in:
parent
3c01853118
commit
c6e07bbb2e
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="Didvan"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:enableOnBackInvokedCallback="true"
|
||||
android:usesCleartextTraffic="true">
|
||||
<receiver
|
||||
android:name=".FavWidget"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,13 @@
|
|||
package com.didvan.didvanapp
|
||||
|
||||
import androidx.annotation.NonNull
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
||||
|
||||
class MainActivity: FlutterActivity() {
|
||||
@Override
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
GeneratedPluginRegistrant.registerWith(flutterEngine)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="appwidget_text">EXAMPLE</string>
|
||||
<string name="appwidget_text">Didvan</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>
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
BIN
keystore.jks
BIN
keystore.jks
Binary file not shown.
|
|
@ -13,8 +13,10 @@
|
|||
///
|
||||
///
|
||||
///
|
||||
import 'package:flutter/widgets.dart';
|
||||
// ignore_for_file: constant_identifier_names
|
||||
///
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
class DidvanIcons {
|
||||
DidvanIcons._();
|
||||
|
||||
|
|
|
|||
|
|
@ -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<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||
|
||||
@pragma('vm:entry-point')
|
||||
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();
|
||||
await Firebase.initializeApp(
|
||||
options: kIsWeb
|
||||
|
|
@ -52,9 +49,6 @@ Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
|||
),
|
||||
);
|
||||
|
||||
// LocalNotificationService.initialize();
|
||||
// LocalNotificationService.display(message);
|
||||
// LocalNotificationService.showBigPictureNotification();
|
||||
AwsomeNotificationHandler().alarm();
|
||||
AwsomeNotificationHandler().show(message);
|
||||
}
|
||||
|
|
@ -62,13 +56,11 @@ Future<void> _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<void> 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<Didvan> 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<Didvan> with WidgetsBindingObserver {
|
|||
switch (value) {
|
||||
case 'setting':
|
||||
route = Routes.favouritesStep;
|
||||
args = {"toTimer":false};
|
||||
args = {"toTimer": false};
|
||||
break;
|
||||
case 'rowfirst':
|
||||
row = 1;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class CommentData {
|
|||
bool disliked;
|
||||
bool private;
|
||||
int status;
|
||||
dynamic? mention;
|
||||
dynamic mention;
|
||||
final FeedbackData feedback;
|
||||
final UserOverview user;
|
||||
final List<Reply> replies;
|
||||
|
|
|
|||
|
|
@ -14,10 +14,10 @@ class FavoritesResponse {
|
|||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['id'] = this.id;
|
||||
data['name'] = this.name;
|
||||
data['selected'] = this.selected;
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['name'] = name;
|
||||
data['selected'] = selected;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
|
@ -31,27 +31,27 @@ class NotificationMessage {
|
|||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
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<String, dynamic> data = <String, dynamic>{};
|
||||
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<String, String> toPayload() {
|
||||
final Map<String, String> data = new Map<String, String>();
|
||||
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<String, String> data = <String, String>{};
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -14,11 +14,11 @@ class UsersMention {
|
|||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['id'] = this.id;
|
||||
data['name'] = this.name;
|
||||
data['type'] = this.type;
|
||||
data['photo'] = this.photo;
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['name'] = name;
|
||||
data['type'] = type;
|
||||
data['photo'] = photo;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ class WidgetResponse {
|
|||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = Map<String, dynamic>();
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['title'] = title;
|
||||
data['createdAt'] = createdAt;
|
||||
|
|
|
|||
|
|
@ -6,41 +6,41 @@ import '../network/request.dart';
|
|||
import '../network/request_helper.dart';
|
||||
|
||||
class HomeWidgetRepository {
|
||||
|
||||
Future<void> fetchWidget() async {
|
||||
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",
|
||||
if (RequestService.token != null && RequestService.token.isNotEmpty) {
|
||||
final service = RequestService(
|
||||
RequestHelper.widgetNews(),
|
||||
);
|
||||
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",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:awesome_notifications/awesome_notifications.dart';
|
||||
import 'package:didvan/main.dart';
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class AwsomeNotificationHandler {
|
|||
// channelGroupKey: 'basic_channel_group',
|
||||
// channelGroupName: 'Basic group')
|
||||
// ],
|
||||
debug: true);
|
||||
debug: false);
|
||||
|
||||
initialAction = await AwesomeNotifications()
|
||||
.getInitialNotificationAction(removeFromActionEvents: false);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<String> _downloadAndSaveFile(String url, String fileName) async {
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ class _PasswordInputState extends State<PasswordInput> {
|
|||
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<PasswordInput> {
|
|||
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,
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ class CommentState extends State<Comment> {
|
|||
color: Theme.of(context).colorScheme.primary,
|
||||
style: Theme.of(context).textTheme.titleSmall,
|
||||
)
|
||||
: SizedBox(),
|
||||
: const SizedBox(),
|
||||
const SizedBox(height: 8),
|
||||
if (isReply)
|
||||
DidvanText(
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<String, dynamic> pageData;
|
||||
|
|
|
|||
|
|
@ -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<String, dynamic> pageData;
|
||||
|
|
|
|||
|
|
@ -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<CustomizeCategoryCheckbox> {
|
|||
|
||||
@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<CustomizeCategoryCheckbox> {
|
|||
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, ),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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<CustomizeCategorySwitch> {
|
|||
|
||||
@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: () {
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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<String, dynamic> pageData;
|
||||
|
|
@ -71,7 +57,7 @@ class _NotificationTimeState extends State<NotificationTime> {
|
|||
padding: const EdgeInsets.all(16),
|
||||
showSliversFirst: false,
|
||||
backgroundColor: Theme.of(context).colorScheme.background,
|
||||
slivers: [],
|
||||
slivers: const [],
|
||||
children: [
|
||||
Consumer<NotificationTimeState>(
|
||||
builder: (context, state, child) => state.appState ==
|
||||
|
|
@ -83,7 +69,7 @@ class _NotificationTimeState extends State<NotificationTime> {
|
|||
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<NotificationTime> {
|
|||
.titleMedium!
|
||||
.copyWith(
|
||||
color: state.isAnytime
|
||||
? Color(0xFFC8E0F4)
|
||||
? const Color(0xFFC8E0F4)
|
||||
: Theme.of(context)
|
||||
.colorScheme
|
||||
.white),
|
||||
|
|
@ -114,7 +100,7 @@ class _NotificationTimeState extends State<NotificationTime> {
|
|||
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<NotificationTime> {
|
|||
),
|
||||
],
|
||||
)
|
||||
: SizedBox(),
|
||||
: const SizedBox(),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<CustomCupertinoDatePicker> {
|
|||
}
|
||||
|
||||
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<CustomCupertinoDatePicker> {
|
|||
|
||||
@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<CustomCupertinoDatePicker> {
|
|||
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<CustomCupertinoDatePicker> {
|
|||
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<CustomCupertinoDatePicker> {
|
|||
itemBuilder: (context, index) => Container(
|
||||
height: widget.itemExtent,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(),
|
||||
decoration: const BoxDecoration(),
|
||||
child: Text(
|
||||
'${values[index]}',
|
||||
style: index == selectedValueIndex
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class _SplashState extends State<Splash> {
|
|||
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<Splash> {
|
|||
child: Column(
|
||||
children: [
|
||||
const SizedBox(height: 70),
|
||||
Expanded(
|
||||
child: SvgPicture.asset(
|
||||
Assets.horizontalLogoWithText,
|
||||
),
|
||||
SvgPicture.asset(
|
||||
Assets.horizontalLogoWithText,
|
||||
),
|
||||
if (!_errorOccured)
|
||||
Image.asset(
|
||||
|
|
|
|||
|
|
@ -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<DidvanCheckbox> {
|
|||
|
||||
@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<DidvanCheckbox> {
|
|||
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<DidvanCheckbox> {
|
|||
widget.onChanged(_value);
|
||||
},
|
||||
),
|
||||
), DidvanText(widget.title,fontSize: widget.size,color: _color, ),
|
||||
), DidvanText(widget.title,fontSize: widget.size,color: color, ),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue