feat(client): 登录历史下拉、macOS 兼容修复、UI 优化
- 替换 flutter_secure_storage 为 shared_preferences,解决 macOS Keychain 签名报错 - 登录页门店编号/用户名支持历史下拉(最多5条,LRU 淘汰),使用 Overlay + CompositedTransformFollower 实现浮层 - logout 仅删除 auth token,保留登录历史 - AppShell 时钟抽为独立 _ClockWidget,避免每秒 setState 导致 TabBarView 叠影 - ShellRoute 子路由改用 NoTransitionPage,消除切换页面时的过渡动画叠影 - 新增 auth_state_test、auth_repository_test、login_screen_test 共 14 个单元/Widget 测试 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import '../../screens/auth/login_screen.dart';
|
||||
@@ -13,6 +14,9 @@ import '../../screens/products/products_screen.dart';
|
||||
import '../../screens/settings/settings_screen.dart';
|
||||
import '../auth/auth_state.dart';
|
||||
|
||||
Page<void> _noTransition(Widget child) =>
|
||||
NoTransitionPage<void>(child: child);
|
||||
|
||||
final appRouterProvider = Provider<GoRouter>((ref) {
|
||||
final authState = ref.watch(authStateProvider);
|
||||
|
||||
@@ -35,27 +39,33 @@ final appRouterProvider = Provider<GoRouter>((ref) {
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: '/stock-in',
|
||||
builder: (_, __) => const StockInListScreen()),
|
||||
pageBuilder: (_, __) => _noTransition(const StockInListScreen())),
|
||||
GoRoute(
|
||||
path: '/stock-in/new',
|
||||
builder: (_, __) => const StockInFormScreen()),
|
||||
pageBuilder: (_, __) => _noTransition(const StockInFormScreen())),
|
||||
GoRoute(
|
||||
path: '/stock-out',
|
||||
builder: (_, __) => const StockOutListScreen()),
|
||||
pageBuilder: (_, __) => _noTransition(const StockOutListScreen())),
|
||||
GoRoute(
|
||||
path: '/inventory',
|
||||
builder: (_, __) => const InventoryListScreen()),
|
||||
pageBuilder: (_, __) =>
|
||||
_noTransition(const InventoryListScreen())),
|
||||
GoRoute(
|
||||
path: '/inventory/check',
|
||||
builder: (_, __) => const InventoryCheckScreen()),
|
||||
pageBuilder: (_, __) =>
|
||||
_noTransition(const InventoryCheckScreen())),
|
||||
GoRoute(
|
||||
path: '/partners', builder: (_, __) => const PartnersScreen()),
|
||||
path: '/partners',
|
||||
pageBuilder: (_, __) => _noTransition(const PartnersScreen())),
|
||||
GoRoute(
|
||||
path: '/finance', builder: (_, __) => const FinanceScreen()),
|
||||
path: '/finance',
|
||||
pageBuilder: (_, __) => _noTransition(const FinanceScreen())),
|
||||
GoRoute(
|
||||
path: '/products', builder: (_, __) => const ProductsScreen()),
|
||||
path: '/products',
|
||||
pageBuilder: (_, __) => _noTransition(const ProductsScreen())),
|
||||
GoRoute(
|
||||
path: '/settings', builder: (_, __) => const SettingsScreen()),
|
||||
path: '/settings',
|
||||
pageBuilder: (_, __) => _noTransition(const SettingsScreen())),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user