我正在尝试创建一个显示一些来自API的数据的应用。问题是,虽然App在使用模拟器或智能手机的调试模式下运行良好,但未显示任何错误。如果我构建APK,则该应用不会下载数据,或者至少不会显示数据。我该如何解决这个问题?
更多详细信息:
import 'dart:convert';
import 'package:apiitest2/models/Obj.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
List<Obj> dataDef = List<Obj>();
void getData() {
List<Obj> dataDef0 = List<Obj>();
http.get(Uri.encodeFull("https://jsonplaceholder.typicode.com/posts"),
headers: {"Accept": "application/json"}).then((resp) {
List data = json.decode(resp.body);
for (var item in data) {
Obj obj = Obj(item["userId"], item["id"], item["title"], item["body"]);
dataDef0.add(obj);
}
setState(() {
dataDef = dataDef0;
});
});//.catchError((onError){});
}
@override
void initState() {
super.initState();
getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(slivers: <Widget>[
SliverAppBar(
backgroundColor: Colors.red,
floating: false,
pinned: true,
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
centerTitle: true,
title: Text(
"Title",
style: TextStyle(
color: Colors.black87,
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
background: Container(
color: Colors.amber,
)
),
),
body()
]
)
);
}
Widget body() {
if (dataDef.isEmpty)
return SliverToBoxAdapter(
child: SizedBox(
height: MediaQuery.of(context).size.height - 200,
child: Center(
child: Container(
height: 70,
width: 70,
child: CircularProgressIndicator()
)
),
)
);
else {
return SliverList(delegate:
SliverChildBuilderDelegate((BuildContext context, int index) {
if (index > dataDef.length - 1) return null;
return Container(
child: Text(dataDef[index].title),
height: 50,
);
}));
}
}
}
答案 0 :(得分:2)
您所面临的问题,因为在调试模式下,调试模式下的Android清单文件默认情况下具有Internet权限,但是src
中有一个主文件夹,其中您未授予Internet权限的另一个清单文件。正如MePo所说,您应该授予互联网许可
<uses-permission android:name="android.permission.INTERNET"/>