【发布时间】:2019-08-10 12:28:27
【问题描述】:
我正在开发一个 Flutter 应用程序,我需要从 API 中获取几乎所有内容,包括图像、颜色、文本等。 所以我应该做的是构建应用程序的主要结构,然后使用 API 提供的信息填写所有内容。当应用程序开始获取响应并初始化变量以在应用程序中使用它们时,我有必要进行 API 调用(HTTP GET)。
我使用指令here 在启动时执行一个函数。在该函数中,我发出 HTTP GET 请求并解析 JSON 文件以提取我需要的信息。
但是,问题是flutter没有等待HTTP请求的响应,因此我可以使用从接收到的JSON中解析的信息。
所以在下面的代码中,我使用 getdata() 函数来解析 JSON,以便从 JSON 文件中提取 ImageURL,然后在 NetworkImage 中使用 URL。
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(home: HomeScreen());
}
}
class HomeScreen extends StatefulWidget {
@override
HomeScreenState createState() => new HomeScreenState();
}
class HomeScreenState extends State<HomeScreen>
with AfterLayoutMixin<HomeScreen> {
@override
Widget build(BuildContext context) {
Size screenSize = MediaQuery.of(context).size;
return Scaffold(
body: (
Image.Network(imageurl.toString())
)
);
}
@override
void afterFirstLayout(BuildContext context) {
imageURL = getData().toString();
}
Future getData() async {
var res = await http
.get(Uri.encodeFull(link), headers: {"Accept": "application/json"});
if (res.statusCode == 200) {
var data = json.decode(res.body);
var page = data["page"] as Map;
var attributes = page["attributes"] as List;
for (var i = 0; i < attributes.length; i++) {
if (attributes[i]["key"] == "image") {
return attributes[i]["value"];
}
}
}
}
}
调试时,我意识到当flutter到达getdata()行时,它会执行HTTP请求,但由于它是异步的,它不会等待响应并继续构建应用程序(因此imageURL变量是为空,因为 JSON 尚未被解析)。发生的情况是图像没有显示在它的位置。
提前致谢。
【问题讨论】:
-
在框架运行之前制作http
build方法。