You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Stripe部分设备启动黑屏问题求助

解决flutter_stripe集成后部分设备启动黑屏的问题

针对你使用flutter_stripe: ^9.5.0+1出现的部分设备启动黑屏问题,试试以下几个实用方案:

1. 给Stripe初始化加异常捕获

当前启动代码里没有处理applySettings()的异常,部分设备可能因网络限制、系统兼容性问题导致初始化失败,直接阻塞后续代码执行。修改启动代码:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Stripe.publishableKey = stripePublishableKey;
  try {
    await Stripe.instance.applySettings();
  } catch (e) {
    print('Stripe初始化异常: $e');
    // 初始化失败也继续启动应用,避免卡黑屏
  }
  runApp(const MainApp());
}

2. 把Stripe初始化移到首页后台执行

不要在main函数里同步等待初始化完成,先让应用启动显示界面,再后台初始化Stripe:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MainApp());
}

// 在首页的State中初始化
class HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
    _initStripe();
  }

  Future<void> _initStripe() async {
    Stripe.publishableKey = stripePublishableKey;
    try {
      await Stripe.instance.applySettings();
    } catch (e) {
      print('Stripe初始化异常: $e');
    }
  }
}

3. 检查Android端的权限和混淆规则

  • 确认AndroidManifest.xml里已添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 在proguard-rules.pro里添加Stripe的混淆排除规则,避免混淆导致初始化失败:
    -keep class com.stripe.android.** { *; }
    -keep class com.stripe.network.** { *; }
    

4. 延迟Stripe初始化时机

如果是启动时初始化任务过多导致主线程阻塞,用延迟初始化避开启动高峰期:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MainApp());
  // 延迟1秒再初始化,让应用先完成界面绘制
  Future.delayed(const Duration(seconds: 1), () async {
    Stripe.publishableKey = stripePublishableKey;
    try {
      await Stripe.instance.applySettings();
    } catch (e) {
      print('Stripe初始化异常: $e');
    }
  });
}

5. 针对旧Android版本做兼容处理

部分Android 8.0及以下的旧设备可能对applySettings()兼容性不好,可跳过该步骤(不影响核心支付功能):

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Stripe.publishableKey = stripePublishableKey;
  if (Platform.isAndroid) {
    final androidInfo = await DeviceInfoPlugin().androidInfo;
    // 仅在Android 8.0及以上版本执行初始化
    if (androidInfo.version.sdkInt >= 26) {
      try {
        await Stripe.instance.applySettings();
      } catch (e) {
        print('Stripe初始化异常: $e');
      }
    }
  } else {
    try {
      await Stripe.instance.applySettings();
    } catch (e) {
      print('Stripe初始化异常: $e');
    }
  }
  runApp(const MainApp());
}

注:需要先添加device_info_plus依赖来获取系统版本信息。

内容的提问来源于stack exchange,提问作者D-Sibu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:22:17