为什么Flutter应用在安装“app-release.apk”后无法连接到互联网?但在调试模式下正常工作

120

在调试模式下,一切看起来都很好。我从我的API获取答案和数据列表。但是在创建app-release.apk并将其安装到我的手机上之后,就没有网络连接了。

这是我的代码:

ScopedModelDescendant<ReportPosViewModel>(
  builder: (context, child, model) {
    return FutureBuilder<List<Invoice>>(
      future: model.invoices,
      builder: (_,
        AsyncSnapshot<List<Invoice>> snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
            case ConnectionState.active:
            case ConnectionState.waiting:
              return Center(
                child:
                  const CircularProgressIndicator());
            case ConnectionState.done:
              if (snapshot.hasData) {
                // Something todo
              }
              else if (snapshot.hasError) {
                return NoInternetConnection(
                  action: () async {
                    await model.setInvoice();
                    await getData();
                  },
                );
              }
          }
      },
    );
  },
),
5个回答

259
打开位于<your_project>/android/app/src/mainAndroidManifest.xml文件,并添加以下行:
<manifest xmlns:android="...">
  <uses-permission android:name="android.permission.INTERNET"/> <!-- Add this -->
</manifest>

这里开始:

如果您的应用程序代码需要访问互联网,请添加android.permission.INTERNET权限。标准模板不包括此标记,但允许在开发过程中进行互联网访问,以便Flutter工具与正在运行的应用程序之间进行通信。


5
iOS 不需要进行任何更改吗? - Soon Santos
20
@SoonSantos 是的,iOS 不需要进行任何更改。 - CopsOnRoad
1
这对Flutter也必要吗??这是Flutter而不是Java项目,我尝试了但还没有生效。 - john
5
这不像Flutter或Java,而是适用于Android。对于一个Android项目来说,使用它是必要的。 - CopsOnRoad
3
@RayCoder的个人资料无法用于发布,你需要将其放置在答案中提到的位置。 - CopsOnRoad
显示剩余8条评论

27

如果您放置了

<uses-permission android:name="android.permission.INTERNET"/>

AndroidManifest.xml 中。

如果不起作用,请检查设备的连接性。确认安卓设备上移动数据或 Wi-Fi 连接。尝试使用 Google Chrome 浏览器进行谷歌搜索。

如果还不行,请在你所使用的电脑的DNS设置中允许

8.8.8.8

.


2
我在清单文件中添加了网络权限,但是网络仍然无法工作。我在谷歌和其他浏览器中进行了测试,它们都可以正常工作。只有在应用程序中无法工作。但是当我获取aab时,在调试和发布模式下可以正常工作。 - Rahman Rezaee
你找到解决方案了吗?@RahmanRezaee - justin0060
请尝试检查设备的连接状态。 - mekdigital
添加了权限后,仍无法正常运行,请尝试重新安装该应用程序,我这样做了,它就能正常工作了。 - Don

20
将以下内容添加到文件android/app/src/main/AndroidManifest.xml中包名后面:
<uses-permission android:name="android.permission.INTERNET"/>

4

将这些添加到Android清单文件中。

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

然后运行:

flutter clean
flutter pub get
flutter run

1
对于我的项目,使用Firebase时,从Firebase控制台下载更新的google-services.json文件解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接