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

Flutter应用发布至Google Play Store后API无法加载无报错问题求助

问题解决方案

1. 优先检查Android网络权限配置

debug模式下Flutter应用默认带有网络权限,release包默认不会自动添加,这是该类问题最常见的诱因:

  • 打开android/app/src/main/AndroidManifest.xml文件,在manifest标签下、application标签外添加如下权限声明:
<uses-permission android:name="android.permission.INTERNET" />

2. 排查R8混淆规则配置

Flutter打release包时默认开启R8代码压缩混淆,若http请求相关类、自定义数据模型类被混淆,会导致请求失败、JSON解析返回空,本地debug模式默认不开混淆因此运行正常:

  • 打开android/app/proguard-rules.pro文件,添加如下混淆规则:
# 保留http插件相关类不被混淆
-keep class io.flutter.plugins.http.** { *; }
# 替换为你自己的包名,保留数据模型类不被混淆
-keep class 你的应用包名.models.** { *; }

其中你的应用包名替换为你项目实际的Android包名,models对应你存放Category等数据类的目录,如果目录名不同请同步修改。

3. 修复代码逻辑缺陷

你现有代码的两处逻辑漏洞会导致无错误提示的空白现象:

  • 第一处:API请求方法中状态码非200时直接返回null,不会抛出异常,控制器拿到null后无任何处理逻辑,用户看不到错误提示;
  • 第二处:使用forEach遍历处理异步逻辑时,forEach不会等待内部异步方法执行完成,finally代码块会提前把isLoading设为false,此时数据还未填充到页面,视觉上就是空白。
    可将遍历逻辑修改为Future.wait实现异步等待:
if (categories != null) {
  List<Category> processedList = await Future.wait(categories.map((categoryItem) async {
    categoryItem.totalQuestions = await fetchCategoryCount(categoryItem.id);
    var savedData = userDataController.data.read(categoryItem.id.toString());
    categoryItem.correctAnswers = savedData != null ? (savedData as List).length : 0;
    return categoryItem;
  }));
  categoryTiles.addAll(processedList);
}
  • 额外建议:将异常捕获的on Exception catch (e)改为catch(e),捕获所有类型的异常,同时添加用户可见的错误提示逻辑,避免静默失败。

4. 本地调试验证

不用上传应用到Play Store即可复现release模式的问题,执行命令flutter run --release连接真机运行,即可在日志中看到具体报错信息,方便定位问题。

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:51:03