-----------2.2.1----

main v2.2.1-60
hs 2025-09-19 17:59:47 +08:00
parent dc89f7039f
commit c73c8b8bc5
8 changed files with 170 additions and 163 deletions

View File

@ -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";

View File

@ -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>

View File

@ -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, // 使
); );
} }
} }

View File

@ -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 {

View File

@ -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,
);
},
),
],
), ),
), ),
), ],
], ),
), ),
), ),
], ],
), ),
// ), // ),

View File

@ -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);
} }
} }

View File

@ -150,10 +150,7 @@ class _DownloadProgressDialogState extends State<DownloadProgressDialog> {
], ],
), ),
actions: [ actions: [
TextButton(
onPressed: _onCancel,
child: const Text('取消'),
),
], ],
), ),
); );

View File

@ -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