TF-1202: Config Podfile for FCM
This commit is contained in:
@@ -22,7 +22,6 @@ if (flutterVersionName == null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'com.google.gms.google-services'
|
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,11 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<provider android:authorities="${applicationId}.firebaseinitprovider"
|
||||||
|
android:name="com.google.firebase.provider.FirebaseInitProvider"
|
||||||
|
android:exported="false"
|
||||||
|
tools:node="remove"/>
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
|
android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
|
||||||
android:authorities="${applicationId}.flutter_downloader.provider"
|
android:authorities="${applicationId}.flutter_downloader.provider"
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
# Uncomment this line to define a global platform for your project
|
# Uncomment this line to define a global platform for your project
|
||||||
# platform :ios, '9.0'
|
platform :ios, '11.0'
|
||||||
|
|
||||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|||||||
+86
-1
@@ -47,6 +47,38 @@ PODS:
|
|||||||
- file_picker (0.0.1):
|
- file_picker (0.0.1):
|
||||||
- DKImagePickerController/PhotoGallery
|
- DKImagePickerController/PhotoGallery
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- Firebase/CoreOnly (10.1.0):
|
||||||
|
- FirebaseCore (= 10.1.0)
|
||||||
|
- Firebase/Messaging (10.1.0):
|
||||||
|
- Firebase/CoreOnly
|
||||||
|
- FirebaseMessaging (~> 10.1.0)
|
||||||
|
- firebase_core (2.2.0):
|
||||||
|
- Firebase/CoreOnly (= 10.1.0)
|
||||||
|
- Flutter
|
||||||
|
- firebase_messaging (14.1.0):
|
||||||
|
- Firebase/Messaging (= 10.1.0)
|
||||||
|
- firebase_core
|
||||||
|
- Flutter
|
||||||
|
- FirebaseCore (10.1.0):
|
||||||
|
- FirebaseCoreInternal (~> 10.0)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GoogleUtilities/Logger (~> 7.8)
|
||||||
|
- FirebaseCoreInternal (10.2.0):
|
||||||
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
|
- FirebaseInstallations (10.2.0):
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
|
- PromisesObjC (~> 2.1)
|
||||||
|
- FirebaseMessaging (10.1.0):
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- FirebaseInstallations (~> 10.0)
|
||||||
|
- GoogleDataTransport (~> 9.2)
|
||||||
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GoogleUtilities/Reachability (~> 7.8)
|
||||||
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- fk_user_agent (2.0.0):
|
- fk_user_agent (2.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
@@ -77,6 +109,27 @@ PODS:
|
|||||||
- FMDB (2.7.5):
|
- FMDB (2.7.5):
|
||||||
- FMDB/standard (= 2.7.5)
|
- FMDB/standard (= 2.7.5)
|
||||||
- FMDB/standard (2.7.5)
|
- FMDB/standard (2.7.5)
|
||||||
|
- GoogleDataTransport (9.2.0):
|
||||||
|
- GoogleUtilities/Environment (~> 7.7)
|
||||||
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
|
- PromisesObjC (< 3.0, >= 1.2)
|
||||||
|
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
|
||||||
|
- GoogleUtilities/Environment
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- GoogleUtilities/Network
|
||||||
|
- GoogleUtilities/Environment (7.10.0):
|
||||||
|
- PromisesObjC (< 3.0, >= 1.2)
|
||||||
|
- GoogleUtilities/Logger (7.10.0):
|
||||||
|
- GoogleUtilities/Environment
|
||||||
|
- GoogleUtilities/Network (7.10.0):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- "GoogleUtilities/NSData+zlib"
|
||||||
|
- GoogleUtilities/Reachability
|
||||||
|
- "GoogleUtilities/NSData+zlib (7.10.0)"
|
||||||
|
- GoogleUtilities/Reachability (7.10.0):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- GoogleUtilities/UserDefaults (7.10.0):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
- libwebp (1.2.3):
|
- libwebp (1.2.3):
|
||||||
- libwebp/demux (= 1.2.3)
|
- libwebp/demux (= 1.2.3)
|
||||||
- libwebp/mux (= 1.2.3)
|
- libwebp/mux (= 1.2.3)
|
||||||
@@ -89,6 +142,11 @@ PODS:
|
|||||||
- Mantle (2.2.0):
|
- Mantle (2.2.0):
|
||||||
- Mantle/extobjc (= 2.2.0)
|
- Mantle/extobjc (= 2.2.0)
|
||||||
- Mantle/extobjc (2.2.0)
|
- Mantle/extobjc (2.2.0)
|
||||||
|
- nanopb (2.30909.0):
|
||||||
|
- nanopb/decode (= 2.30909.0)
|
||||||
|
- nanopb/encode (= 2.30909.0)
|
||||||
|
- nanopb/decode (2.30909.0)
|
||||||
|
- nanopb/encode (2.30909.0)
|
||||||
- OrderedSet (5.0.0)
|
- OrderedSet (5.0.0)
|
||||||
- package_info_plus (0.4.5):
|
- package_info_plus (0.4.5):
|
||||||
- Flutter
|
- Flutter
|
||||||
@@ -96,6 +154,7 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- permission_handler_apple (9.0.4):
|
- permission_handler_apple (9.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- PromisesObjC (2.1.1)
|
||||||
- ReachabilitySwift (5.0.0)
|
- ReachabilitySwift (5.0.0)
|
||||||
- receive_sharing_intent (0.0.1):
|
- receive_sharing_intent (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@@ -125,6 +184,8 @@ DEPENDENCIES:
|
|||||||
- contacts_service (from `.symlinks/plugins/contacts_service/ios`)
|
- contacts_service (from `.symlinks/plugins/contacts_service/ios`)
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||||
|
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
||||||
|
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
||||||
- fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`)
|
- fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_appauth (from `.symlinks/plugins/flutter_appauth/ios`)
|
- flutter_appauth (from `.symlinks/plugins/flutter_appauth/ios`)
|
||||||
@@ -149,10 +210,19 @@ SPEC REPOS:
|
|||||||
- AppAuth
|
- AppAuth
|
||||||
- DKImagePickerController
|
- DKImagePickerController
|
||||||
- DKPhotoGallery
|
- DKPhotoGallery
|
||||||
|
- Firebase
|
||||||
|
- FirebaseCore
|
||||||
|
- FirebaseCoreInternal
|
||||||
|
- FirebaseInstallations
|
||||||
|
- FirebaseMessaging
|
||||||
- FMDB
|
- FMDB
|
||||||
|
- GoogleDataTransport
|
||||||
|
- GoogleUtilities
|
||||||
- libwebp
|
- libwebp
|
||||||
- Mantle
|
- Mantle
|
||||||
|
- nanopb
|
||||||
- OrderedSet
|
- OrderedSet
|
||||||
|
- PromisesObjC
|
||||||
- ReachabilitySwift
|
- ReachabilitySwift
|
||||||
- SDWebImage
|
- SDWebImage
|
||||||
- SDWebImageWebPCoder
|
- SDWebImageWebPCoder
|
||||||
@@ -170,6 +240,10 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
file_picker:
|
file_picker:
|
||||||
:path: ".symlinks/plugins/file_picker/ios"
|
:path: ".symlinks/plugins/file_picker/ios"
|
||||||
|
firebase_core:
|
||||||
|
:path: ".symlinks/plugins/firebase_core/ios"
|
||||||
|
firebase_messaging:
|
||||||
|
:path: ".symlinks/plugins/firebase_messaging/ios"
|
||||||
fk_user_agent:
|
fk_user_agent:
|
||||||
:path: ".symlinks/plugins/fk_user_agent/ios"
|
:path: ".symlinks/plugins/fk_user_agent/ios"
|
||||||
Flutter:
|
Flutter:
|
||||||
@@ -216,6 +290,13 @@ SPEC CHECKSUMS:
|
|||||||
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
||||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||||
file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95
|
file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95
|
||||||
|
Firebase: 444b35a9c568a516666213c2f6cccd10cb12559f
|
||||||
|
firebase_core: d2242c6f318db1d0dcecfbfa491e943337b0d755
|
||||||
|
firebase_messaging: 59f435c4cd0d5448e7268a7f70bce9b1287c1742
|
||||||
|
FirebaseCore: 55e7ae35991ccca4db03ff8d8df6ed5f17a3e4c7
|
||||||
|
FirebaseCoreInternal: 091bde13e47bb1c5e9fe397634f3593dc390430f
|
||||||
|
FirebaseInstallations: 004915af170935e3a583faefd5f8bc851afc220f
|
||||||
|
FirebaseMessaging: 4487bbff9b9b927ba1dd3ea40d1ceb58e4ee3cb5
|
||||||
fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
|
fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
|
||||||
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
|
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
|
||||||
flutter_appauth: 05c3778a1e4ae23364dd2ef37cbae14b244f646b
|
flutter_appauth: 05c3778a1e4ae23364dd2ef37cbae14b244f646b
|
||||||
@@ -226,12 +307,16 @@ SPEC CHECKSUMS:
|
|||||||
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
||||||
fluttertoast: 6122fa75143e992b1d3470f61000f591a798cc58
|
fluttertoast: 6122fa75143e992b1d3470f61000f591a798cc58
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||||
|
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
|
||||||
|
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
|
||||||
libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c
|
libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c
|
||||||
Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d
|
Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d
|
||||||
|
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
||||||
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
|
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
|
||||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||||
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
|
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
|
||||||
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
|
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
|
||||||
|
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
||||||
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
||||||
receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1
|
receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1
|
||||||
SDWebImage: af5bbffef2cde09f148d826f9733dcde1a9414cd
|
SDWebImage: af5bbffef2cde09f148d826f9733dcde1a9414cd
|
||||||
@@ -244,6 +329,6 @@ SPEC CHECKSUMS:
|
|||||||
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
|
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
|
||||||
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
|
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
|
||||||
|
|
||||||
PODFILE CHECKSUM: 91efd4097cc41f032416d67ecaac21cc2de8dd55
|
PODFILE CHECKSUM: e209bf81fb4facf3f68c43dbffa0b2d05ff63db0
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
0FCA69E45174F1DF02B9350B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 514B9D0F73F09C5EF676EF94 /* GoogleService-Info.plist */; };
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||||
6DD0BB4CA9591742B94CC3B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F5F6A3907EC26183773A828 /* Pods_Runner.framework */; };
|
6DD0BB4CA9591742B94CC3B6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F5F6A3907EC26183773A828 /* Pods_Runner.framework */; };
|
||||||
@@ -59,6 +60,7 @@
|
|||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||||
|
514B9D0F73F09C5EF676EF94 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||||
@@ -126,6 +128,7 @@
|
|||||||
97C146EF1CF9000F007C117D /* Products */,
|
97C146EF1CF9000F007C117D /* Products */,
|
||||||
F62B48DC0DFBD6D5D355E5FE /* Pods */,
|
F62B48DC0DFBD6D5D355E5FE /* Pods */,
|
||||||
66B148CBFC3A1B0ADAE68790 /* Frameworks */,
|
66B148CBFC3A1B0ADAE68790 /* Frameworks */,
|
||||||
|
514B9D0F73F09C5EF676EF94 /* GoogleService-Info.plist */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@@ -266,6 +269,7 @@
|
|||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
||||||
|
0FCA69E45174F1DF02B9350B /* GoogleService-Info.plist in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -469,6 +473,7 @@
|
|||||||
DEVELOPMENT_TEAM = KUT463DS29;
|
DEVELOPMENT_TEAM = KUT463DS29;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
@@ -603,6 +608,7 @@
|
|||||||
DEVELOPMENT_TEAM = KUT463DS29;
|
DEVELOPMENT_TEAM = KUT463DS29;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
@@ -631,6 +637,7 @@
|
|||||||
DEVELOPMENT_TEAM = KUT463DS29;
|
DEVELOPMENT_TEAM = KUT463DS29;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import 'package:contact/contact/model/capability_contact.dart';
|
import 'package:contact/contact/model/capability_contact.dart';
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:forward/forward/capability_forward.dart';
|
import 'package:forward/forward/capability_forward.dart';
|
||||||
@@ -21,8 +19,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/b
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forwarding_interactors_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forwarding_interactors_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/model/capability_push_notification.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/model/capability_push_notification.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/firebase_bindings.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/firebase_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/firebase_options.dart';
|
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification_service.dart';
|
|
||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
@@ -147,11 +143,9 @@ abstract class BaseController extends GetxController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> injectFirebaseBindings(Session? session, AccountId? accountId) async {
|
void injectFirebaseBindings(Session? session, AccountId? accountId) {
|
||||||
try {
|
try {
|
||||||
requireCapability(session!, accountId!, [capabilityPushNotification]);
|
requireCapability(session!, accountId!, [capabilityPushNotification]);
|
||||||
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
|
||||||
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
|
|
||||||
FireBaseBindings().dependencies();
|
FireBaseBindings().dependencies();
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
logError('BaseController::injectFirebaseBindings(): exception: $e');
|
logError('BaseController::injectFirebaseBindings(): exception: $e');
|
||||||
|
|||||||
+2
-3
@@ -358,10 +358,9 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
@override
|
@override
|
||||||
Future<void> injectFirebaseBindings(Session? session, AccountId? accountId) async {
|
Future<void> injectFirebaseBindings(Session? session, AccountId? accountId) async {
|
||||||
try {
|
try {
|
||||||
await super.injectFirebaseBindings(session, accountId);
|
super.injectFirebaseBindings(session, accountId);
|
||||||
_saveFirebaseCacheInteractor = Get.find<SaveFirebaseCacheInteractor>();
|
_saveFirebaseCacheInteractor = Get.find<SaveFirebaseCacheInteractor>();
|
||||||
NotificationService.initializeNotificationService(
|
await NotificationService.initializeNotificationService();
|
||||||
onDidReceiveNotificationResponse);
|
|
||||||
NotificationService.onTokenRefresh.listen((token) {
|
NotificationService.onTokenRefresh.listen((token) {
|
||||||
_saveFirebaseCacheInteractor?.execute(FirebaseDto(token));
|
_saveFirebaseCacheInteractor?.execute(FirebaseDto(token));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -18,17 +18,17 @@ class DefaultFirebaseOptions {
|
|||||||
case TargetPlatform.macOS:
|
case TargetPlatform.macOS:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
'DefaultFirebaseOptions have not been configured for macos - '
|
'DefaultFirebaseOptions have not been configured for macos - '
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
'you can reconfigure this by running the FlutterFire CLI again.',
|
||||||
);
|
);
|
||||||
case TargetPlatform.windows:
|
case TargetPlatform.windows:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
'DefaultFirebaseOptions have not been configured for windows - '
|
'DefaultFirebaseOptions have not been configured for windows - '
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
'you can reconfigure this by running the FlutterFire CLI again.',
|
||||||
);
|
);
|
||||||
case TargetPlatform.linux:
|
case TargetPlatform.linux:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
'DefaultFirebaseOptions have not been configured for linux - '
|
'DefaultFirebaseOptions have not been configured for linux - '
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
'you can reconfigure this by running the FlutterFire CLI again.',
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
|
|||||||
@@ -1,36 +1,19 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/firebase/firebase_dto.dart';
|
import 'package:model/firebase/firebase_dto.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/save_firebase_cache_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/save_firebase_cache_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/firebase_options.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/firebase_options.dart';
|
||||||
import 'notification_strings.dart';
|
|
||||||
|
|
||||||
final StreamController<NotificationResponse?> selectNotificationStream =
|
|
||||||
StreamController<NotificationResponse?>.broadcast();
|
|
||||||
|
|
||||||
@pragma('vm:entry-point')
|
@pragma('vm:entry-point')
|
||||||
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
||||||
await dotenv.load(fileName: 'env.file');
|
await dotenv.load(fileName: 'env.file');
|
||||||
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
||||||
await NotificationService.displayPushNotification(message);
|
log('firebaseMessagingBackgroundHandler: ${message.data}');
|
||||||
}
|
|
||||||
|
|
||||||
@pragma('vm:entry-point')
|
|
||||||
void notificationTapBackground(NotificationResponse notificationResponse) {
|
|
||||||
//handle action
|
|
||||||
}
|
|
||||||
|
|
||||||
void onDidReceiveNotificationResponse(
|
|
||||||
NotificationResponse details,
|
|
||||||
) {
|
|
||||||
selectNotificationStream.add(details);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class NotificationService {
|
class NotificationService {
|
||||||
@@ -42,53 +25,20 @@ class NotificationService {
|
|||||||
|
|
||||||
static get _firebaseMessaging => FirebaseMessaging.instance;
|
static get _firebaseMessaging => FirebaseMessaging.instance;
|
||||||
|
|
||||||
static get _flutterLocalNotificationsPlugin =>
|
|
||||||
FlutterLocalNotificationsPlugin();
|
|
||||||
|
|
||||||
static Stream<String> get onTokenRefresh => _firebaseMessaging.onTokenRefresh;
|
static Stream<String> get onTokenRefresh => _firebaseMessaging.onTokenRefresh;
|
||||||
static bool _isFlutterLocalNotificationsInitialized = false;
|
static bool _isFlutterLocalNotificationsInitialized = false;
|
||||||
|
|
||||||
static Future<void> initializeNotificationService(
|
static Future<void> initializeNotificationService() async {
|
||||||
Function(NotificationResponse)? onDidReceiveNotificationResponse,
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
||||||
) async {
|
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
|
||||||
if (_isFlutterLocalNotificationsInitialized) return;
|
if (_isFlutterLocalNotificationsInitialized) return;
|
||||||
final _saveFirebaseCacheInteractor = Get.find<SaveFirebaseCacheInteractor>();
|
final _saveFirebaseCacheInteractor = Get.find<SaveFirebaseCacheInteractor>();
|
||||||
final token = await _firebaseMessaging.getToken();
|
final token = await _firebaseMessaging.getToken();
|
||||||
_saveFirebaseCacheInteractor.execute(FirebaseDto(token));
|
_saveFirebaseCacheInteractor.execute(FirebaseDto(token));
|
||||||
await _initFirebaseMessaging();
|
await _initFirebaseMessaging();
|
||||||
await _flutterLocalNotificationsPlugin.initialize(
|
|
||||||
InitializationSettings(
|
|
||||||
android: androidInitializationSettings,
|
|
||||||
iOS: iosInitializationSettings,
|
|
||||||
),
|
|
||||||
onDidReceiveNotificationResponse: onDidReceiveNotificationResponse,
|
|
||||||
onDidReceiveBackgroundNotificationResponse: notificationTapBackground,
|
|
||||||
);
|
|
||||||
await _requestPermissions();
|
|
||||||
await _createNotificationChannels();
|
|
||||||
_listenNotificationActionStream();
|
|
||||||
_isFlutterLocalNotificationsInitialized = true;
|
_isFlutterLocalNotificationsInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> displayPushNotification(
|
|
||||||
RemoteMessage notification,
|
|
||||||
) async {
|
|
||||||
try {
|
|
||||||
await _flutterLocalNotificationsPlugin.show(
|
|
||||||
createUniqueId,
|
|
||||||
channelName,
|
|
||||||
notification.data.toString(),
|
|
||||||
pushNotificationDetails,
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
debugPrint(e.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> cancelAllNotifications() async {
|
|
||||||
await _flutterLocalNotificationsPlugin.cancelAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> _initFirebaseMessaging() async {
|
static Future<void> _initFirebaseMessaging() async {
|
||||||
FirebaseMessaging.onMessage.listen(_handleIncomingForegroundNotification);
|
FirebaseMessaging.onMessage.listen(_handleIncomingForegroundNotification);
|
||||||
FirebaseMessaging.onMessageOpenedApp.listen(_handleOpenedAppNotification);
|
FirebaseMessaging.onMessageOpenedApp.listen(_handleOpenedAppNotification);
|
||||||
@@ -97,52 +47,11 @@ class NotificationService {
|
|||||||
static Future<void> _handleIncomingForegroundNotification(
|
static Future<void> _handleIncomingForegroundNotification(
|
||||||
RemoteMessage remoteMessage,
|
RemoteMessage remoteMessage,
|
||||||
) async {
|
) async {
|
||||||
await displayPushNotification(remoteMessage);
|
log('firebaseMessagingForegroundHandler: ${remoteMessage.data}');
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _handleOpenedAppNotification(RemoteMessage remoteMessage) {}
|
static void _handleOpenedAppNotification(RemoteMessage remoteMessage) {}
|
||||||
|
|
||||||
static Future<void> _requestPermissions() async {
|
|
||||||
if (Platform.isAndroid) {
|
|
||||||
await _flutterLocalNotificationsPlugin
|
|
||||||
.resolvePlatformSpecificImplementation<
|
|
||||||
AndroidFlutterLocalNotificationsPlugin>()
|
|
||||||
?.requestPermission();
|
|
||||||
} else {
|
|
||||||
await _flutterLocalNotificationsPlugin
|
|
||||||
.resolvePlatformSpecificImplementation<
|
|
||||||
IOSFlutterLocalNotificationsPlugin>()
|
|
||||||
?.requestPermissions(
|
|
||||||
alert: true,
|
|
||||||
badge: true,
|
|
||||||
sound: true,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> _listenNotificationActionStream() async {
|
|
||||||
selectNotificationStream.stream
|
|
||||||
.listen((event) => event)
|
|
||||||
.onData((data) async {
|
|
||||||
switch (data?.notificationResponseType) {
|
|
||||||
case NotificationResponseType.selectedNotification:
|
|
||||||
break;
|
|
||||||
case NotificationResponseType.selectedNotificationAction:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> _createNotificationChannels() async {
|
|
||||||
await _flutterLocalNotificationsPlugin
|
|
||||||
.resolvePlatformSpecificImplementation<
|
|
||||||
AndroidFlutterLocalNotificationsPlugin>()
|
|
||||||
?.createNotificationChannel(androidChannel);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> deleteToken() async => _firebaseMessaging.deleteToken();
|
static Future<void> deleteToken() async => _firebaseMessaging.deleteToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
int get createUniqueId =>
|
|
||||||
DateTime.now().millisecondsSinceEpoch.remainder(100000);
|
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
||||||
|
|
||||||
const channelId = 'team_mail_channel_id';
|
|
||||||
const channelKey = 'team_mail_channel_key';
|
|
||||||
const channelName = 'Team Mail notifications';
|
|
||||||
const channelDescription = 'Team Mail notifications';
|
|
||||||
|
|
||||||
final iosInitializationSettings = DarwinInitializationSettings(
|
|
||||||
notificationCategories: [
|
|
||||||
DarwinNotificationCategory(
|
|
||||||
channelId,
|
|
||||||
actions: <DarwinNotificationAction>[
|
|
||||||
DarwinNotificationAction.plain(
|
|
||||||
channelKey,
|
|
||||||
channelName,
|
|
||||||
options: {
|
|
||||||
DarwinNotificationActionOption.foreground,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
onDidReceiveLocalNotification:
|
|
||||||
(int id, String? title, String? body, String? payload) {},
|
|
||||||
);
|
|
||||||
|
|
||||||
const androidInitializationSettings =
|
|
||||||
AndroidInitializationSettings('background');
|
|
||||||
|
|
||||||
const androidChannel = AndroidNotificationChannel(
|
|
||||||
channelId,
|
|
||||||
channelName,
|
|
||||||
description: channelDescription,
|
|
||||||
importance: Importance.max,
|
|
||||||
enableLights: true,
|
|
||||||
);
|
|
||||||
|
|
||||||
const pushNotificationDetails = NotificationDetails(
|
|
||||||
android: AndroidNotificationDetails(
|
|
||||||
channelId,
|
|
||||||
channelName,
|
|
||||||
channelDescription: channelDescription,
|
|
||||||
visibility: NotificationVisibility.public,
|
|
||||||
importance: Importance.max,
|
|
||||||
ledOnMs: 100,
|
|
||||||
ledOffMs: 1000,
|
|
||||||
category: AndroidNotificationCategory.message,
|
|
||||||
),
|
|
||||||
iOS: DarwinNotificationDetails(
|
|
||||||
presentSound: true,
|
|
||||||
presentAlert: true,
|
|
||||||
presentBadge: true,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
+3
-2
@@ -1,10 +1,11 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/presentation/firebase_options.dart';
|
||||||
import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
|
import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations_delegate.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations_delegate.dart';
|
||||||
@@ -14,6 +15,7 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
|||||||
import 'package:worker_manager/worker_manager.dart';
|
import 'package:worker_manager/worker_manager.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
||||||
initLogger(() async {
|
initLogger(() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
|
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
|
||||||
@@ -26,7 +28,6 @@ void main() async {
|
|||||||
await HiveCacheConfig().setUp();
|
await HiveCacheConfig().setUp();
|
||||||
await HiveCacheConfig.initializeEncryptionKey();
|
await HiveCacheConfig.initializeEncryptionKey();
|
||||||
await Executor().warmUp();
|
await Executor().warmUp();
|
||||||
await dotenv.load(fileName: 'env.file');
|
|
||||||
runApp(const TMailApp());
|
runApp(const TMailApp());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -623,27 +623,6 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.4"
|
||||||
flutter_local_notifications:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: flutter_local_notifications
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "12.0.3+1"
|
|
||||||
flutter_local_notifications_linux:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_local_notifications_linux
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.0"
|
|
||||||
flutter_local_notifications_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_local_notifications_platform_interface
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "6.0.0"
|
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -1407,13 +1386,6 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.2"
|
version: "3.2.2"
|
||||||
timezone:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: timezone
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.0"
|
|
||||||
timing:
|
timing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
+1
-2
@@ -196,9 +196,8 @@ dependencies:
|
|||||||
ref: master
|
ref: master
|
||||||
|
|
||||||
url_launcher: 6.1.5
|
url_launcher: 6.1.5
|
||||||
firebase_core: ^2.2.0
|
firebase_core: 2.2.0
|
||||||
firebase_messaging: 14.0.4
|
firebase_messaging: 14.0.4
|
||||||
flutter_local_notifications: ^12.0.3
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user