parent
							
								
									dc89f7039f
								
							
						
					
					
						commit
						c73c8b8bc5
					
				|  | @ -491,9 +491,9 @@ | ||||||
| 				CLANG_ENABLE_MODULES = YES; | 				CLANG_ENABLE_MODULES = YES; | ||||||
| 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; | 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; | ||||||
| 				CODE_SIGN_IDENTITY = "Apple Development"; | 				CODE_SIGN_IDENTITY = "Apple Development"; | ||||||
| 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; | 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||||||
| 				CODE_SIGN_STYLE = Manual; | 				CODE_SIGN_STYLE = Manual; | ||||||
| 				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | 				CURRENT_PROJECT_VERSION = 59; | ||||||
| 				DEVELOPMENT_TEAM = ""; | 				DEVELOPMENT_TEAM = ""; | ||||||
| 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D; | 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D; | ||||||
| 				ENABLE_BITCODE = NO; | 				ENABLE_BITCODE = NO; | ||||||
|  | @ -503,10 +503,11 @@ | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| 				); | 				); | ||||||
|  | 				MARKETING_VERSION = 2.2.0; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = uni.UNI85F7A17; | 				PRODUCT_BUNDLE_IDENTIFIER = uni.UNI85F7A17; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
| 				PROVISIONING_PROFILE_SPECIFIER = ""; | 				PROVISIONING_PROFILE_SPECIFIER = ""; | ||||||
| 				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "qa-zsaq-des"; | 				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "qa-zsaq"; | ||||||
| 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				VERSIONING_SYSTEM = "apple-generic"; | 				VERSIONING_SYSTEM = "apple-generic"; | ||||||
|  | @ -685,9 +686,9 @@ | ||||||
| 				CLANG_ENABLE_MODULES = YES; | 				CLANG_ENABLE_MODULES = YES; | ||||||
| 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; | 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; | ||||||
| 				CODE_SIGN_IDENTITY = "Apple Development"; | 				CODE_SIGN_IDENTITY = "Apple Development"; | ||||||
| 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; | 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||||||
| 				CODE_SIGN_STYLE = Manual; | 				CODE_SIGN_STYLE = Manual; | ||||||
| 				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | 				CURRENT_PROJECT_VERSION = 59; | ||||||
| 				DEVELOPMENT_TEAM = ""; | 				DEVELOPMENT_TEAM = ""; | ||||||
| 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D; | 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D; | ||||||
| 				ENABLE_BITCODE = NO; | 				ENABLE_BITCODE = NO; | ||||||
|  | @ -697,10 +698,11 @@ | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| 				); | 				); | ||||||
|  | 				MARKETING_VERSION = 2.2.0; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = uni.UNI85F7A17; | 				PRODUCT_BUNDLE_IDENTIFIER = uni.UNI85F7A17; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
| 				PROVISIONING_PROFILE_SPECIFIER = ""; | 				PROVISIONING_PROFILE_SPECIFIER = ""; | ||||||
| 				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "qa-zsaq-des"; | 				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "qa-zsaq"; | ||||||
| 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||||||
| 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | 				SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
|  | @ -716,9 +718,9 @@ | ||||||
| 				CLANG_ENABLE_MODULES = YES; | 				CLANG_ENABLE_MODULES = YES; | ||||||
| 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; | 				CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; | ||||||
| 				CODE_SIGN_IDENTITY = "Apple Development"; | 				CODE_SIGN_IDENTITY = "Apple Development"; | ||||||
| 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; | 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||||||
| 				CODE_SIGN_STYLE = Manual; | 				CODE_SIGN_STYLE = Manual; | ||||||
| 				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | 				CURRENT_PROJECT_VERSION = 59; | ||||||
| 				DEVELOPMENT_TEAM = ""; | 				DEVELOPMENT_TEAM = ""; | ||||||
| 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D; | 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D; | ||||||
| 				ENABLE_BITCODE = NO; | 				ENABLE_BITCODE = NO; | ||||||
|  | @ -728,10 +730,11 @@ | ||||||
| 					"$(inherited)", | 					"$(inherited)", | ||||||
| 					"@executable_path/Frameworks", | 					"@executable_path/Frameworks", | ||||||
| 				); | 				); | ||||||
|  | 				MARKETING_VERSION = 2.2.0; | ||||||
| 				PRODUCT_BUNDLE_IDENTIFIER = uni.UNI85F7A17; | 				PRODUCT_BUNDLE_IDENTIFIER = uni.UNI85F7A17; | ||||||
| 				PRODUCT_NAME = "$(TARGET_NAME)"; | 				PRODUCT_NAME = "$(TARGET_NAME)"; | ||||||
| 				PROVISIONING_PROFILE_SPECIFIER = ""; | 				PROVISIONING_PROFILE_SPECIFIER = ""; | ||||||
| 				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "qa-zsaq-des"; | 				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "qa-zsaq"; | ||||||
| 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||||||
| 				SWIFT_VERSION = 5.0; | 				SWIFT_VERSION = 5.0; | ||||||
| 				VERSIONING_SYSTEM = "apple-generic"; | 				VERSIONING_SYSTEM = "apple-generic"; | ||||||
|  |  | ||||||
|  | @ -20,12 +20,12 @@ | ||||||
| 	<string>$(FLUTTER_BUILD_NAME)</string> | 	<string>$(FLUTTER_BUILD_NAME)</string> | ||||||
| 	<key>CFBundleSignature</key> | 	<key>CFBundleSignature</key> | ||||||
| 	<string>????</string> | 	<string>????</string> | ||||||
|  | 	<key>CFBundleVersion</key> | ||||||
|  | 	<string>$(FLUTTER_BUILD_NUMBER)</string> | ||||||
| 	<key>LSApplicationQueriesSchemes</key> | 	<key>LSApplicationQueriesSchemes</key> | ||||||
| 	<array> | 	<array> | ||||||
| 		<string>baidumap</string> | 		<string>baidumap</string> | ||||||
| 	</array> | 	</array> | ||||||
| 	<key>CFBundleVersion</key> |  | ||||||
| 	<string>$(FLUTTER_BUILD_NUMBER)</string> |  | ||||||
| 	<key>LSRequiresIPhoneOS</key> | 	<key>LSRequiresIPhoneOS</key> | ||||||
| 	<true/> | 	<true/> | ||||||
| 	<key>NFCReaderUsageDescription</key> | 	<key>NFCReaderUsageDescription</key> | ||||||
|  | @ -77,17 +77,10 @@ | ||||||
| 	<false/> | 	<false/> | ||||||
| 	<key>UISupportedInterfaceOrientations</key> | 	<key>UISupportedInterfaceOrientations</key> | ||||||
| 	<array> | 	<array> | ||||||
| 		<string>UIInterfaceOrientationPortrait</string> |  | ||||||
| 		<string>UIInterfaceOrientationPortraitUpsideDown</string> |  | ||||||
| 		<string>UIInterfaceOrientationLandscapeLeft</string> | 		<string>UIInterfaceOrientationLandscapeLeft</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeRight</string> | 		<string>UIInterfaceOrientationLandscapeRight</string> | ||||||
| 	</array> |  | ||||||
| 	<key>UISupportedInterfaceOrientations~ipad</key> |  | ||||||
| 	<array> |  | ||||||
| 		<string>UIInterfaceOrientationPortrait</string> | 		<string>UIInterfaceOrientationPortrait</string> | ||||||
| 		<string>UIInterfaceOrientationPortraitUpsideDown</string> | 		<string>UIInterfaceOrientationPortraitUpsideDown</string> | ||||||
| 		<string>UIInterfaceOrientationLandscapeLeft</string> |  | ||||||
| 		<string>UIInterfaceOrientationLandscapeRight</string> |  | ||||||
| 	</array> | 	</array> | ||||||
| 	<key>com.apple.developer.nfc.readersession.formats</key> | 	<key>com.apple.developer.nfc.readersession.formats</key> | ||||||
| 	<array> | 	<array> | ||||||
|  |  | ||||||
|  | @ -2,8 +2,10 @@ import 'package:flutter/material.dart'; | ||||||
| import '../tools/tools.dart'; | import '../tools/tools.dart'; | ||||||
| 
 | 
 | ||||||
| /// 通用列表卡片组件: | /// 通用列表卡片组件: | ||||||
| /// - 两两为一组,优先尝试同一行显示左右两列并左/右对齐; | /// - 两两为一组,固定左右布局,平均分配宽度 | ||||||
| /// - 如放不下,则自动拆成两行,上行左对齐,下行右对齐。 | /// - 左侧文字左对齐,右侧文字右对齐 | ||||||
|  | /// - 文字过多时各自自动换行 | ||||||
|  | /// - 如果一行只有一个元素,靠左显示 | ||||||
| class DannerRepainItem extends StatelessWidget { | class DannerRepainItem extends StatelessWidget { | ||||||
|   final String title; |   final String title; | ||||||
|   final List<String> details; |   final List<String> details; | ||||||
|  | @ -50,70 +52,12 @@ class DannerRepainItem extends StatelessWidget { | ||||||
|             ), |             ), | ||||||
|             const Divider(height: 1), |             const Divider(height: 1), | ||||||
| 
 | 
 | ||||||
|             // — 详情区:动态两列/换行 — |             // — 详情区:固定左右布局 — | ||||||
|             Padding( |             Padding( | ||||||
|               padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15), |               padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15), | ||||||
|               child: LayoutBuilder(builder: (context, constraints) { |               child: Column( | ||||||
|                 // 间距:你可以根据设计随意调整 |                 children: _buildDetailRows(), | ||||||
|                 const double horizontalGap = 20; |               ), | ||||||
|                 const double verticalGap = 5; |  | ||||||
| 
 |  | ||||||
|                 List<Widget> rows = []; |  | ||||||
|                 for (int i = 0; i < details.length; i += 2) { |  | ||||||
|                   final left = details[i]; |  | ||||||
|                   final right = (i + 1 < details.length) ? details[i + 1] : ''; |  | ||||||
| 
 |  | ||||||
|                   // 测量文字宽度 |  | ||||||
|                   final leftPainter = TextPainter( |  | ||||||
|                     text: TextSpan(text: left, style: HhTextStyleUtils.secondaryTitleStyle), |  | ||||||
|                     maxLines: 1, |  | ||||||
|                     textDirection: TextDirection.ltr, |  | ||||||
|                   )..layout(); |  | ||||||
|                   final rightPainter = TextPainter( |  | ||||||
|                     text: TextSpan(text: right, style: HhTextStyleUtils.secondaryTitleStyle), |  | ||||||
|                     maxLines: 1, |  | ||||||
|                     textDirection: TextDirection.ltr, |  | ||||||
|                   )..layout(); |  | ||||||
| 
 |  | ||||||
|                   final canFitOneLine = right.isNotEmpty && |  | ||||||
|                       (leftPainter.width + horizontalGap + rightPainter.width) |  | ||||||
|                           <= constraints.maxWidth; |  | ||||||
| 
 |  | ||||||
|                   if (right.isNotEmpty && canFitOneLine) { |  | ||||||
|                     // 同行显示,左右对齐 |  | ||||||
|                     rows.add(Padding( |  | ||||||
|                       padding: EdgeInsets.only(bottom: verticalGap), |  | ||||||
|                       child: Row( |  | ||||||
|                         mainAxisAlignment: MainAxisAlignment.spaceBetween, |  | ||||||
|                         children: [ |  | ||||||
|                           _DetailText(left), |  | ||||||
|                           _DetailText(right), |  | ||||||
|                         ], |  | ||||||
|                       ), |  | ||||||
|                     )); |  | ||||||
|                   } else { |  | ||||||
|                     // 拆为两行 |  | ||||||
|                     rows.add(Padding( |  | ||||||
|                       padding: EdgeInsets.only(bottom: verticalGap), |  | ||||||
|                       child: Column( |  | ||||||
|                         crossAxisAlignment: CrossAxisAlignment.stretch, |  | ||||||
|                         children: [ |  | ||||||
|                           // 上行:左对齐 |  | ||||||
|                           _DetailText(left), |  | ||||||
|                           if (right.isNotEmpty) |  | ||||||
|                           // 下行:右对齐 |  | ||||||
|                             Align( |  | ||||||
|                               alignment: Alignment.centerRight, |  | ||||||
|                               child: _DetailText(right), |  | ||||||
|                             ), |  | ||||||
|                         ], |  | ||||||
|                       ), |  | ||||||
|                     )); |  | ||||||
|                   } |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 return Column(children: rows); |  | ||||||
|               }), |  | ||||||
|             ), |             ), | ||||||
| 
 | 
 | ||||||
|             // — 底部标签区 — |             // — 底部标签区 — | ||||||
|  | @ -127,21 +71,86 @@ class DannerRepainItem extends StatelessWidget { | ||||||
|       ), |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   // 构建详情行 | ||||||
|  |   List<Widget> _buildDetailRows() { | ||||||
|  |     List<Widget> rows = []; | ||||||
|  |     for (int i = 0; i < details.length; i += 2) { | ||||||
|  |       final left = details[i]; | ||||||
|  |       final right = (i + 1 < details.length) ? details[i + 1] : ''; | ||||||
|  | 
 | ||||||
|  |       rows.add( | ||||||
|  |         Padding( | ||||||
|  |           padding: const EdgeInsets.only(bottom: 8), | ||||||
|  |           child: _DetailRow(left: left, right: right), | ||||||
|  |         ), | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |     return rows; | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Detail 文本封装: | /// 详情行组件:固定左右布局,平均分配宽度,各自换行 | ||||||
| /// 默认一行不换行;若超出则让整个组件撑宽,由外层判断拆行。 | /// 如果只有左侧文本,则靠左显示 | ||||||
|  | class _DetailRow extends StatelessWidget { | ||||||
|  |   final String left; | ||||||
|  |   final String right; | ||||||
|  | 
 | ||||||
|  |   const _DetailRow({ | ||||||
|  |     Key? key, | ||||||
|  |     required this.left, | ||||||
|  |     required this.right, | ||||||
|  |   }) : super(key: key); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     // 如果右侧文本为空,只显示左侧文本,靠左显示 | ||||||
|  |     if (right.isEmpty) { | ||||||
|  |       return Align( | ||||||
|  |         alignment: Alignment.centerLeft, | ||||||
|  |         child: _DetailText(left, textAlign: TextAlign.left), | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return Row( | ||||||
|  |       crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |       children: [ | ||||||
|  |         // 左侧文本 - 占50%宽度 | ||||||
|  |         Expanded( | ||||||
|  |           flex: 1, | ||||||
|  |           child: _DetailText(left, textAlign: TextAlign.left), | ||||||
|  |         ), | ||||||
|  | 
 | ||||||
|  |         // 中间间距 | ||||||
|  |         const SizedBox(width: 10), | ||||||
|  | 
 | ||||||
|  |         // 右侧文本 - 占50%宽度 | ||||||
|  |         Expanded( | ||||||
|  |           flex: 1, | ||||||
|  |           child: _DetailText(right, textAlign: TextAlign.right), | ||||||
|  |         ), | ||||||
|  |       ], | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Detail 文本封装:支持自动换行和指定的对齐方式 | ||||||
| class _DetailText extends StatelessWidget { | class _DetailText extends StatelessWidget { | ||||||
|   final String text; |   final String text; | ||||||
|   const _DetailText(this.text, {Key? key}) : super(key: key); |   final TextAlign textAlign; | ||||||
|  | 
 | ||||||
|  |   const _DetailText(this.text, { | ||||||
|  |     Key? key, | ||||||
|  |     required this.textAlign, | ||||||
|  |   }) : super(key: key); | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return Text( |     return Text( | ||||||
|       text, |       text, | ||||||
|       style: HhTextStyleUtils.secondaryTitleStyle, |       style: HhTextStyleUtils.secondaryTitleStyle, | ||||||
|       softWrap: false, |       softWrap: true, // 允许换行 | ||||||
|       overflow: TextOverflow.visible, |       textAlign: textAlign, // 使用指定的对齐方式 | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | @ -247,7 +247,6 @@ class HomePageState extends State<HomePage> { | ||||||
|     // 拉取其他数据 + 隐患列表(当 hiddenList 为空时显示 loading,否则不显示) |     // 拉取其他数据 + 隐患列表(当 hiddenList 为空时显示 loading,否则不显示) | ||||||
|     _fetchData(); |     _fetchData(); | ||||||
|    _fetchHiddenList(showLoading: hiddenList.isEmpty); |    _fetchHiddenList(showLoading: hiddenList.isEmpty); | ||||||
|     fetchAndSaveBd09(context); |  | ||||||
|     /// 清单列表 |     /// 清单列表 | ||||||
|     final data = await ApiService.getListData(); |     final data = await ApiService.getListData(); | ||||||
|     if (data['result'] == 'success') { |     if (data['result'] == 'success') { | ||||||
|  | @ -258,6 +257,7 @@ class HomePageState extends State<HomePage> { | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     fetchAndSaveBd09(context); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   Future<void> _onRefresh() async { |   Future<void> _onRefresh() async { | ||||||
|  |  | ||||||
|  | @ -260,84 +260,87 @@ class _LoginPageState extends State<LoginPage> { | ||||||
| 
 | 
 | ||||||
|                       Padding( |                       Padding( | ||||||
|                         padding: const EdgeInsets.only(bottom: 10), |                         padding: const EdgeInsets.only(bottom: 10), | ||||||
|                         child: Row( |                         child: Center( // 关键:把 Row 放到 Center 中 | ||||||
|                           children: [ |                           child: Row( | ||||||
|                             Checkbox( |                             mainAxisSize: MainAxisSize.min, // Row 根据子项宽度自适应,不再铺满父宽度 | ||||||
|                               value: _agreed, |                             crossAxisAlignment: CrossAxisAlignment.center, | ||||||
|                               activeColor: Colors.white, |                             children: [ | ||||||
|                               checkColor: Colors.blueAccent, |                               Checkbox( | ||||||
|                               side: const BorderSide(color: Colors.white), |                                 value: _agreed, | ||||||
|                               onChanged:(value) { |                                 activeColor: Colors.white, | ||||||
|                                 setState(() { |                                 checkColor: Colors.blueAccent, | ||||||
|                                   _agreed = value??false; |                                 side: const BorderSide(color: Colors.white), | ||||||
|                                 }); |                                 onChanged: (value) { | ||||||
|  |                                   setState(() { | ||||||
|  |                                     _agreed = value ?? false; | ||||||
|  |                                   }); | ||||||
|  |                                 }, | ||||||
|  |                               ), | ||||||
| 
 | 
 | ||||||
|                               }, |                               // 用 Flexible 而非 Expanded,且给 RichText 一个居中对齐 | ||||||
|                                   // (v) => setState(() => _agreed = v ?? false), |                               Flexible( | ||||||
|                             ), |                                 fit: FlexFit.loose, | ||||||
|                             Expanded( |                                 child: RichText( | ||||||
|                               child: RichText( |                                   textAlign: TextAlign.center, // 使文本在它的可用宽度内居中 | ||||||
|                                 text: TextSpan( |                                   text: TextSpan( | ||||||
|                                   children: [ |                                     children: [ | ||||||
|                                     TextSpan( |                                       const TextSpan( | ||||||
|                                       text: '我已阅读并同意', |                                         text: '我已阅读并同意', | ||||||
|                                       style: const TextStyle( |                                         style: TextStyle( | ||||||
|                                         color: Colors.white, |                                           color: Colors.white, | ||||||
|                                         fontSize: 12, |                                           fontSize: 12, | ||||||
|  |                                         ), | ||||||
|                                       ), |                                       ), | ||||||
|                                     ), |                                       TextSpan( | ||||||
|                                     TextSpan( |                                         text: '《服务协议》', | ||||||
|                                       text: '《服务协议》', |                                         style: const TextStyle( | ||||||
|                                       style: const TextStyle( |                                           color: Color(0xFF0D1D8C), | ||||||
|                                         color: Color(0xFF0D1D8C), |                                           fontSize: 12, | ||||||
|                                         fontSize: 12, |                                         ), | ||||||
|  |                                         recognizer: TapGestureRecognizer() | ||||||
|  |                                           ..onTap = () { | ||||||
|  |                                             pushPage( | ||||||
|  |                                               const WebViewPage( | ||||||
|  |                                                 name: "用户服务协议", | ||||||
|  |                                                 url: 'http://47.92.102.56:7811/file/xieyi/zsyhxy.htm', | ||||||
|  |                                               ), | ||||||
|  |                                               context, | ||||||
|  |                                             ); | ||||||
|  |                                           }, | ||||||
|                                       ), |                                       ), | ||||||
|                                       recognizer: |                                       const TextSpan( | ||||||
|                                           TapGestureRecognizer() |                                         text: '和', | ||||||
|                                             ..onTap = () { |                                         style: TextStyle( | ||||||
|                                               pushPage( |                                           color: Colors.white, | ||||||
|                                                 const WebViewPage( |                                           fontSize: 12, | ||||||
|                                                   name: "用户服务协议", |                                         ), | ||||||
|                                                   url: |  | ||||||
|                                                       'http://47.92.102.56:7811/file/xieyi/zsyhxy.htm', // 替换为目标网址 |  | ||||||
|                                                 ), |  | ||||||
|                                                 context, |  | ||||||
|                                               ); |  | ||||||
|                                             }, |  | ||||||
|                                     ), |  | ||||||
|                                     TextSpan( |  | ||||||
|                                       text: '和', |  | ||||||
|                                       style: const TextStyle( |  | ||||||
|                                         color: Colors.white, |  | ||||||
|                                         fontSize: 12, |  | ||||||
|                                       ), |                                       ), | ||||||
|                                     ), |                                       TextSpan( | ||||||
|                                     TextSpan( |                                         text: '《隐私政策》', | ||||||
|                                       text: '《隐私政策》', |                                         style: const TextStyle( | ||||||
|                                       style: const TextStyle( |                                           color: Color(0xFF0D1D8C), | ||||||
|                                         color: Color(0xFF0D1D8C), |                                           fontSize: 12, | ||||||
|                                         fontSize: 12, |                                         ), | ||||||
|  |                                         recognizer: TapGestureRecognizer() | ||||||
|  |                                           ..onTap = () { | ||||||
|  |                                             pushPage( | ||||||
|  |                                               const WebViewPage( | ||||||
|  |                                                 name: "隐私政策", | ||||||
|  |                                                 url: 'http://47.92.102.56:7811/file/xieyi/zsysq.htm', | ||||||
|  |                                               ), | ||||||
|  |                                               context, | ||||||
|  |                                             ); | ||||||
|  |                                           }, | ||||||
|                                       ), |                                       ), | ||||||
|                                       recognizer: |                                     ], | ||||||
|                                           TapGestureRecognizer() |                                   ), | ||||||
|                                             ..onTap = () { |  | ||||||
|                                               pushPage( |  | ||||||
|                                                 const WebViewPage( |  | ||||||
|                                                   name: "隐私政策", |  | ||||||
|                                                   url: |  | ||||||
|                                                       'http://47.92.102.56:7811/file/xieyi/zsysq.htm', // 替换为目标网址 |  | ||||||
|                                                 ), |  | ||||||
|                                                 context, |  | ||||||
|                                               ); |  | ||||||
|                                             }, |  | ||||||
|                                     ), |  | ||||||
|                                   ], |  | ||||||
|                                 ), |                                 ), | ||||||
|                               ), |                               ), | ||||||
|                             ), |                             ], | ||||||
|                           ], |                           ), | ||||||
|                         ), |                         ), | ||||||
|                       ), |                       ), | ||||||
|  | 
 | ||||||
|                     ], |                     ], | ||||||
|                   ), |                   ), | ||||||
|                 // ), |                 // ), | ||||||
|  |  | ||||||
|  | @ -622,6 +622,7 @@ Future<void> openAppStore() async { | ||||||
| 
 | 
 | ||||||
|   if (await canLaunchUrl(uri)) { |   if (await canLaunchUrl(uri)) { | ||||||
|     await launchUrl(uri, mode: LaunchMode.externalApplication); |     await launchUrl(uri, mode: LaunchMode.externalApplication); | ||||||
|  |     exit(0); | ||||||
|   } else { |   } else { | ||||||
|     // 回退到 https 链接(在浏览器中打开 App Store 页面) |     // 回退到 https 链接(在浏览器中打开 App Store 页面) | ||||||
|     final Uri webUri = Uri.parse('https://itunes.apple.com/app/id$appId'); |     final Uri webUri = Uri.parse('https://itunes.apple.com/app/id$appId'); | ||||||
|  | @ -630,5 +631,6 @@ Future<void> openAppStore() async { | ||||||
|     } else { |     } else { | ||||||
|       throw 'Could not launch App Store for app id $appId'; |       throw 'Could not launch App Store for app id $appId'; | ||||||
|     } |     } | ||||||
|  |     exit(0); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | @ -150,10 +150,7 @@ class _DownloadProgressDialogState extends State<DownloadProgressDialog> { | ||||||
|           ], |           ], | ||||||
|         ), |         ), | ||||||
|         actions: [ |         actions: [ | ||||||
|           TextButton( | 
 | ||||||
|             onPressed: _onCancel, |  | ||||||
|             child: const Text('取消'), |  | ||||||
|           ), |  | ||||||
|         ], |         ], | ||||||
|       ), |       ), | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev | ||||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||||
| # In Windows, build-name is used as the major, minor, and patch parts | # In Windows, build-name is used as the major, minor, and patch parts | ||||||
| # of the product and file versions while build-number is used as the build suffix. | # of the product and file versions while build-number is used as the build suffix. | ||||||
| version: 2.2.0+59 | version: 2.2.1+60 | ||||||
| 
 | 
 | ||||||
| environment: | environment: | ||||||
|   sdk: ^3.7.0 |   sdk: ^3.7.0 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue