dart - 如何将 List _data 从 main() 传递到有状态小部件 (LIstView)?
问题描述
我想_data
从main() async
到访问Stateful Widget
?调用 REST Api Call in 是一种好习惯Main()
吗?
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:flutter/material.dart';
Future main() async {
List _data = await makeRequest();
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
Future<List> makeRequest() async {
String url = "https://jsonplaceholder.typicode.com/posts";
http.Response response = await http.get(url);
print(json.decode(response.body));
return json.decode(response.body);
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("JSON List"),
),
body: ListView.builder(
itemBuilder: (BuildContext context, int index) {
ListTile(
);
}
),
);
}
}
解决方案
这就是它应该如何工作,我修复了你的代码:
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List _data = new List();
void makeRequest() async {
String url = "https://jsonplaceholder.typicode.com/posts";
http.Response response = await http.get(url);
print(json.decode(response.body));
setState(() {
_data = json.decode(response.body) as List;
});
}
@override
void initState() {
makeRequest();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("JSON List"),
),
body: _data.isEmpty
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: _data.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(_data[index]['title']),
);
}),
);
}
}
你的主要电话应该是
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
推荐阅读
- php - 用不同的值加入同一个表两次
- eclipse-rcp - 产品导出时缺少依赖项
- ruby - 为什么 Rails 控制台中的“重新加载!”会导致“类的超类不匹配”(Rails 4)
- javascript - onClick执行一次js函数
- dictionary - Ocaml Map to_seq 用法
- r - sjPlot::plot_xtab 错误标记因子水平的问题
- android - Android:如何实现一个通过队列消息不断更新的文本视图?
- c# - 正则表达式组表达式不捕获内容
- javascript - 饼图未更新 D3.JS
- amazon-web-services - 为什么不同运行时的 AWS lambda 计费方式不同?