gcx/frontend/mobile/lib/main.dart

160 lines
6.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'app/i18n/app_localizations.dart';
import 'app/theme/app_theme.dart';
import 'app/main_shell.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';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化升级服务
UpdateService().initialize(UpdateConfig.selfHosted(
apiBaseUrl: 'https://api.gogenex.cn',
enabled: true,
));
// 初始化推送(静默失败)
await PushService().initialize();
// 初始化通知徽章
NotificationBadgeManager().initialize();
runApp(const GenexConsumerApp());
}
/// Genex 消费者App
///
/// 用户使用的券金融平台客户端
/// 浏览/购买/持有/交易/核销数字券
class GenexConsumerApp extends StatelessWidget {
const GenexConsumerApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Genex',
theme: AppTheme.light,
debugShowCheckedModeBanner: false,
supportedLocales: const [
Locale('zh', 'CN'),
Locale('zh', 'TW'),
Locale('en'),
Locale('ja'),
],
localizationsDelegates: const [
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
localeResolutionCallback: (locale, supportedLocales) {
for (final supported in supportedLocales) {
if (supported.languageCode == locale?.languageCode &&
supported.countryCode == locale?.countryCode) {
return supported;
}
}
for (final supported in supportedLocales) {
if (supported.languageCode == locale?.languageCode) {
return supported;
}
}
return const Locale('zh', 'CN');
},
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());
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(child: Text('Route not found: ${settings.name}')),
),
);
}
}
}