160 lines
6.6 KiB
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}')),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|