Flutter:构建 APK 后,不显示来自 API 的数据

Mag*_*o97 3 api android json apk flutter

I\xe2\x80\x99m 尝试创建一个显示来自 API 的一些数据的应用程序。问题是,虽然应用程序在使用模拟器或智能手机的调试模式下运行良好,但没有显示任何错误。如果我构建 APK,该应用程序不会下载数据,或者至少不会显示数据。我该如何解决这个问题?

\n\n

更多细节:

\n\n
    \n
  • 我多次构建 APK
  • \n
  • 我在三部不同的智能手机(也是不同品牌的)中安装了 APK
  • \n
\n\n
import \'dart:convert\';\n\nimport \'package:apiitest2/models/Obj.dart\';\nimport \'package:flutter/material.dart\';\nimport \'package:http/http.dart\' as http;\n\n\nclass Home extends StatefulWidget {\n  @override\n  _HomeState createState() => _HomeState();\n}\n\nclass _HomeState extends State<Home> {\n  List<Obj> dataDef = List<Obj>();\n\n  void getData() {\n    List<Obj> dataDef0 = List<Obj>();\n    http.get(Uri.encodeFull("https://jsonplaceholder.typicode.com/posts"),\n        headers: {"Accept": "application/json"}).then((resp) {\n      List data = json.decode(resp.body);\n      for (var item in data) {\n        Obj obj = Obj(item["userId"], item["id"], item["title"], item["body"]);\n        dataDef0.add(obj);\n      }\n      setState(() {\n        dataDef = dataDef0;\n      });\n    });//.catchError((onError){});\n  }\n\n  @override\n  void initState() {\n    super.initState();\n    getData();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n        body: CustomScrollView(slivers: <Widget>[\n          SliverAppBar(\n            backgroundColor: Colors.red,\n            floating: false,\n            pinned: true,\n            expandedHeight: 200.0,\n            flexibleSpace: FlexibleSpaceBar(\n                centerTitle: true,\n                title: Text(\n                  "Title",\n                  style: TextStyle(\n                    color: Colors.black87,\n                    fontSize: 20.0,\n                    fontWeight: FontWeight.bold,\n                  ),\n                ),\n                background: Container(\n                  color: Colors.amber,\n                )\n            ),\n          ),\n          body()\n        ]\n        )\n    );\n  }\n\n  Widget body() {\n    if (dataDef.isEmpty)\n      return SliverToBoxAdapter(\n          child: SizedBox(\n            height: MediaQuery.of(context).size.height - 200,\n            child: Center(\n                child: Container(\n                    height: 70,\n                    width: 70,\n                    child: CircularProgressIndicator()\n                )\n            ),\n          )\n      );\n    else {\n      return SliverList(delegate:\n      SliverChildBuilderDelegate((BuildContext context, int index) {\n        if (index > dataDef.length - 1) return null;\n        return Container(\n          child: Text(dataDef[index].title),\n          height: 50,\n        );\n      }));\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Sag*_*rya 7

您遇到的问题是因为当您处于调试模式时,调试模式具有默认情况下具有互联网权限的Android清单文件,但是主文件夹中还有另一个src您没有给出的清单文件互联网许可。正如 MePo 所说,你应该授予互联网许可

<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)