Dart http 包在内置的 apk 中不起作用



我正在开发一个需要发出http请求的Flutter应用程序。我像往常一样安装了 http 包,但是当需要在真实设备中测试应用程序时,http 请求挂起,我从未收到响应或状态代码。然后我决定启动一个新的应用程序只是为了弄乱 http 包,但我仍然遇到了同样的问题。

这是我在 Android 模拟器中调试时得到的(我几乎立即得到响应(,这就是我在真实设备上得到的(永远挂起(。

我已经尝试过的可能解决方案:构建了已签名和未签名的apk,在构建apk之前运行了颤振,使用--no-shrink标志构建了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" />   

最新更新