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
相关产品推荐
相关产品推荐

