flutter - Dart http 包在内置 apk 中不起作用
问题描述
我正在开发一个需要发出 http 请求的 Flutter 应用程序。我像往常一样安装了 http 包,但是当需要在真实设备中测试应用程序时,http 请求挂起,我从来没有得到响应或状态码。然后我决定启动一个新应用程序只是为了搞乱 http 包,但我仍然遇到了同样的问题。
这是我在 Android Emulator 中调试时得到的结果(我几乎立即得到响应),这是我在真实设备上得到的结果(永远挂起)。
我已经尝试过的可能解决方案:构建签名和未签名的apk,在构建apk之前运行flutter clean,使用--no-shrink
flag构建apk,更改pubspec.yaml中http包的版本,这些似乎都没有解决问题。
我正在使用最新稳定版本的 Flutter SDK (v1.17.5)、Android Studio 进行编码,并使用 Ubuntu 20.04 作为操作系统。
这是我的飞镖代码:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class AuthScreen extends StatefulWidget {
@override
_AuthScreenState createState() => _AuthScreenState();
}
class _AuthScreenState extends State<AuthScreen> {
final TextEditingController _urlController = TextEditingController();
String _status = 'Waiting for request';
void _submit() async {
setState(() {
_status = 'Waiting for response...';
});
var response = await http.get(_urlController.text);
if (response.statusCode == 200) {
setState(() {
_status = response.body.substring(0, 40) + ' [...]';
});
} else {
_status = 'Something went wrong';
}
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
controller: _urlController,
),
FlatButton(
child: Text('Send request'),
onPressed: _submit,
),
Text(_status)
],
),
),
);
}
}
这是我的 pubspec.yaml,以防它有用:
name: testingHttpPackage
description: A new Flutter application.
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
http: ^0.12.1
cupertino_icons: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
解决方案
您是否在文件中提到了互联网许可AndroidManifest.xml
?在android/app/src/main/ 中,有AndroidManifest.xml 文件,将下面的行放在manifest 标签之后,即在第一个标签之后。
<uses-permission android:name="android.permission.INTERNET" />
推荐阅读
- python - 有条件地创建熊猫列的最快方法
- informatica - 如何在 informatica 开发人员中不使用聚合器执行聚合
- javascript - 防止 material-ui popover 元素的自动对焦
- batch-file - 复制 %1 "somefilepathhere" 有什么作用?
- html - 使用 CSS 控制 figcaption 相对于图形中响应式图像的位置
- string - sed 在 vi 中的行为不同于同一服务器上的命令行
- python - 无法摆脱输出中的大量空白行
- php - 需要选项值来处理我的代码
- r - Fortran 子例程不适用于 R 包
- python-3.x - 将 Python 线程与 Flask 合并