推送配置,测试
This commit is contained in:
@@ -26,8 +26,8 @@ android {
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = flutter.minSdkVersion
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
versionCode = 4
|
||||
versionName = "1.2.1"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
|
||||
|
||||
<application
|
||||
android:label="小羚羚"
|
||||
@@ -48,6 +50,64 @@
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
|
||||
<!-- 请填写你自己的- appKey -->
|
||||
<meta-data android:name="com.alibaba.app.appkey" android:value="335642645"/>
|
||||
<!-- 请填写你自己的appSecret -->
|
||||
<meta-data android:name="com.alibaba.app.appsecret" android:value="39628204345a4240b5b645b68a5896c7"/>
|
||||
<!-- 华为通道的参数appid -->
|
||||
<meta-data android:name="com.huawei.hms.client.appid" android:value="" />
|
||||
|
||||
<!-- vivo通道的参数api_key为appkey -->
|
||||
<meta-data android:name="com.vivo.push.api_key" android:value="" />
|
||||
<meta-data android:name="com.vivo.push.app_id" android:value="" />
|
||||
|
||||
<!-- honor通道的参数-->
|
||||
<meta-data android:name="com.hihonor.push.app_id" android:value="" />
|
||||
|
||||
<!-- oppo -->
|
||||
<meta-data android:name="com.oppo.push.key" android:value="" />
|
||||
<meta-data android:name="com.oppo.push.secret" android:value="" />
|
||||
|
||||
<!-- 小米-->
|
||||
<meta-data android:name="com.xiaomi.push.id" android:value="id=2222222222222222222" />
|
||||
<meta-data android:name="com.xiaomi.push.key" android:value="id=5555555555555" />
|
||||
|
||||
<!-- 魅族-->
|
||||
<meta-data android:name="com.meizu.push.id" android:value="" />
|
||||
<meta-data android:name="com.meizu.push.key" android:value="" />
|
||||
|
||||
|
||||
|
||||
<!-- 接收推送消息 -->
|
||||
<receiver
|
||||
android:name="com.aliyun.ams.push.AliyunPushMessageReceiver"
|
||||
android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 -->
|
||||
<intent-filter>
|
||||
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="com.alibaba.sdk.android.push.RECEIVE" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!-- 辅助弹窗Activity -->
|
||||
<activity
|
||||
android:name="com.aliyun.ams.push.PushPopupActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="${applicationId}"
|
||||
android:path="/thirdpush"
|
||||
android:scheme="agoo" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
<!-- Required to query activities that can process text, see:
|
||||
|
||||
@@ -3,6 +3,17 @@ allprojects {
|
||||
// 使用阿里云镜像
|
||||
maven("https://maven.aliyun.com/repository/public")
|
||||
maven("https://maven.aliyun.com/repository/google")
|
||||
maven(
|
||||
"https://maven.aliyun.com/nexus/content/repositories/releases/"
|
||||
)
|
||||
// 集成华为通道需要配置 HMS Core SDK 的 Maven地址
|
||||
maven(
|
||||
"https://developer.huawei.com/repo/"
|
||||
)
|
||||
|
||||
maven(
|
||||
"https://developer.hihonor.com/repo"
|
||||
)
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
# platform :ios, '13.0'
|
||||
platform :ios, '13.0'
|
||||
|
||||
source 'https://cdn.cocoapods.org/'
|
||||
source 'https://gitee.com/aliyun/aliyun-specs.git'
|
||||
source 'https://github.com/aliyun/aliyun-specs.git'
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
PODS:
|
||||
- AlicloudELS (1.0.3)
|
||||
- AlicloudPush (3.2.3):
|
||||
- AlicloudELS (= 1.0.3)
|
||||
- AlicloudUTDID (~> 1.0)
|
||||
- AlicloudUTDID (1.6.1)
|
||||
- aliyun_push_flutter (0.0.1):
|
||||
- AlicloudPush (< 4.0, >= 3.2.3)
|
||||
- Flutter
|
||||
- connectivity_plus (0.0.1):
|
||||
- Flutter
|
||||
- device_info_plus (0.0.1):
|
||||
@@ -38,6 +46,7 @@ PODS:
|
||||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- aliyun_push_flutter (from `.symlinks/plugins/aliyun_push_flutter/ios`)
|
||||
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||
- Flutter (from `Flutter`)
|
||||
@@ -54,10 +63,17 @@ DEPENDENCIES:
|
||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||
|
||||
SPEC REPOS:
|
||||
https://gitee.com/aliyun/aliyun-specs.git:
|
||||
- AlicloudUTDID
|
||||
https://github.com/aliyun/aliyun-specs.git:
|
||||
- AlicloudELS
|
||||
- AlicloudPush
|
||||
trunk:
|
||||
- OrderedSet
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
aliyun_push_flutter:
|
||||
:path: ".symlinks/plugins/aliyun_push_flutter/ios"
|
||||
connectivity_plus:
|
||||
:path: ".symlinks/plugins/connectivity_plus/ios"
|
||||
device_info_plus:
|
||||
@@ -88,6 +104,10 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
AlicloudELS: fbf821383330465a5af84a033f36f263ae46ca41
|
||||
AlicloudPush: 95150880af380f64cf1741f5586047c17d36c1d9
|
||||
AlicloudUTDID: 5d2f22d50e11eecd38f30bc7a48c71925ea90976
|
||||
aliyun_push_flutter: 0fc2f048a08687ef256c0cfdd72dd7a550ef3347
|
||||
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
|
||||
device_info_plus: 71ffc6ab7634ade6267c7a93088ed7e4f74e5896
|
||||
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
|
||||
@@ -104,6 +124,6 @@ SPEC CHECKSUMS:
|
||||
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
|
||||
url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b
|
||||
|
||||
PODFILE CHECKSUM: 6416011b1bc721211379eaad259ff1cba3dbfad2
|
||||
PODFILE CHECKSUM: 357c01ff4e7591871e8c4fd6462220a8c7447220
|
||||
|
||||
COCOAPODS: 1.16.2
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||
4B58A54CFC9A912F2BA04FF2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||
6AF04C5CFFF0B4098EEDA799 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
6D3F89E22F04C32900A154AD /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; 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>"; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||
@@ -143,6 +144,7 @@
|
||||
97C146F01CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6D3F89E22F04C32900A154AD /* Runner.entitlements */,
|
||||
97C146FA1CF9000F007C117D /* Main.storyboard */,
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */,
|
||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
|
||||
@@ -487,6 +489,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 4;
|
||||
@@ -498,6 +501,78 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.2.1;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"swiftCoreGraphics\"",
|
||||
"-framework",
|
||||
"\"OrderedSet\"",
|
||||
"-framework",
|
||||
"\"connectivity_plus\"",
|
||||
"-framework",
|
||||
"\"device_info_plus\"",
|
||||
"-framework",
|
||||
"\"flutter_inappwebview_ios\"",
|
||||
"-framework",
|
||||
"\"flutter_native_splash\"",
|
||||
"-framework",
|
||||
"\"flutter_pdfview\"",
|
||||
"-framework",
|
||||
"\"geolocator_apple\"",
|
||||
"-framework",
|
||||
"\"image_picker_ios\"",
|
||||
"-framework",
|
||||
"\"mobile_scanner\"",
|
||||
"-framework",
|
||||
"\"package_info_plus\"",
|
||||
"-framework",
|
||||
"\"path_provider_foundation\"",
|
||||
"-framework",
|
||||
"\"permission_handler_apple\"",
|
||||
"-framework",
|
||||
"\"shared_preferences_foundation\"",
|
||||
"-framework",
|
||||
"\"url_launcher_ios\"",
|
||||
"-framework",
|
||||
"\"AlicloudELS\"",
|
||||
"-framework",
|
||||
"\"CloudPushSDK\"",
|
||||
"-framework",
|
||||
"\"aliyun_push_flutter\"",
|
||||
);
|
||||
"OTHER_LDFLAGS[arch=*]" = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"swiftCoreGraphics\"",
|
||||
"-framework",
|
||||
"\"OrderedSet\"",
|
||||
"-framework",
|
||||
"\"connectivity_plus\"",
|
||||
"-framework",
|
||||
"\"device_info_plus\"",
|
||||
"-framework",
|
||||
"\"flutter_inappwebview_ios\"",
|
||||
"-framework",
|
||||
"\"flutter_native_splash\"",
|
||||
"-framework",
|
||||
"\"flutter_pdfview\"",
|
||||
"-framework",
|
||||
"\"geolocator_apple\"",
|
||||
"-framework",
|
||||
"\"image_picker_ios\"",
|
||||
"-framework",
|
||||
"\"mobile_scanner\"",
|
||||
"-framework",
|
||||
"\"package_info_plus\"",
|
||||
"-framework",
|
||||
"\"path_provider_foundation\"",
|
||||
"-framework",
|
||||
"\"permission_handler_apple\"",
|
||||
"-framework",
|
||||
"\"shared_preferences_foundation\"",
|
||||
"-framework",
|
||||
"\"url_launcher_ios\"",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lnkj.lnJqApp;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -682,6 +757,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 4;
|
||||
@@ -693,6 +769,78 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.2.1;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"swiftCoreGraphics\"",
|
||||
"-framework",
|
||||
"\"OrderedSet\"",
|
||||
"-framework",
|
||||
"\"connectivity_plus\"",
|
||||
"-framework",
|
||||
"\"device_info_plus\"",
|
||||
"-framework",
|
||||
"\"flutter_inappwebview_ios\"",
|
||||
"-framework",
|
||||
"\"flutter_native_splash\"",
|
||||
"-framework",
|
||||
"\"flutter_pdfview\"",
|
||||
"-framework",
|
||||
"\"geolocator_apple\"",
|
||||
"-framework",
|
||||
"\"image_picker_ios\"",
|
||||
"-framework",
|
||||
"\"mobile_scanner\"",
|
||||
"-framework",
|
||||
"\"package_info_plus\"",
|
||||
"-framework",
|
||||
"\"path_provider_foundation\"",
|
||||
"-framework",
|
||||
"\"permission_handler_apple\"",
|
||||
"-framework",
|
||||
"\"shared_preferences_foundation\"",
|
||||
"-framework",
|
||||
"\"url_launcher_ios\"",
|
||||
"-framework",
|
||||
"\"AlicloudELS\"",
|
||||
"-framework",
|
||||
"\"CloudPushSDK\"",
|
||||
"-framework",
|
||||
"\"aliyun_push_flutter\"",
|
||||
);
|
||||
"OTHER_LDFLAGS[arch=*]" = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"swiftCoreGraphics\"",
|
||||
"-framework",
|
||||
"\"OrderedSet\"",
|
||||
"-framework",
|
||||
"\"connectivity_plus\"",
|
||||
"-framework",
|
||||
"\"device_info_plus\"",
|
||||
"-framework",
|
||||
"\"flutter_inappwebview_ios\"",
|
||||
"-framework",
|
||||
"\"flutter_native_splash\"",
|
||||
"-framework",
|
||||
"\"flutter_pdfview\"",
|
||||
"-framework",
|
||||
"\"geolocator_apple\"",
|
||||
"-framework",
|
||||
"\"image_picker_ios\"",
|
||||
"-framework",
|
||||
"\"mobile_scanner\"",
|
||||
"-framework",
|
||||
"\"package_info_plus\"",
|
||||
"-framework",
|
||||
"\"path_provider_foundation\"",
|
||||
"-framework",
|
||||
"\"permission_handler_apple\"",
|
||||
"-framework",
|
||||
"\"shared_preferences_foundation\"",
|
||||
"-framework",
|
||||
"\"url_launcher_ios\"",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lnkj.lnJqApp;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -714,6 +862,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 4;
|
||||
@@ -725,6 +874,45 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.2.1;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"swiftCoreGraphics\"",
|
||||
"-framework",
|
||||
"\"OrderedSet\"",
|
||||
"-framework",
|
||||
"\"connectivity_plus\"",
|
||||
"-framework",
|
||||
"\"device_info_plus\"",
|
||||
"-framework",
|
||||
"\"flutter_inappwebview_ios\"",
|
||||
"-framework",
|
||||
"\"flutter_native_splash\"",
|
||||
"-framework",
|
||||
"\"flutter_pdfview\"",
|
||||
"-framework",
|
||||
"\"geolocator_apple\"",
|
||||
"-framework",
|
||||
"\"image_picker_ios\"",
|
||||
"-framework",
|
||||
"\"mobile_scanner\"",
|
||||
"-framework",
|
||||
"\"package_info_plus\"",
|
||||
"-framework",
|
||||
"\"path_provider_foundation\"",
|
||||
"-framework",
|
||||
"\"permission_handler_apple\"",
|
||||
"-framework",
|
||||
"\"shared_preferences_foundation\"",
|
||||
"-framework",
|
||||
"\"url_launcher_ios\"",
|
||||
"-framework",
|
||||
"\"AlicloudELS\"",
|
||||
"-framework",
|
||||
"\"CloudPushSDK\"",
|
||||
"-framework",
|
||||
"\"aliyun_push_flutter\"",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.lnkj.lnJqApp;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
||||
@@ -63,5 +63,12 @@
|
||||
</array>
|
||||
<key>uses</key>
|
||||
<string></string>
|
||||
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
<string>fetch</string>
|
||||
</array>
|
||||
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
8
ln_jq_app/ios/Runner/Runner.entitlements
Normal file
8
ln_jq_app/ios/Runner/Runner.entitlements
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>aps-environment</key>
|
||||
<string>development</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -7,11 +7,14 @@ class AppTheme {
|
||||
|
||||
static const Color themeColor = Color(0xFF0c83c3);
|
||||
|
||||
|
||||
static const String test_service_url = "http://47.100.49.118:8090/api/";
|
||||
//http://192.168.110.222:8080/
|
||||
static const String test_service_url = "https://beta-esg.api.lnh2e.com/";
|
||||
static const String release_service_url = "";
|
||||
|
||||
//加氢站相关查询
|
||||
static const String jiaqing_service_url = "https://lnh2e.com/api/lingniu-manager-v1/v1/";
|
||||
static const String jiaqing_service_url =
|
||||
"https://beta.lnh2e.com/api/lingniu-manager-v1/v1/";
|
||||
|
||||
//车辆信息
|
||||
static const String car_service_url = "http://47.99.166.38:20000/";
|
||||
|
||||
@@ -56,12 +59,9 @@ class AppTheme {
|
||||
appBarTheme: const AppBarTheme(
|
||||
backgroundColor: Color.fromARGB(255, 34, 34, 34),
|
||||
centerTitle: true,
|
||||
titleTextStyle: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
titleTextStyle: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||
),
|
||||
bottomAppBarTheme: BottomAppBarThemeData(
|
||||
bottomAppBarTheme: BottomAppBarThemeData(
|
||||
color: Color.fromARGB(255, 34, 34, 34),
|
||||
elevation: 4.0,
|
||||
),
|
||||
|
||||
@@ -14,7 +14,7 @@ void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
WidgetsBinding widgetsBinding = await init(
|
||||
isDebug: false,
|
||||
isDebug: true,
|
||||
logTag: '小羚羚',
|
||||
supportedLocales: [Locale('zh', 'CN')],
|
||||
);
|
||||
@@ -30,7 +30,7 @@ void main() async {
|
||||
// 设计稿尺寸 单位:dp
|
||||
designSize: const Size(390, 844),
|
||||
// Getx Log
|
||||
enableLog: false,
|
||||
enableLog: true,
|
||||
// 默认的跳转动画
|
||||
defaultTransition: Transition.rightToLeft,
|
||||
// 主题模式
|
||||
@@ -76,6 +76,8 @@ void initHttpSet() {
|
||||
await StorageService.to.clearLoginInfo();
|
||||
Get.offAll(() => LoginPage());
|
||||
return baseModel.message;
|
||||
}else {
|
||||
return "服务繁忙,稍后重试";
|
||||
}
|
||||
} on Exception catch (e) {
|
||||
e.printInfo();
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:aliyun_push_flutter/aliyun_push_flutter.dart';
|
||||
import 'package:flutter_native_splash/flutter_native_splash.dart';
|
||||
import 'package:getx_scaffold/getx_scaffold.dart';
|
||||
import 'package:ln_jq_app/pages/b_page/base_widgets/view.dart';
|
||||
@@ -12,14 +15,115 @@ class HomeController extends GetxController with BaseControllerMixin {
|
||||
|
||||
HomeController();
|
||||
|
||||
final _aliyunPush = AliyunPushFlutter();
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
initAliyunPush();
|
||||
addPushCallback();
|
||||
FlutterNativeSplash.remove();
|
||||
}
|
||||
|
||||
void addPushCallback() {
|
||||
_aliyunPush.addMessageReceiver(
|
||||
onNotification: _onNotification,
|
||||
onNotificationOpened: _onNotificationOpened,
|
||||
onNotificationRemoved: _onNotificationRemoved,
|
||||
onMessage: _onMessage,
|
||||
onAndroidNotificationReceivedInApp: _onAndroidNotificationReceivedInApp,
|
||||
onAndroidNotificationClickedWithNoAction: _onAndroidNotificationClickedWithNoAction,
|
||||
onIOSChannelOpened: _onIOSChannelOpened,
|
||||
onIOSRegisterDeviceTokenSuccess: _onIOSRegisterDeviceTokenSuccess,
|
||||
onIOSRegisterDeviceTokenFailed: _onIOSRegisterDeviceTokenFailed,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _onAndroidNotificationClickedWithNoAction(
|
||||
Map<dynamic, dynamic> message,
|
||||
) async {
|
||||
Logger.d('onAndroidNotificationClickedWithNoAction ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onAndroidNotificationReceivedInApp(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onAndroidNotificationReceivedInApp ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onMessage(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onMessage ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onNotification(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onNotification ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onNotificationOpened(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onNotificationOpened ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onNotificationRemoved(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onNotificationRemoved ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onIOSChannelOpened(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onIOSChannelOpened ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onIOSRegisterDeviceTokenSuccess(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onIOSRegisterDeviceTokenSuccess ====> $message');
|
||||
}
|
||||
|
||||
Future<void> _onIOSRegisterDeviceTokenFailed(Map<dynamic, dynamic> message) async {
|
||||
Logger.d('onIOSRegisterDeviceTokenFailed====> $message');
|
||||
}
|
||||
|
||||
Future<void> initAliyunPush() async {
|
||||
String appKey;
|
||||
String appSecret;
|
||||
|
||||
if (Platform.isIOS) {
|
||||
appKey = '335642649';
|
||||
appSecret = '173bc08bd5df422da20c8e3ffbf0521b';
|
||||
} else {
|
||||
appKey = "335642645";
|
||||
appSecret = "39628204345a4240b5b645b68a5896c7";
|
||||
}
|
||||
|
||||
var result = await _aliyunPush.initPush(appKey: appKey, appSecret: appSecret);
|
||||
var code = result['code'];
|
||||
if (code == kAliyunPushSuccessCode) {
|
||||
Logger.d('初始化推送成功');
|
||||
if(Platform.isIOS){
|
||||
var result = await _aliyunPush.showIOSNoticeWhenForeground(true);
|
||||
var code = result['code'];
|
||||
if (code == kAliyunPushSuccessCode) {
|
||||
Logger.d('设置前台显示通知成功');
|
||||
} else {
|
||||
Logger.d('设置前台显示通知失败');
|
||||
}
|
||||
}else if(Platform.isAndroid){
|
||||
await _aliyunPush.setNotificationInGroup(true);
|
||||
var result = await _aliyunPush.createAndroidChannel(
|
||||
"xll_push_android", '新消息通知', 2, '收到新消息的通知类别');
|
||||
|
||||
var code = result['code'];
|
||||
if (code == kAliyunPushSuccessCode) {
|
||||
Logger.d('创建通道成功');
|
||||
} else {
|
||||
var errorCode = result['code'];
|
||||
var errorMsg = result['errorMsg'];
|
||||
Logger.d('创建通道失败, $errorCode - $errorMsg');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var errorMsg = result['errorMsg'];
|
||||
Logger.d('初始化推送失败: $code - $errorMsg');
|
||||
}
|
||||
}
|
||||
|
||||
// 根据登录状态和登录渠道返回不同的首页
|
||||
Widget getHomePage() {
|
||||
requestPermission();
|
||||
//登录状态跳转
|
||||
if (StorageService.to.isLoggedIn) {
|
||||
// 如果已登录,再判断是哪个渠道
|
||||
@@ -35,4 +139,25 @@ class HomeController extends GetxController with BaseControllerMixin {
|
||||
return LoginPage();
|
||||
}
|
||||
}
|
||||
|
||||
void requestPermission() async {
|
||||
PermissionStatus status = await Permission.notification.status;
|
||||
if (status.isGranted) {
|
||||
Logger.d("通知权限已开启");
|
||||
return;
|
||||
}
|
||||
|
||||
if (status.isDenied) {
|
||||
// 建议此处增加一个应用内的 Rationale (解释说明) 弹窗
|
||||
status = await Permission.notification.request();
|
||||
}
|
||||
if (status.isGranted) {
|
||||
// 授权成功
|
||||
Logger.d('通知已开启');
|
||||
} else if (status.isPermanentlyDenied) {
|
||||
Logger.d('通知权限已被拒绝,请到系统设置中开启');
|
||||
} else if (status.isDenied) {
|
||||
Logger.d('请授予通知权限,以便接收加氢站通知');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:aliyun_push_flutter/aliyun_push_flutter.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:getx_scaffold/getx_scaffold.dart';
|
||||
import 'package:ln_jq_app/common/login_util.dart';
|
||||
@@ -21,8 +22,10 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
|
||||
bool cLogin = true;
|
||||
bool _obscureText = true;
|
||||
|
||||
// 用于管理“记住密码”的复选框状态
|
||||
bool _rememberPassword = true;
|
||||
|
||||
// 用于确保凭证只在首次加载时回填一次
|
||||
bool _credentialsLoaded = false;
|
||||
|
||||
@@ -198,20 +201,24 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
phone: phone,
|
||||
);
|
||||
|
||||
//注册推送别名
|
||||
addAlias(phone);
|
||||
|
||||
//登录后查询已绑定车辆信息
|
||||
var carInfo = await HttpService.to.get(
|
||||
"appointment/driver/getTruckInfoByDriver?phone=$phone"
|
||||
"appointment/driver/getTruckInfoByDriver?phone=$phone",
|
||||
);
|
||||
if (carInfo != null) {
|
||||
var carInforesult = BaseModel.fromJson(carInfo.data);
|
||||
if (carInforesult.data != null) {
|
||||
final vehicle = VehicleInfo.fromJson(carInforesult.data as Map<String, dynamic>);
|
||||
final vehicle = VehicleInfo.fromJson(
|
||||
carInforesult.data as Map<String, dynamic>,
|
||||
);
|
||||
//保存使用
|
||||
await StorageService.to.saveVehicleInfo(vehicle);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//页面操作
|
||||
dismissLoading();
|
||||
showToast('登录成功,欢迎您');
|
||||
@@ -269,9 +276,7 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
hintText: '请输入密码',
|
||||
border: OutlineInputBorder(),
|
||||
suffixIcon: IconButton(
|
||||
icon: Icon(
|
||||
_obscureText ? Icons.visibility_off : Icons.visibility,
|
||||
),
|
||||
icon: Icon(_obscureText ? Icons.visibility_off : Icons.visibility),
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
_obscureText = !_obscureText;
|
||||
@@ -304,7 +309,7 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
GestureDetector(
|
||||
onTap: () => setState(() => _rememberPassword = !_rememberPassword),
|
||||
child: const Text('记住密码', style: TextStyle(color: Colors.grey)),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 20), // 调整间距
|
||||
@@ -317,7 +322,7 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
onPressed: () async {
|
||||
String account = controller.stationIdController.text;
|
||||
String password = controller.passwordController.text;
|
||||
|
||||
|
||||
if (account.isEmpty || password.isEmpty) {
|
||||
showToast("请输入账号和密码");
|
||||
return;
|
||||
@@ -353,13 +358,18 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
|
||||
String token = result.data['token'] ?? '';
|
||||
String userId = result.data['userId'] ?? '';
|
||||
String mobile = result.data['mobile'] ?? '';
|
||||
|
||||
await StorageService.to.saveLoginInfo(
|
||||
token: token,
|
||||
userId: userId,
|
||||
phone: mobile,
|
||||
channel: "station",
|
||||
);
|
||||
|
||||
//注册推送别名
|
||||
addAlias(mobile);
|
||||
|
||||
// 根据复选框状态保存或清除密码 ---
|
||||
if (_rememberPassword) {
|
||||
await StorageService.to.saveStationCredentials(account, password);
|
||||
@@ -384,6 +394,20 @@ class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMix
|
||||
);
|
||||
}
|
||||
|
||||
final _aliyunPush = AliyunPushFlutter();
|
||||
|
||||
void addAlias(String alias) async {
|
||||
var result = await _aliyunPush.addAlias(alias);
|
||||
var code = result['code'];
|
||||
if (code == kAliyunPushSuccessCode) {
|
||||
Logger.d('添加别名$alias成功');
|
||||
} else {
|
||||
var errorCode = result['code'];
|
||||
var errorMsg = result['errorMsg'];
|
||||
Logger.d('添加别名$alias失败: $errorCode - $errorMsg');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GetBuilder<LoginController>(
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import 'package:aliyun_push_flutter/aliyun_push_flutter.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:getx_scaffold/common/utils/log_util.dart';
|
||||
import 'package:ln_jq_app/common/model/vehicle_info.dart';
|
||||
|
||||
/// 定义登录渠道的枚举类型
|
||||
enum LoginChannel {
|
||||
station, // 站点
|
||||
driver, // 司机
|
||||
none, // 未登录或未知
|
||||
driver, // 司机
|
||||
none, // 未登录或未知
|
||||
}
|
||||
|
||||
class StorageService extends GetxService {
|
||||
@@ -22,10 +24,10 @@ class StorageService extends GetxService {
|
||||
static const String _vehicleInfoKey = 'vehicle_info';
|
||||
static const String _stationAccountKey = 'station_account';
|
||||
static const String _stationPasswordKey = 'station_password';
|
||||
|
||||
// 新增:用于标记“绑定车辆”弹窗是否已在本会话中显示过
|
||||
static const String _bindDialogShownKey = 'bind_vehicle_dialog_shown';
|
||||
|
||||
|
||||
static StorageService get to => Get.find();
|
||||
|
||||
Future<StorageService> init() async {
|
||||
@@ -33,22 +35,28 @@ class StorageService extends GetxService {
|
||||
return this;
|
||||
}
|
||||
|
||||
// --- Getters ---
|
||||
// --- Getters ---
|
||||
bool get isLoggedIn => _box.read<String?>(_tokenKey)?.isNotEmpty ?? false;
|
||||
|
||||
String? get token => _box.read<String?>(_tokenKey);
|
||||
|
||||
String? get userId => _box.read<String?>(_userIdKey);
|
||||
|
||||
String? get name => _box.read<String?>(_nameKey);
|
||||
|
||||
String? get phone => _box.read<String?>(_phoneKey);
|
||||
|
||||
String? get idCard => _box.read<String?>(_idCardKey);
|
||||
|
||||
bool get hasVehicleInfo => _box.hasData(_vehicleInfoKey);
|
||||
|
||||
String? get stationAccount => _box.read<String?>(_stationAccountKey);
|
||||
|
||||
String? get stationPassword => _box.read<String?>(_stationPasswordKey);
|
||||
|
||||
// 新增:获取“绑定车辆”弹窗是否已显示的标志
|
||||
bool get hasShownBindVehicleDialog => _box.read<bool>(_bindDialogShownKey) ?? false;
|
||||
|
||||
|
||||
VehicleInfo? get vehicleInfo {
|
||||
final vehicleJson = _box.read<String?>(_vehicleInfoKey);
|
||||
if (vehicleJson != null) {
|
||||
@@ -98,7 +106,6 @@ class StorageService extends GetxService {
|
||||
await _box.write(_bindDialogShownKey, true);
|
||||
}
|
||||
|
||||
|
||||
Future<void> clearVehicleInfo() async {
|
||||
await _box.remove(_vehicleInfoKey);
|
||||
}
|
||||
@@ -118,5 +125,22 @@ class StorageService extends GetxService {
|
||||
await clearVehicleInfo();
|
||||
// 登出时,清除“绑定车辆”弹窗的显示记录,以便下次登录时可以再次弹出
|
||||
await _box.remove(_bindDialogShownKey);
|
||||
|
||||
delAlias();
|
||||
}
|
||||
|
||||
final _aliyunPush = AliyunPushFlutter();
|
||||
|
||||
void delAlias() async {
|
||||
String phoen = StorageService.to.phone ?? "";
|
||||
var result = await _aliyunPush.removeAlias(phoen);
|
||||
var code = result['code'];
|
||||
if (code == kAliyunPushSuccessCode) {
|
||||
Logger.d('删除别名$phoen成功');
|
||||
} else {
|
||||
var errorCode = result['code'];
|
||||
var errorMsg = result['errorMsg'];
|
||||
Logger.d('删除别名$phoen失败: $errorCode - $errorMsg');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
aliyun_push_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: aliyun_push_flutter
|
||||
sha256: fd1a13ab37f30274e1eaa9c0f68001bf268f8f2e1c83730b4520aa4dff46ce70
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.3.6"
|
||||
ansicolor:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -109,18 +117,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cross_file
|
||||
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
|
||||
sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.3.5"
|
||||
version: "0.3.5+1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.0.6"
|
||||
version: "3.0.7"
|
||||
csslib:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -253,18 +261,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_linux
|
||||
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
|
||||
sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.9.3+2"
|
||||
version: "0.9.4"
|
||||
file_selector_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_macos
|
||||
sha256: "88707a3bec4b988aaed3b4df5d7441ee4e987f20b286cddca5d6a8270cab23f2"
|
||||
sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.9.4+5"
|
||||
version: "0.9.5"
|
||||
file_selector_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -277,10 +285,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_windows
|
||||
sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b"
|
||||
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.9.3+4"
|
||||
version: "0.9.3+5"
|
||||
fixnum:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -399,10 +407,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_plugin_android_lifecycle
|
||||
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
|
||||
sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.0.32"
|
||||
version: "2.0.33"
|
||||
flutter_screenutil:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -423,10 +431,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_svg
|
||||
sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
|
||||
sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
version: "2.2.3"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@@ -505,10 +513,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: get
|
||||
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
|
||||
sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "4.7.2"
|
||||
version: "4.7.3"
|
||||
get_storage:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -545,10 +553,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
|
||||
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.5.0"
|
||||
version: "1.6.0"
|
||||
http_client_helper:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -569,10 +577,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: image
|
||||
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
|
||||
sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "4.5.4"
|
||||
version: "4.7.2"
|
||||
image_picker:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -585,26 +593,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_android
|
||||
sha256: ca2a3b04d34e76157e9ae680ef16014fb4c2d20484e78417eaed6139330056f6
|
||||
sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.8.13+7"
|
||||
version: "0.8.13+10"
|
||||
image_picker_for_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_for_web
|
||||
sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6"
|
||||
sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.1.0"
|
||||
version: "3.1.1"
|
||||
image_picker_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image_picker_ios
|
||||
sha256: e675c22790bcc24e9abd455deead2b7a88de4b79f7327a281812f14de1a56f58
|
||||
sha256: "956c16a42c0c708f914021666ffcd8265dde36e673c9fa68c81f7d085d9774ad"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.8.13+1"
|
||||
version: "0.8.13+3"
|
||||
image_picker_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -793,18 +801,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16
|
||||
sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.2.20"
|
||||
version: "2.2.22"
|
||||
path_provider_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_foundation
|
||||
sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738
|
||||
sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.4.3"
|
||||
version: "2.5.1"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -937,26 +945,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences
|
||||
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
|
||||
sha256: "2939ae520c9024cb197fc20dee269cd8cdbf564c8b5746374ec6cacdc5169e64"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.5.3"
|
||||
version: "2.5.4"
|
||||
shared_preferences_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_android
|
||||
sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713"
|
||||
sha256: "83af5c682796c0f7719c2bbf74792d113e40ae97981b8f266fa84574573556bc"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.4.15"
|
||||
version: "2.4.18"
|
||||
shared_preferences_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_foundation
|
||||
sha256: "1c33a907142607c40a7542768ec9badfd16293bac51da3a4482623d15845f88b"
|
||||
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.5.5"
|
||||
version: "2.5.6"
|
||||
shared_preferences_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1062,10 +1070,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: universal_io
|
||||
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
|
||||
sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
version: "2.3.1"
|
||||
url_launcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1078,34 +1086,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_android
|
||||
sha256: "5c8b6c2d89a78f5a1cca70a73d9d5f86c701b36b42f9c9dac7bad592113c28e9"
|
||||
sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "6.3.24"
|
||||
version: "6.3.28"
|
||||
url_launcher_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: "6b63f1441e4f653ae799166a72b50b1767321ecc263a57aadf825a7a2a5477d9"
|
||||
sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "6.3.5"
|
||||
version: "6.3.6"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_linux
|
||||
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
|
||||
sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.2.1"
|
||||
version: "3.2.2"
|
||||
url_launcher_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_macos
|
||||
sha256: "8262208506252a3ed4ff5c0dc1e973d2c0e0ef337d0a074d35634da5d44397c9"
|
||||
sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.2.4"
|
||||
version: "3.2.5"
|
||||
url_launcher_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1126,10 +1134,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_windows
|
||||
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
|
||||
sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.1.4"
|
||||
version: "3.1.5"
|
||||
uuid:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -50,6 +50,7 @@ dependencies:
|
||||
photo_view: ^0.15.0 #操作图片
|
||||
flutter_inappwebview: ^6.1.5 # WebView插件
|
||||
geolocator: ^14.0.2 # 获取精确定位
|
||||
aliyun_push_flutter: ^1.3.6
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user