android - Flutter:http get 请求在 apk 版本上不起作用

标签 android flutter http dart

关于我的问题有几个类似的问题,但所有这些问题中给出的解决方案都对我不起作用,所以我尝试用我的问题的详细信息打开另一个问题。我希望有人可以帮助我。
上下文:
我正在学习 flutter 和 Dart ,作为初学者,我想实现一个使用 CRUD 操作的简单应用程序。我使用 REST API 访问 MongoDB 上的数据。
问题:
当我在 Web 服务器上调试我的代码作为 Web 应用程序时,它工作正常。当我尝试使用 apk 在 Android 设备上运行时,服务器似乎没有收到 https 获取请求,并且客户端阻止了负载指示器。
正如其他问题中所建议的那样,我确保在 AndroidManifest.xml 中设置了 android uses_permissions for INTERNET。*
我很确定这一点,因为用于插入数据的 post http 请求在设备上也可以正常工作。
此外,我使用 https,如下所示。
要构建 apk,我使用以下命令:

flutter build apk 
我也按照其他问题的建议尝试了这个:
flutter build apk --no-shrink
这无济于事。
这是用于在后台获取数据的小部件 ViewStoricoRifornimenti,(如 flutter dev 上的演示):
Future<List<Rifornimento>> fetchWelcomes(http.Client client) async {
    final response = await client.get(
      Uri.parse('https://car-statistics.herokuapp.com/rifornimenti'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
        'Access-Control-Allow-Origin': '*'
      },
    );

    // Use the compute function to run parsePhotos in a separate isolate.
    return compute(parseWelcomes, response.body);
  }

  List<Rifornimento> parseWelcomes(String responseBody) {
    final parsed = Welcome.fromRawJson(responseBody);
    return parsed.data;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder<List<Rifornimento>>(
        future: fetchWelcomes(http.Client()),
        builder: (context, snapshot) {
          if (snapshot.hasError) print(snapshot.error);

          return snapshot.hasData
              ? StoricoRifornimenti(items: snapshot.data!)
              : Center(child: CircularProgressIndicator());
        },
      ),
    );
  }
}
这是显示结果的小部件:
class _MyHomePageState extends State<MyHomePage> {

  ViewStoricoRifornimenti vsr = new ViewStoricoRifornimenti(title: "Wow");

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
      drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[
            DrawerHeader(
              decoration: BoxDecoration(
                color: Colors.blue,
              ),
              child: Text('Menu'),
            ),
            ListTile(
              title: Text('Storico Rifornimenti'),
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => vsr),
                );
              },
            ),
          ],
        ),
      )
  }
}
难道我做错了什么?
为什么在 Web 应用程序的调试中我没有错误,而在设备上我无法获得 http 响应?
我怎么能调试这种问题?
谢谢大家会帮助我。

最佳答案

确保将以下代码添加到 list 中。
首先,确保您将 Internet 权限添加到 list

 <uses-permission android:name="android.permission.INTERNET" />
秒确保您添加了 usesCleartextTraffic true ,这将确保您的 API 端点是否不安全,您仍然可以调用 API。
<application
    android:usesCleartextTraffic="true">

关于android - Flutter:http get 请求在 apk 版本上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67978223/

相关文章:

user-interface - 如何在Flutter中制作一个适合整个屏幕的列

Java - HttpUrlConnection 等待下载完成

android - 从 Android 中的 shell 命令安装/卸载

android - java.lang.NoClassDefFoundError : com. urbanairship.UAirship

java - Android GridView 适配器与 AsyncTask

Android Studio CountDownTimer 导航

flutter - 一种在 Flutter 中调用绘画后保存在 Canvas 上绘制的像素的方法?

按下按钮后 Android 模拟器不断崩溃

javascript - node.js request.js 不并行触发请求

java - 如何在http请求中指定范围?