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: