diff --git a/ln_jq_app/assets/html/map.html b/ln_jq_app/assets/html/map.html
index a4d16d3..dfb6c22 100644
--- a/ln_jq_app/assets/html/map.html
+++ b/ln_jq_app/assets/html/map.html
@@ -21,9 +21,7 @@
.amap-callamap,
.amap-lib-driving-callBtn,
.amap-copyright,
- .amap-logo {
- display: none !important;
- }
+ .amap-logo{bottom: 60px}
/* 去除高德默认的 label 边框 and 背景 */
.amap-marker-label {
diff --git a/ln_jq_app/ios/Podfile.lock b/ln_jq_app/ios/Podfile.lock
index 423a1d3..bcde24b 100644
--- a/ln_jq_app/ios/Podfile.lock
+++ b/ln_jq_app/ios/Podfile.lock
@@ -151,7 +151,7 @@ SPEC CHECKSUMS:
AMapNavIOSSDK: e06adcb48ac8abeace46ea31f72191564e54a186
AMapSearch-NO-IDFA: 53b2193244be8f07f3be0a4d5161200236960587
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
- device_info_plus: 71ffc6ab7634ade6267c7a93088ed7e4f74e5896
+ device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
diff --git a/ln_jq_app/lib/pages/b_page/reservation/view.dart b/ln_jq_app/lib/pages/b_page/reservation/view.dart
index ed89f3b..1d53aed 100644
--- a/ln_jq_app/lib/pages/b_page/reservation/view.dart
+++ b/ln_jq_app/lib/pages/b_page/reservation/view.dart
@@ -1,9 +1,13 @@
+import 'dart:io';
+
+import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:getx_scaffold/getx_scaffold.dart';
import 'package:ln_jq_app/common/login_util.dart';
import 'package:ln_jq_app/pages/b_page/reservation/controller.dart';
import 'package:ln_jq_app/pages/c_page/message/view.dart';
+import 'package:ln_jq_app/pages/common/webview/view.dart';
class ReservationPage extends GetView {
const ReservationPage({super.key});
@@ -36,6 +40,30 @@ class ReservationPage extends GetView {
_buildSystemTips(),
SizedBox(height: 24),
_buildLogoutButton(),
+ SizedBox(height: 15.h),
+ Text.rich(
+ TextSpan(
+ style: const TextStyle(color: Colors.grey, fontSize: 13),
+ children: [
+ TextSpan(
+ text: '《用户协议》',
+ style: TextStyle(color: Colors.blue, fontSize: 13),
+ recognizer: TapGestureRecognizer()
+ ..onTap = () {
+ openPage("用户协议", "https://lnh2e.com/user_agreement.html");
+ },
+ ),
+ TextSpan(
+ text: '《隐私政策》',
+ style: TextStyle(color: Colors.blue, fontSize: 13),
+ recognizer: TapGestureRecognizer()
+ ..onTap = () {
+ openPage("隐私政策", "https://lnh2e.com/privacy_agreement.html");
+ },
+ ),
+ ],
+ ),
+ ),
SizedBox(height: 95.h),
],
),
@@ -48,6 +76,14 @@ class ReservationPage extends GetView {
);
}
+ void openPage(String title, String url) {
+ if (Platform.isIOS) {
+ openWebPage(url);
+ return;
+ }
+ Get.to(() => const WebViewPage(), arguments: {'title': title, 'url': url});
+ }
+
/// 1. 顶部个人信息及统计栏
Widget _buildTopSection(BuildContext context) {
return Container(
diff --git a/ln_jq_app/lib/pages/c_page/mine/view.dart b/ln_jq_app/lib/pages/c_page/mine/view.dart
index b816ca5..2543f33 100644
--- a/ln_jq_app/lib/pages/c_page/mine/view.dart
+++ b/ln_jq_app/lib/pages/c_page/mine/view.dart
@@ -1,10 +1,15 @@
+import 'dart:io';
+
+import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:getx_scaffold/common/index.dart';
import 'package:getx_scaffold/common/widgets/index.dart';
import 'package:ln_jq_app/common/login_util.dart';
+import 'package:ln_jq_app/common/styles/theme.dart';
import 'package:ln_jq_app/pages/c_page/message/view.dart';
+import 'package:ln_jq_app/pages/common/webview/view.dart';
import 'package:ln_jq_app/storage_service.dart';
import 'controller.dart';
@@ -38,6 +43,30 @@ class MinePage extends GetView {
_buildSafetyReminderCard(),
SizedBox(height: 24.h),
_buildLogoutButton(),
+ SizedBox(height: 15.h),
+ Text.rich(
+ TextSpan(
+ style: const TextStyle(color: Colors.grey, fontSize: 13),
+ children: [
+ TextSpan(
+ text: '《用户协议》',
+ style: TextStyle(color: Colors.blue, fontSize: 13),
+ recognizer: TapGestureRecognizer()
+ ..onTap = () {
+ openPage("用户协议", "https://lnh2e.com/user_agreement.html");
+ },
+ ),
+ TextSpan(
+ text: '《隐私政策》',
+ style: TextStyle(color: Colors.blue, fontSize: 13),
+ recognizer: TapGestureRecognizer()
+ ..onTap = () {
+ openPage("隐私政策", "https://lnh2e.com/privacy_agreement.html");
+ },
+ ),
+ ],
+ ),
+ ),
SizedBox(height: 95.h),
],
),
@@ -51,6 +80,15 @@ class MinePage extends GetView {
);
}
+ void openPage(String title, String url) {
+ if (Platform.isIOS) {
+ openWebPage(url);
+ return;
+ }
+ Get.to(() => const WebViewPage(), arguments: {'title': title, 'url': url});
+ }
+
+
/// 构建顶部用户信息卡片
Widget _buildUserInfoCard() {
return Card(
diff --git a/ln_jq_app/lib/pages/home/controller.dart b/ln_jq_app/lib/pages/home/controller.dart
index 998664f..ac8b213 100644
--- a/ln_jq_app/lib/pages/home/controller.dart
+++ b/ln_jq_app/lib/pages/home/controller.dart
@@ -29,14 +29,6 @@ class HomeController extends GetxController with BaseControllerMixin {
@override
void onInit() {
super.onInit();
-
- // 检查是否同意过隐私政策,只有同意后才初始化推送
- if (StorageService.to.isPrivacyAgreed) {
- requestPermission();
- initAliyunPush();
- addPushCallback();
- }
-
FlutterNativeSplash.remove();
log('page-init');
@@ -159,6 +151,13 @@ class HomeController extends GetxController with BaseControllerMixin {
// 根据登录状态和登录渠道返回不同的首页
Widget getHomePage() {
if (StorageService.to.isLoggedIn) {
+ // 检查是否同意过隐私政策,只有同意后才初始化推送
+ if (StorageService.to.isPrivacyAgreed) {
+ requestPermission();
+ initAliyunPush();
+ addPushCallback();
+ }
+
if (StorageService.to.loginChannel == LoginChannel.station) {
return B_BaseWidgetsPage();
} else if (StorageService.to.loginChannel == LoginChannel.driver) {
diff --git a/ln_jq_app/lib/pages/login/view.dart b/ln_jq_app/lib/pages/login/view.dart
index d23150c..e6b00fa 100644
--- a/ln_jq_app/lib/pages/login/view.dart
+++ b/ln_jq_app/lib/pages/login/view.dart
@@ -140,9 +140,29 @@ class _LoginPageState extends State with SingleTickerProviderStateMix
children: [
const SizedBox(height: 30),
// 根据 Tab 显示不同的输入框
- _tabController.index == 0
+ !_isAgreed
+ ? GestureDetector(
+ onTap: () => _handleLogin(controller),
+ behavior: HitTestBehavior.opaque,
+ child: Container(
+ width: double.infinity,
+ height: 55.h,
+ padding: const EdgeInsets.symmetric(
+ horizontal: 24,
+ ),
+ alignment: Alignment.centerLeft,
+ child: Text(
+ "请先阅读并同意用户协议和隐私政策",
+ style: TextStyle(
+ color: Colors.grey,
+ fontSize: 16,
+ ),
+ ),
+ ),
+ )
+ : (_tabController.index == 0
? _buildDriverInputFields(controller)
- : _buildStationInputFields(controller),
+ : _buildStationInputFields(controller)),
const SizedBox(height: 30),
// 统一登录按钮
@@ -150,7 +170,8 @@ class _LoginPageState extends State with SingleTickerProviderStateMix
const SizedBox(height: 10),
buildAgreement(),
- const SizedBox(height: 40),
+ const SizedBox(height: 80),
+ _buildFooterSlogan(),
],
),
),
@@ -159,7 +180,6 @@ class _LoginPageState extends State with SingleTickerProviderStateMix
),
),
),
- Positioned(left: 0, right: 0, bottom: 33.h, child: _buildFooterSlogan()),
if (AppTheme.is_show_host)
Positioned(
top: 40.h,
@@ -475,7 +495,6 @@ class _LoginPageState extends State with SingleTickerProviderStateMix
}
}
-
_processLoginResponse(responseData, "station", account);
} catch (e) {
dismissLoading();
@@ -539,7 +558,6 @@ class _LoginPageState extends State with SingleTickerProviderStateMix
Logger.d("暂时不处理 查询车辆信息失败的情况");
}
-
dismissLoading();
Get.offAll(() => BaseWidgetsPage());
} else {
@@ -596,9 +614,7 @@ class _LoginPageState extends State with SingleTickerProviderStateMix
}
// 添加推送回调
- _aliyunPush.addMessageReceiver(
- onNotificationOpened: _onNotificationOpened,
- );
+ _aliyunPush.addMessageReceiver(onNotificationOpened: _onNotificationOpened);
isPushInitialized = true;
Logger.d('推送服务初始化成功');
diff --git a/ln_jq_app/lib/pages/welcome/controller.dart b/ln_jq_app/lib/pages/welcome/controller.dart
index 151e33a..0a381bc 100644
--- a/ln_jq_app/lib/pages/welcome/controller.dart
+++ b/ln_jq_app/lib/pages/welcome/controller.dart
@@ -1,16 +1,103 @@
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:get/get.dart';
+import 'package:getx_scaffold/common/components/index.dart';
+import 'package:getx_scaffold/common/widgets/rich_text_x.dart';
import 'package:ln_jq_app/pages/home/view.dart';
import 'package:ln_jq_app/pages/login/view.dart';
import 'package:ln_jq_app/storage_service.dart';
+import '../common/webview/view.dart';
+
class WelcomeController extends GetxController {
@override
void onReady() {
super.onReady();
// 移除原生闪屏页(如果有的话)
FlutterNativeSplash.remove();
- _startTimer();
+
+ if (Platform.isAndroid) {
+ if (StorageService.to.isPrivacyAgreed) {
+ _startTimer();
+ } else {
+ showPrivacyDialog();
+ }
+ } else if (Platform.isIOS) {
+ _startTimer();
+ }
+ }
+
+ void showPrivacyDialog() {
+ DialogX.to.showConfirmDialog(
+ title: "个人信息保护提示",
+ content: _buildDialogContent(),
+ confirmText: '同意',
+ cancelText: '不同意',
+ onConfirm: () async {
+ await StorageService.to.savePrivacyAgreed(true);
+ Get.offAll(() => const HomePage());
+ },
+ onCancel: () {
+ DialogX.to.showConfirmDialog(
+ title: "温馨提示",
+ content: RichTextX(
+ children: [
+ TextSpanItem('如果您不同意'),
+ TextSpanItem(
+ '《隐私协议》',
+ onTap: () => openPage("隐私政策", "https://lnh2e.com/privacy_agreement.html"),
+ ),
+ TextSpanItem('和'),
+ TextSpanItem(
+ '《用户政策》',
+ onTap: () => openPage("用户协议", "https://lnh2e.com/user_agreement.html"),
+ ),
+ TextSpanItem(
+ ',很遗憾我们将无法为您提供服务。您需要同意以上协议后,才能使用本应用。\n\n我们将严格按照相关法律法规要求,坚决保护您的个人隐私和信息安全。',
+ ),
+ TextSpanItem('\n点击“同意”按钮,表示您已知情并同意以上协议。'),
+ ],
+ ),
+ confirmText: '同意并继续',
+ cancelText: '不同意',
+ onConfirm: () async {
+ await StorageService.to.savePrivacyAgreed(true);
+ Get.offAll(() => const HomePage());
+ },
+ onCancel: () {
+ SystemNavigator.pop();
+ },
+ );
+ },
+ );
+ }
+
+ Widget _buildDialogContent() {
+ return RichTextX(
+ children: [
+ TextSpanItem('欢迎使用小羚羚!\n我们将通过'),
+ TextSpanItem(
+ '《隐私协议》',
+ onTap: () => openPage("隐私政策", "https://lnh2e.com/privacy_agreement.html"),
+ ),
+ TextSpanItem('和'),
+ TextSpanItem(
+ '《用户政策》',
+ onTap: () => openPage("用户协议", "https://lnh2e.com/user_agreement.html"),
+ ),
+ TextSpanItem(
+ ',帮助您了解我们为您提供的服务、我们如何处理个人信息以及您享有的权利。我们会严格按照相关法律法规要求,采取各种安全措施来保护您的个人信息。',
+ ),
+ TextSpanItem('\n点击“同意”按钮,表示您已知情并同意以上协议。'),
+ ],
+ );
+ }
+
+ void openPage(String title, String url) {
+ Get.to(() => const WebViewPage(), arguments: {'title': title, 'url': url});
}
void _startTimer() {
diff --git a/ln_jq_app/pubspec.lock b/ln_jq_app/pubspec.lock
index 18de9b6..85b7f23 100644
--- a/ln_jq_app/pubspec.lock
+++ b/ln_jq_app/pubspec.lock
@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: archive
- sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff
+ sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "4.0.9"
+ version: "4.0.7"
args:
dependency: transitive
description:
@@ -45,10 +45,10 @@ packages:
dependency: transitive
description:
name: async
- sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.13.1"
+ version: "2.13.0"
badges:
dependency: transitive
description:
@@ -117,10 +117,10 @@ packages:
dependency: transitive
description:
name: cross_file
- sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
+ sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.3.5+2"
+ version: "0.3.5+1"
crypto:
dependency: transitive
description:
@@ -141,18 +141,18 @@ packages:
dependency: "direct main"
description:
name: cupertino_icons
- sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
+ sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.0.9"
+ version: "1.0.8"
dbus:
dependency: transitive
description:
name: dbus
- sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270
+ sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.7.12"
+ version: "0.7.11"
decimal:
dependency: transitive
description:
@@ -162,13 +162,13 @@ packages:
source: hosted
version: "3.2.4"
device_info_plus:
- dependency: transitive
+ dependency: "direct overridden"
description:
name: device_info_plus
- sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074
+ sha256: "4df8babf73058181227e18b08e6ea3520cf5fc5d796888d33b7cb0f33f984b7c"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "10.1.2"
+ version: "12.3.0"
device_info_plus_platform_interface:
dependency: transitive
description:
@@ -181,18 +181,18 @@ packages:
dependency: transitive
description:
name: dio
- sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c
+ sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9
url: "https://pub.flutter-io.cn"
source: hosted
- version: "5.9.2"
+ version: "5.9.0"
dio_web_adapter:
dependency: transitive
description:
name: dio_web_adapter
- sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340"
+ sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.1.2"
+ version: "2.1.1"
dropdown_button2:
dependency: "direct main"
description:
@@ -245,10 +245,10 @@ packages:
dependency: transitive
description:
name: ffi
- sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.2.0"
+ version: "2.1.4"
file:
dependency: transitive
description:
@@ -338,10 +338,10 @@ packages:
dependency: transitive
description:
name: flutter_inappwebview_internal_annotations
- sha256: e30fba942e3debea7b7e6cdd4f0f59ce89dd403a9865193e3221293b6d1544c6
+ sha256: "787171d43f8af67864740b6f04166c13190aa74a1468a1f1f1e9ee5b90c359cd"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.3.0"
+ version: "1.2.0"
flutter_inappwebview_ios:
dependency: transitive
description:
@@ -415,10 +415,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
- sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0"
+ sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.0.34"
+ version: "2.0.33"
flutter_screenutil:
dependency: transitive
description:
@@ -439,10 +439,10 @@ packages:
dependency: transitive
description:
name: flutter_svg
- sha256: "1ded017b39c8e15c8948ea855070a5ff8ff8b3d5e83f3446e02d6bb12add7ad9"
+ sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.2.4"
+ version: "2.2.3"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -585,10 +585,10 @@ packages:
dependency: "direct main"
description:
name: image
- sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce
+ sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "4.8.0"
+ version: "4.7.2"
image_picker:
dependency: "direct main"
description:
@@ -601,10 +601,10 @@ packages:
dependency: transitive
description:
name: image_picker_android
- sha256: "9eae0cbd672549dacc18df855c2a23782afe4854ada5190b7d63b30ee0b0d3fd"
+ sha256: "5e9bf126c37c117cf8094215373c6d561117a3cfb50ebc5add1a61dc6e224677"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.8.13+15"
+ version: "0.8.13+10"
image_picker_for_web:
dependency: transitive
description:
@@ -741,14 +741,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
- mobile_scanner:
- dependency: "direct main"
- description:
- name: mobile_scanner
- sha256: c92c26bf2231695b6d3477c8dcf435f51e28f87b1745966b1fe4c47a286171ce
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "7.2.0"
modal_bottom_sheet:
dependency: transitive
description:
@@ -809,10 +801,10 @@ packages:
dependency: transitive
description:
name: path_provider_android
- sha256: "149441ca6e4f38193b2e004c0ca6376a3d11f51fa5a77552d8bd4d2b0c0912ba"
+ sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.2.23"
+ version: "2.2.22"
path_provider_foundation:
dependency: transitive
description:
@@ -897,10 +889,10 @@ packages:
dependency: transitive
description:
name: petitparser
- sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
+ sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "7.0.2"
+ version: "7.0.1"
photo_view:
dependency: "direct main"
description:
@@ -937,10 +929,10 @@ packages:
dependency: transitive
description:
name: posix
- sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07"
+ sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "6.5.0"
+ version: "6.0.3"
pull_to_refresh:
dependency: "direct main"
description:
@@ -969,18 +961,18 @@ packages:
dependency: "direct main"
description:
name: shared_preferences
- sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf
+ sha256: "2939ae520c9024cb197fc20dee269cd8cdbf564c8b5746374ec6cacdc5169e64"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.5.5"
+ version: "2.5.4"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53
+ sha256: "83af5c682796c0f7719c2bbf74792d113e40ae97981b8f266fa84574573556bc"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.4.23"
+ version: "2.4.18"
shared_preferences_foundation:
dependency: transitive
description:
@@ -1001,10 +993,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_platform_interface
- sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9"
+ sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.4.2"
+ version: "2.4.1"
shared_preferences_web:
dependency: transitive
description:
@@ -1038,10 +1030,10 @@ packages:
dependency: transitive
description:
name: source_span
- sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.10.2"
+ version: "1.10.1"
stack_trace:
dependency: transitive
description:
@@ -1110,10 +1102,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
- sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572"
+ sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "6.3.29"
+ version: "6.3.28"
url_launcher_ios:
dependency: transitive
description:
@@ -1166,18 +1158,18 @@ packages:
dependency: transitive
description:
name: uuid
- sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
+ sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8
url: "https://pub.flutter-io.cn"
source: hosted
- version: "4.5.3"
+ version: "4.5.2"
vector_graphics:
dependency: transitive
description:
name: vector_graphics
- sha256: "7076216a10d5c390315fbe536a30f1254c341e7543e6c4c8a815e591307772b1"
+ sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.1.20"
+ version: "1.1.19"
vector_graphics_codec:
dependency: transitive
description:
@@ -1190,10 +1182,10 @@ packages:
dependency: transitive
description:
name: vector_graphics_compiler
- sha256: "5a88dd14c0954a5398af544651c7fb51b457a2a556949bfb25369b210ef73a74"
+ sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.2.0"
+ version: "1.1.19"
vector_math:
dependency: transitive
description:
@@ -1230,10 +1222,10 @@ packages:
dependency: transitive
description:
name: win32_registry
- sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
+ sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.1.5"
+ version: "2.1.0"
xdg_directories:
dependency: transitive
description:
diff --git a/ln_jq_app/pubspec.yaml b/ln_jq_app/pubspec.yaml
index 2b024bd..0ce56da 100644
--- a/ln_jq_app/pubspec.yaml
+++ b/ln_jq_app/pubspec.yaml
@@ -46,7 +46,6 @@ dependencies:
dropdown_button2: ^2.3.8
image_picker: ^1.2.1 # 用于从相册选择图片
image: ^4.5.4
- mobile_scanner: ^7.1.4
flutter_pdfview: 1.4.3 #显示pdf
photo_view: ^0.15.0 #操作图片
flutter_inappwebview: ^6.1.5 # WebView插件
@@ -66,6 +65,7 @@ dev_dependencies:
dependency_overrides:
intl: 0.19.0
+ device_info_plus: ^12.3.0
flutter: