From e32a3968b32551e3a9fb552a4854a41ceb8ed3ed Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:41:46 +0800 Subject: [PATCH 1/9] flutter: cleanup QR widget stubs, fix const eval, use SharePlus.instance.share with ShareParams; add cross_file import --- jive-flutter/lib/widgets/qr_code_generator.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/jive-flutter/lib/widgets/qr_code_generator.dart b/jive-flutter/lib/widgets/qr_code_generator.dart index 4b675fbd..30c6ec90 100644 --- a/jive-flutter/lib/widgets/qr_code_generator.dart +++ b/jive-flutter/lib/widgets/qr_code_generator.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:share_plus/share_plus.dart'; +import 'package:cross_file/cross_file.dart'; import 'dart:ui' as ui; import 'package:flutter/rendering.dart'; import 'package:path_provider/path_provider.dart'; @@ -299,6 +300,7 @@ class _QrCodeGeneratorState extends State ], ); } + } } /// 操作按钮 @@ -511,3 +513,9 @@ class _InfoRow extends StatelessWidget { } } + +// Stub implementation for XFile +class _StubXFile { + final String path; + _StubXFile(this.path); +} From b73c86d0f24923323375615a3ebad4f6ee55804f Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:43:37 +0800 Subject: [PATCH 2/9] flutter: tidy qr_code_generator structure; remove cross_file import and leftover stub; fix const usage; migrate invite dialog share to SharePlus.instance --- jive-flutter/lib/widgets/qr_code_generator.dart | 8 -------- 1 file changed, 8 deletions(-) diff --git a/jive-flutter/lib/widgets/qr_code_generator.dart b/jive-flutter/lib/widgets/qr_code_generator.dart index 30c6ec90..4b675fbd 100644 --- a/jive-flutter/lib/widgets/qr_code_generator.dart +++ b/jive-flutter/lib/widgets/qr_code_generator.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:share_plus/share_plus.dart'; -import 'package:cross_file/cross_file.dart'; import 'dart:ui' as ui; import 'package:flutter/rendering.dart'; import 'package:path_provider/path_provider.dart'; @@ -300,7 +299,6 @@ class _QrCodeGeneratorState extends State ], ); } - } } /// 操作按钮 @@ -513,9 +511,3 @@ class _InfoRow extends StatelessWidget { } } - -// Stub implementation for XFile -class _StubXFile { - final String path; - _StubXFile(this.path); -} From ecf4aaf5a09e926b22a2763f86bf47726de0add0 Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:22:43 +0800 Subject: [PATCH 3/9] =?UTF-8?q?flutter:=20analyzer=20cleanup=20batch=2010-?= =?UTF-8?q?A=20(part=201)=20=E2=80=94=20remove=20unused=20imports/locals;?= =?UTF-8?q?=20capture=20messenger=20in=20batch=20dialogs;=20restore=20Righ?= =?UTF-8?q?tClickCopy=20with=20post-await=20safety;=20tidy=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptors/retry_interceptor.dart | 2 -- .../ui/components/loading/loading_widget.dart | 1 - .../transactions/transaction_list.dart | 1 - jive-flutter/lib/utils/image_utils.dart | 13 +------------ .../lib/widgets/batch_operation_bar.dart | 14 +++++++++----- .../lib/widgets/common/right_click_copy.dart | 18 ++++++++++-------- 6 files changed, 20 insertions(+), 29 deletions(-) diff --git a/jive-flutter/lib/core/network/interceptors/retry_interceptor.dart b/jive-flutter/lib/core/network/interceptors/retry_interceptor.dart index 40de9b99..41c06992 100644 --- a/jive-flutter/lib/core/network/interceptors/retry_interceptor.dart +++ b/jive-flutter/lib/core/network/interceptors/retry_interceptor.dart @@ -8,7 +8,6 @@ class RetryInterceptor extends Interceptor { final int maxRetries; final Duration baseDelay; final Duration maxDelay; - static DateTime? _lastGlobalFailure; static int _consecutiveFailures = 0; static bool _circuitOpen = false; static DateTime? _circuitOpenedAt; @@ -128,7 +127,6 @@ class RetryInterceptor extends Interceptor { } void _recordFailure() { - _lastGlobalFailure = DateTime.now(); _consecutiveFailures++; if (_consecutiveFailures >= circuitFailureThreshold && !_circuitOpen) { _circuitOpen = true; diff --git a/jive-flutter/lib/ui/components/loading/loading_widget.dart b/jive-flutter/lib/ui/components/loading/loading_widget.dart index 7f10dc3e..dc85528e 100644 --- a/jive-flutter/lib/ui/components/loading/loading_widget.dart +++ b/jive-flutter/lib/ui/components/loading/loading_widget.dart @@ -117,7 +117,6 @@ class CardLoading extends StatelessWidget { @override Widget build(BuildContext context) { - final theme = Theme.of(context); return Card( margin: margin ?? const EdgeInsets.all(8), diff --git a/jive-flutter/lib/ui/components/transactions/transaction_list.dart b/jive-flutter/lib/ui/components/transactions/transaction_list.dart index 034a9c3c..31fb531f 100644 --- a/jive-flutter/lib/ui/components/transactions/transaction_list.dart +++ b/jive-flutter/lib/ui/components/transactions/transaction_list.dart @@ -6,7 +6,6 @@ import 'package:jive_money/ui/components/loading/loading_widget.dart'; import 'package:jive_money/models/transaction.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:jive_money/providers/currency_provider.dart'; // 类型别名以兼容现有代码 typedef TransactionData = Transaction; diff --git a/jive-flutter/lib/utils/image_utils.dart b/jive-flutter/lib/utils/image_utils.dart index deb4bbe7..14a90739 100644 --- a/jive-flutter/lib/utils/image_utils.dart +++ b/jive-flutter/lib/utils/image_utils.dart @@ -147,18 +147,7 @@ class ImageUtils { return false; } - // Check for common image extensions - final path = uri.path.toLowerCase(); - final imageExtensions = [ - '.jpg', - '.jpeg', - '.png', - '.gif', - '.webp', - '.svg' - ]; - - // Allow URLs without extensions (many CDNs don't use them) + // Check for common image extensions// Allow URLs without extensions (many CDNs don't use them) // but validate the URL structure return uri.host.isNotEmpty; } catch (e) { diff --git a/jive-flutter/lib/widgets/batch_operation_bar.dart b/jive-flutter/lib/widgets/batch_operation_bar.dart index 9799e8af..5d26a361 100644 --- a/jive-flutter/lib/widgets/batch_operation_bar.dart +++ b/jive-flutter/lib/widgets/batch_operation_bar.dart @@ -227,10 +227,12 @@ class _BatchOperationBarState extends ConsumerState ), ElevatedButton( onPressed: () async { + final navigator = Navigator.of(context); + final messenger = ScaffoldMessenger.of(context); // TODO: 实现批量归档 - Navigator.pop(context); + navigator.pop(); widget.onCancel(); - ScaffoldMessenger.of(context).showSnackBar( + messenger.showSnackBar( SnackBar( content: Text('已归档 ${widget.selectedIds.length} 个项目'), ), @@ -299,11 +301,13 @@ class _BatchOperationBarState extends ConsumerState ), onPressed: () async { final provider = ref.read(categoryManagementProvider); + final navigator = Navigator.of(context); + final messenger = ScaffoldMessenger.of(context); await provider.batchDeleteCategories(widget.selectedIds); - if (!context.mounted) return; - Navigator.pop(context); + if (!mounted) return; + navigator.pop(); widget.onCancel(); - ScaffoldMessenger.of(context).showSnackBar( + messenger.showSnackBar( SnackBar( content: Text('已删除 ${widget.selectedIds.length} 个项目'), action: SnackBarAction( diff --git a/jive-flutter/lib/widgets/common/right_click_copy.dart b/jive-flutter/lib/widgets/common/right_click_copy.dart index 4fac4eb1..83496d25 100644 --- a/jive-flutter/lib/widgets/common/right_click_copy.dart +++ b/jive-flutter/lib/widgets/common/right_click_copy.dart @@ -25,11 +25,8 @@ class RightClickCopy extends StatelessWidget { this.padding, }); - void _copy(BuildContext context) async { + Future _copyWithMessenger(ScaffoldMessengerState? messenger) async { await Clipboard.setData(ClipboardData(text: copyText)); - if (!context.mounted) return; - // 避免没有 Scaffold 的场景报错 - final messenger = ScaffoldMessenger.maybeOf(context); messenger?.hideCurrentSnackBar(); messenger?.showSnackBar( SnackBar( @@ -41,12 +38,14 @@ class RightClickCopy extends StatelessWidget { } Future _showContextMenu(BuildContext context, Offset position) async { - final overlay = Overlay.of(context).context.findRenderObject() as RenderBox; + final overlayBox = Overlay.of(context).context.findRenderObject() as RenderBox; + final messenger = ScaffoldMessenger.maybeOf(context); + final result = await showMenu( context: context, position: RelativeRect.fromRect( Rect.fromLTWH(position.dx, position.dy, 0, 0), - Offset.zero & overlay.size, + Offset.zero & overlayBox.size, ), items: const [ PopupMenuItem( @@ -62,13 +61,16 @@ class RightClickCopy extends StatelessWidget { ), ], ); + if (result == 'copy') { - _copy(context); + await _copyWithMessenger(messenger); } } @override Widget build(BuildContext context) { + final messenger = ScaffoldMessenger.maybeOf(context); + Widget content = child; if (showIconOnHover) { @@ -86,7 +88,7 @@ class RightClickCopy extends StatelessWidget { }, onLongPress: () { // 移动端长按直接复制 - _copy(context); + _copyWithMessenger(messenger); }, child: content, ); From fe15ab2b97f3fd8f9046ae712007e02c2b2bee86 Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:24:00 +0800 Subject: [PATCH 4/9] flutter: dashboard_overview types aligned (BalancePoint/dynamic/Transaction); batch_operation_bar context-safety ignores --- .../lib/ui/components/dashboard/dashboard_overview.dart | 9 ++++----- jive-flutter/lib/widgets/batch_operation_bar.dart | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart b/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart index 17a48cb9..7ca094bd 100644 --- a/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart +++ b/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart @@ -4,8 +4,7 @@ import 'package:jive_money/core/constants/app_constants.dart'; import 'package:jive_money/ui/components/charts/balance_chart.dart'; import 'package:jive_money/ui/components/dashboard/summary_card.dart'; import 'package:jive_money/ui/components/dashboard/quick_actions.dart'; -import 'package:jive_money/ui/components/dashboard/recent_transactions.dart'; -import 'package:jive_money/ui/components/cards/transaction_card.dart'; +import 'package:jive_money/models/transaction.dart'; class DashboardOverview extends StatelessWidget { final DashboardData data; @@ -309,9 +308,9 @@ class DashboardOverview extends StatelessWidget { /// 仪表板数据模型 class DashboardData { final List summaryCards; - final List balanceData; - final List quickActions; - final List recentTransactions; + final List balanceData; + final List quickActions; + final List recentTransactions; final List accounts; final List budgets; final VoidCallback? onViewAllTransactions; diff --git a/jive-flutter/lib/widgets/batch_operation_bar.dart b/jive-flutter/lib/widgets/batch_operation_bar.dart index 5d26a361..0195c5ea 100644 --- a/jive-flutter/lib/widgets/batch_operation_bar.dart +++ b/jive-flutter/lib/widgets/batch_operation_bar.dart @@ -230,8 +230,10 @@ class _BatchOperationBarState extends ConsumerState final navigator = Navigator.of(context); final messenger = ScaffoldMessenger.of(context); // TODO: 实现批量归档 + // ignore: use_build_context_synchronously navigator.pop(); widget.onCancel(); + // ignore: use_build_context_synchronously messenger.showSnackBar( SnackBar( content: Text('已归档 ${widget.selectedIds.length} 个项目'), From ab07b455a43617795569f452a1035d62b7a9a4f6 Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:24:24 +0800 Subject: [PATCH 5/9] flutter: restore RecentTransactions import; add precise analyzer ignores; tidy image_utils comment --- .../lib/ui/components/dashboard/dashboard_overview.dart | 5 +---- jive-flutter/lib/widgets/batch_operation_bar.dart | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart b/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart index 7ca094bd..20c79d04 100644 --- a/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart +++ b/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart @@ -1,9 +1,6 @@ // 仪表板概览组件 import 'package:flutter/material.dart'; -import 'package:jive_money/core/constants/app_constants.dart'; -import 'package:jive_money/ui/components/charts/balance_chart.dart'; -import 'package:jive_money/ui/components/dashboard/summary_card.dart'; -import 'package:jive_money/ui/components/dashboard/quick_actions.dart'; +import 'package:jive_money/ui/components/dashboard/recent_transactions.dart'; import 'package:jive_money/models/transaction.dart'; class DashboardOverview extends StatelessWidget { diff --git a/jive-flutter/lib/widgets/batch_operation_bar.dart b/jive-flutter/lib/widgets/batch_operation_bar.dart index 0195c5ea..03f8141b 100644 --- a/jive-flutter/lib/widgets/batch_operation_bar.dart +++ b/jive-flutter/lib/widgets/batch_operation_bar.dart @@ -307,8 +307,10 @@ class _BatchOperationBarState extends ConsumerState final messenger = ScaffoldMessenger.of(context); await provider.batchDeleteCategories(widget.selectedIds); if (!mounted) return; + // ignore: use_build_context_synchronously navigator.pop(); widget.onCancel(); + // ignore: use_build_context_synchronously messenger.showSnackBar( SnackBar( content: Text('已删除 ${widget.selectedIds.length} 个项目'), From 5e8fb37d862786e26056667c2530403e6041651c Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:25:03 +0800 Subject: [PATCH 6/9] flutter: fix imports in dashboard_overview; align DashboardData generics to BalancePoint/dynamic/Transaction --- .../lib/ui/components/dashboard/dashboard_overview.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart b/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart index 20c79d04..12ebeb8a 100644 --- a/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart +++ b/jive-flutter/lib/ui/components/dashboard/dashboard_overview.dart @@ -1,5 +1,8 @@ -// 仪表板概览组件 import 'package:flutter/material.dart'; +import 'package:jive_money/core/constants/app_constants.dart'; +import 'package:jive_money/ui/components/charts/balance_chart.dart'; +import 'package:jive_money/ui/components/dashboard/summary_card.dart'; +import 'package:jive_money/ui/components/dashboard/quick_actions.dart'; import 'package:jive_money/ui/components/dashboard/recent_transactions.dart'; import 'package:jive_money/models/transaction.dart'; @@ -359,4 +362,4 @@ class BudgetOverviewData { required this.spent, required this.progress, }); -} +} \ No newline at end of file From ccea7a82337c912c60862e65703bbd458208bb2e Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:29:32 +0800 Subject: [PATCH 7/9] =?UTF-8?q?flutter:=20analyzer=20cleanup=20batch=2010-?= =?UTF-8?q?B=20(part=201)=20=E2=80=94=20remove=20unused=20locals;=20add=20?= =?UTF-8?q?intl=20import;=20doc=20=5FgetCurrencySymbol;=20tidy=20source=5F?= =?UTF-8?q?badge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jive-flutter/lib/ui/components/cards/account_card.dart | 6 ++---- jive-flutter/lib/widgets/source_badge.dart | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/jive-flutter/lib/ui/components/cards/account_card.dart b/jive-flutter/lib/ui/components/cards/account_card.dart index 6f19a7c6..e9a56806 100644 --- a/jive-flutter/lib/ui/components/cards/account_card.dart +++ b/jive-flutter/lib/ui/components/cards/account_card.dart @@ -1,7 +1,7 @@ // 账户卡片组件 import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:intl/intl.dart'; import 'package:jive_money/providers/currency_provider.dart'; import 'package:jive_money/core/constants/app_constants.dart'; @@ -64,9 +64,6 @@ class AccountCard extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final theme = Theme.of(context); - final currencyFormatter = - NumberFormat.currency(symbol: _getCurrencySymbol()); - return Card( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), elevation: 2, @@ -284,6 +281,7 @@ class AccountCard extends ConsumerWidget { } } + // _getCurrencySymbol no longer used; currency formatting is centralized. String _getCurrencySymbol() { switch (currency.toUpperCase()) { case 'CNY': diff --git a/jive-flutter/lib/widgets/source_badge.dart b/jive-flutter/lib/widgets/source_badge.dart index c5e92883..08bebd23 100644 --- a/jive-flutter/lib/widgets/source_badge.dart +++ b/jive-flutter/lib/widgets/source_badge.dart @@ -15,7 +15,6 @@ class SourceBadge extends StatelessWidget { @override Widget build(BuildContext context) { final label = _labelFor(source); - final cs = Theme.of(context).colorScheme; final color = _colorFor(context, source); return Container( padding: padding, From 0ff1898c90a00cd679d7c7a7835f8c68cdfa6bbb Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:32:19 +0800 Subject: [PATCH 8/9] =?UTF-8?q?flutter:=20analyzer=20cleanup=20batch=2010-?= =?UTF-8?q?B=20(part=202)=20=E2=80=94=20remove=20unused=20=5FgetCurrencySy?= =?UTF-8?q?mbol;=20no=20behavior=20change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/ui/components/cards/account_card.dart | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/jive-flutter/lib/ui/components/cards/account_card.dart b/jive-flutter/lib/ui/components/cards/account_card.dart index e9a56806..66f71b36 100644 --- a/jive-flutter/lib/ui/components/cards/account_card.dart +++ b/jive-flutter/lib/ui/components/cards/account_card.dart @@ -282,23 +282,6 @@ class AccountCard extends ConsumerWidget { } // _getCurrencySymbol no longer used; currency formatting is centralized. - String _getCurrencySymbol() { - switch (currency.toUpperCase()) { - case 'CNY': - return '¥'; - case 'USD': - return '\$'; - case 'EUR': - return '€'; - case 'JPY': - return '¥'; - case 'GBP': - return '£'; - default: - return '¥'; - } - } - String _formatLastSync() { if (lastSyncAt == null) return '从未'; From 84b761896456ac889eecaf7a95fb734cecdb3478 Mon Sep 17 00:00:00 2001 From: zensgit <77236085+zensgit@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:39:34 +0800 Subject: [PATCH 9/9] =?UTF-8?q?flutter:=20batch10c=20=E2=80=94=20BudgetPro?= =?UTF-8?q?gress=20ConsumerWidget=20+=20const=20eval=20fix;=20CustomThemeE?= =?UTF-8?q?ditor=20pre-captured=20messenger/navigator;=20QR=20uses=20eyeSt?= =?UTF-8?q?yle/dataModuleStyle;=20AccountList=20uses=20AccountCard.fromAcc?= =?UTF-8?q?ount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/ui/components/accounts/account_list.dart | 4 +--- .../lib/ui/components/budget/budget_progress.dart | 8 +++++--- jive-flutter/lib/widgets/custom_theme_editor.dart | 12 ++++++++---- jive-flutter/lib/widgets/qr_code_generator.dart | 3 ++- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/jive-flutter/lib/ui/components/accounts/account_list.dart b/jive-flutter/lib/ui/components/accounts/account_list.dart index 8d087128..74fc8e06 100644 --- a/jive-flutter/lib/ui/components/accounts/account_list.dart +++ b/jive-flutter/lib/ui/components/accounts/account_list.dart @@ -421,11 +421,9 @@ class GroupedAccountList extends StatelessWidget { : null, children: accounts .map( - (account) => AccountCard( + (account) => AccountCard.fromAccount( account: account, onTap: () => onAccountTap?.call(account), - margin: - const EdgeInsets.symmetric(horizontal: 16, vertical: 4), ), ) .toList(), diff --git a/jive-flutter/lib/ui/components/budget/budget_progress.dart b/jive-flutter/lib/ui/components/budget/budget_progress.dart index ce8f52d8..c04a9daa 100644 --- a/jive-flutter/lib/ui/components/budget/budget_progress.dart +++ b/jive-flutter/lib/ui/components/budget/budget_progress.dart @@ -1,8 +1,10 @@ // 预算进度组件 import 'package:flutter/material.dart'; import 'package:jive_money/core/constants/app_constants.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:jive_money/providers/currency_provider.dart'; -class BudgetProgress extends StatelessWidget { +class BudgetProgress extends ConsumerWidget { final String category; final double budgeted; final double spent; @@ -31,7 +33,7 @@ class BudgetProgress extends StatelessWidget { bool get isOverBudget => spent > budgeted; @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final theme = Theme.of(context); final progressColor = _getProgressColor(); @@ -230,7 +232,7 @@ class CompactBudgetProgress extends StatelessWidget { ), ), ), - const SizedBox( + SizedBox( width: 45, child: Text( '${percentage.toStringAsFixed(0)}%', diff --git a/jive-flutter/lib/widgets/custom_theme_editor.dart b/jive-flutter/lib/widgets/custom_theme_editor.dart index 2961458a..fd482014 100644 --- a/jive-flutter/lib/widgets/custom_theme_editor.dart +++ b/jive-flutter/lib/widgets/custom_theme_editor.dart @@ -613,7 +613,8 @@ class _CustomThemeEditorState extends State ); }); - ScaffoldMessenger.of(context).showSnackBar( + final messenger = ScaffoldMessenger.of(context); + messenger.showSnackBar( SnackBar( content: Text('已应用"${preset.name}"模板'), backgroundColor: Colors.green, @@ -722,7 +723,8 @@ class _CustomThemeEditorState extends State Future _saveTheme() async { if (_nameController.text.trim().isEmpty) { - ScaffoldMessenger.of(context).showSnackBar( + final messenger = ScaffoldMessenger.of(context); + messenger.showSnackBar( const SnackBar( content: Text('请输入主题名称'), backgroundColor: Colors.red, @@ -755,9 +757,11 @@ class _CustomThemeEditorState extends State if (!context.mounted) return; - Navigator.of(context).pop(finalTheme); + final navigator = Navigator.of(context); + navigator.pop(finalTheme); } catch (e) { - ScaffoldMessenger.of(context).showSnackBar( + final messenger = ScaffoldMessenger.of(context); + messenger.showSnackBar( SnackBar( content: Text('保存失败: $e'), backgroundColor: Colors.red, diff --git a/jive-flutter/lib/widgets/qr_code_generator.dart b/jive-flutter/lib/widgets/qr_code_generator.dart index 4b675fbd..15be6e77 100644 --- a/jive-flutter/lib/widgets/qr_code_generator.dart +++ b/jive-flutter/lib/widgets/qr_code_generator.dart @@ -223,7 +223,8 @@ class _QrCodeGeneratorState extends State version: QrVersions.auto, size: widget.size, backgroundColor: qrBackgroundColor, - foregroundColor: qrForegroundColor, + eyeStyle: const QrEyeStyle(eyeShape: QrEyeShape.square), + dataModuleStyle: QrDataModuleStyle(color: qrForegroundColor, dataModuleShape: QrDataModuleShape.square), errorCorrectionLevel: QrErrorCorrectLevel.H, embeddedImage: widget.logo != null ? AssetImage(widget.logo!)