main.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /// App 入口
  2. ///
  3. /// 启动时完成:
  4. /// 1. 微信 SDK 注册(fluwx registerApi + addSubscriber)
  5. /// 2. Stripe 发布密钥初始化
  6. /// 3. 国际化(中/英)、ScreenUtil 适配、EasyLoading 全局配置
  7. library;
  8. import 'package:flutter/material.dart';
  9. import 'package:flutter_easyloading/flutter_easyloading.dart';
  10. import 'package:flutter_localizations/flutter_localizations.dart';
  11. import 'package:flutter_screenutil/flutter_screenutil.dart';
  12. import 'constants.dart';
  13. import 'pages/home_page.dart';
  14. import 'service/platform/stripe_flow.dart';
  15. import 'service/platform/wechat_flow.dart';
  16. Future<void> main() async {
  17. WidgetsFlutterBinding.ensureInitialized();
  18. // 微信 SDK:注册 AppID + 订阅支付结果回调(Web 端为空实现,安全失败)
  19. try {
  20. await WechatFlow.instance.init();
  21. WechatFlow.instance.subscribe();
  22. } catch (e) {
  23. // 微信 SDK 初始化失败不阻塞启动(Web / 未配置 AppID 场景)
  24. debugPrint('微信 SDK 初始化失败(忽略): $e');
  25. }
  26. // Stripe:发布密钥初始化(真实密钥由后端 createStripePayment 下发)
  27. StripeFlow.instance.init(kStripePublishableKey);
  28. runApp(const MyApp());
  29. }
  30. class MyApp extends StatelessWidget {
  31. const MyApp({super.key});
  32. @override
  33. Widget build(BuildContext context) {
  34. // ScreenUtil 设计稿尺寸(750 宽,对应常见移动端设计稿)
  35. return ScreenUtilInit(
  36. designSize: const Size(750, 1334),
  37. minTextAdapt: true,
  38. builder: (context, child) {
  39. return MaterialApp(
  40. title: 'flutter_paydemo',
  41. debugShowCheckedModeBanner: false,
  42. theme: ThemeData(
  43. colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
  44. useMaterial3: true,
  45. ),
  46. localizationsDelegates: const [
  47. GlobalMaterialLocalizations.delegate,
  48. GlobalWidgetsLocalizations.delegate,
  49. GlobalCupertinoLocalizations.delegate,
  50. ],
  51. supportedLocales: const [
  52. Locale('zh', 'CN'),
  53. Locale('en', 'US'),
  54. ],
  55. locale: const Locale('zh', 'CN'),
  56. home: child ?? const HomePage(),
  57. // EasyLoading 全局配置
  58. builder: EasyLoading.init(),
  59. );
  60. },
  61. );
  62. }
  63. }