【发布时间】:2021-08-30 19:55:45
【问题描述】:
关于我的问题有几个类似的问题,但所有这些问题中给出的解决方案都不适合我,所以我尝试打开另一个问题,详细说明我的问题。我希望有人可以帮助我。
背景: 我正在学习颤振和飞镖,作为初学者,我想实现一个使用 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 开发中的演示):
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 响应?
如何调试此类问题?
感谢大家帮助我。
【问题讨论】: