gcx/frontend/genex-mobile/lib/main.dart

188 lines
7.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'app/theme/app_theme.dart';
import 'app/main_shell.dart';
import 'app/i18n/app_localizations.dart';
import 'app/i18n/locale_manager.dart';
import 'core/updater/update_service.dart';
import 'core/updater/models/update_config.dart';
import 'core/push/push_service.dart';
import 'core/providers/notification_badge_manager.dart';
import 'features/auth/presentation/pages/login_page.dart';
import 'features/auth/presentation/pages/welcome_page.dart';
import 'features/auth/presentation/pages/register_page.dart';
import 'features/auth/presentation/pages/forgot_password_page.dart';
import 'features/coupons/presentation/pages/coupon_detail_page.dart';
import 'features/coupons/presentation/pages/order_confirm_page.dart';
import 'features/coupons/presentation/pages/payment_page.dart';
import 'features/coupons/presentation/pages/payment_success_page.dart';
import 'features/coupons/presentation/pages/search_page.dart';
import 'features/coupons/presentation/pages/my_coupon_detail_page.dart';
import 'features/coupons/presentation/pages/redeem_qr_page.dart';
import 'features/trading/presentation/pages/trading_page.dart';
import 'features/trading/presentation/pages/transfer_page.dart';
import 'features/trading/presentation/pages/sell_order_page.dart';
import 'features/wallet/presentation/pages/wallet_page.dart';
import 'features/wallet/presentation/pages/deposit_page.dart';
import 'features/wallet/presentation/pages/withdraw_page.dart';
import 'features/wallet/presentation/pages/transaction_records_page.dart';
import 'features/profile/presentation/pages/kyc_page.dart';
import 'features/profile/presentation/pages/settings_page.dart';
import 'features/profile/presentation/pages/payment_management_page.dart';
import 'features/profile/presentation/pages/pro_mode_page.dart';
import 'features/ai_agent/presentation/pages/agent_chat_page.dart';
import 'features/message/presentation/pages/message_detail_page.dart';
import 'features/issuer/presentation/pages/issuer_main_page.dart';
import 'features/merchant/presentation/pages/merchant_home_page.dart';
import 'features/trading/presentation/pages/trading_detail_page.dart';
import 'features/coupons/presentation/pages/wallet_coupons_page.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化升级服务(走 Nginx 反向代理 → Kong 网关)
UpdateService().initialize(UpdateConfig.selfHosted(
apiBaseUrl: 'https://api.gogenex.com',
enabled: true,
));
// 初始化推送服务(无 Firebase 配置时静默失败)
await PushService().initialize();
// 初始化通知徽章管理器
NotificationBadgeManager().initialize();
runApp(const GenexConsumerApp());
}
/// Genex Mobile - 券的生命周期管理平台
///
/// 持仓/交易所/消息/个人中心
/// 持有/接收/转赠/交易/核销数字券
///
/// 国际化:首次启动跟随系统语言,用户可在设置中切换
class GenexConsumerApp extends StatefulWidget {
const GenexConsumerApp({super.key});
@override
State<GenexConsumerApp> createState() => _GenexConsumerAppState();
}
class _GenexConsumerAppState extends State<GenexConsumerApp> {
@override
void initState() {
super.initState();
LocaleManager.userLocale.addListener(_onLocaleChanged);
}
@override
void dispose() {
LocaleManager.userLocale.removeListener(_onLocaleChanged);
super.dispose();
}
void _onLocaleChanged() {
setState(() {});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Genex',
theme: AppTheme.light,
debugShowCheckedModeBanner: false,
// i18n
locale: LocaleManager.userLocale.value,
supportedLocales: LocaleManager.supportedLocales,
localizationsDelegates: const [
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
localeResolutionCallback: (systemLocale, supportedLocales) {
if (LocaleManager.userLocale.value == null) {
return LocaleManager.resolve(
systemLocale != null ? [systemLocale] : null,
supportedLocales,
);
}
return LocaleManager.userLocale.value;
},
initialRoute: '/',
onGenerateRoute: _generateRoute,
);
}
Route<dynamic> _generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => const WelcomePage());
case '/login':
return MaterialPageRoute(builder: (_) => const LoginPage());
case '/register':
return MaterialPageRoute(builder: (_) => const RegisterPage());
case '/forgot-password':
return MaterialPageRoute(builder: (_) => const ForgotPasswordPage());
case '/main':
return MaterialPageRoute(builder: (_) => const MainShell());
case '/coupon/detail':
return MaterialPageRoute(builder: (_) => const CouponDetailPage());
case '/order/confirm':
return MaterialPageRoute(builder: (_) => const OrderConfirmPage());
case '/payment':
return MaterialPageRoute(builder: (_) => const PaymentPage());
case '/payment/success':
return MaterialPageRoute(builder: (_) => const PaymentSuccessPage());
case '/search':
return MaterialPageRoute(builder: (_) => const SearchPage());
case '/coupon/mine/detail':
return MaterialPageRoute(builder: (_) => const MyCouponDetailPage());
case '/redeem':
return MaterialPageRoute(builder: (_) => const RedeemQrPage());
case '/trading':
return MaterialPageRoute(builder: (_) => const TradingPage());
case '/transfer':
return MaterialPageRoute(builder: (_) => const TransferPage());
case '/sell':
return MaterialPageRoute(builder: (_) => const SellOrderPage());
case '/wallet':
return MaterialPageRoute(builder: (_) => const WalletPage());
case '/wallet/deposit':
return MaterialPageRoute(builder: (_) => const DepositPage());
case '/wallet/withdraw':
return MaterialPageRoute(builder: (_) => const WithdrawPage());
case '/wallet/records':
return MaterialPageRoute(builder: (_) => const TransactionRecordsPage());
case '/kyc':
return MaterialPageRoute(builder: (_) => const KycPage());
case '/settings':
return MaterialPageRoute(builder: (_) => const SettingsPage());
case '/payment/manage':
return MaterialPageRoute(builder: (_) => const PaymentManagementPage());
case '/pro-mode':
return MaterialPageRoute(builder: (_) => const ProModePage());
case '/ai-chat':
return MaterialPageRoute(builder: (_) => const AgentChatPage());
case '/message/detail':
return MaterialPageRoute(builder: (_) => const MessageDetailPage());
case '/issuer':
return MaterialPageRoute(builder: (_) => const IssuerMainPage());
case '/merchant':
return MaterialPageRoute(builder: (_) => const MerchantHomePage());
case '/trading/detail':
return MaterialPageRoute(builder: (_) => const TradingDetailPage());
case '/wallet/coupons':
return MaterialPageRoute(builder: (_) => const WalletCouponsPage());
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(child: Text('Route not found: ${settings.name}')),
),
);
}
}
}