【发布时间】:2019-07-10 21:04:31
【问题描述】:
我似乎不知道如何让列表中的所有项目显示在列表视图中
目前,当我单击按钮显示列表时,只显示一项。如果我单击返回,然后再次单击主按钮,它将显示列表中的 2 个项目。冲洗并重复,3 项。我似乎无法使用打印语句进行调试以查看我的错误所在。当我尝试 print(trails) 或其他变体时,它会显示 Instance of trail model(不是很有帮助)。有任何想法吗?
这是我的代码:
class HomeScreen extends State<MyApp> {
int counter = 0;
Future<List<TrailModel>> fetchData() async {
counter++;
var response = await get(
'https://www.hikingproject.com/data/get-trails?lat=39.733694&lon=-121.854771&maxDistance=10&key=200419778-6a46042e219d019001dd83b13d58aa59');
final trailModel = TrailModel.fromJson(json.decode(response.body));
//trails.add(trailModel);
setState(() {
trails.add(trailModel);
});
return trails;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("HikeLocator")),
body: new RaisedButton(
child: Text("click me"),
onPressed: () async {
final trails = await fetchData();
Navigator.push(
context,
new MaterialPageRoute(builder: (context) => new ListScreen(trails)),
);
},
),
));
}
}
class ListScreen extends StatelessWidget {
final List<TrailModel> trails;
ListScreen(this.trails);
@override
Widget build(BuildContext ctxt) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Here are your trails"),
),
body: TrailList(trails),
);
}
}
class TrailList extends StatelessWidget {
final List<TrailModel> trails;
TrailList(this.trails);
Widget build(context) {
return ListView.builder(
itemCount: trails.length,
itemBuilder: (context, int index) {
Object myText = json.encode(trails[index].trails);
List<dynamic> myText2 = json.decode(myText);
return Text(myText2[index]['name']);
},
);
}
}
class TrailModel {
Object trails;
TrailModel(this.trails);
TrailModel.fromJson(Map<String, dynamic> parsedJson) {
trails = parsedJson['trails'];
}
}
我认为我的问题可能在于 fetchData(),但我并不完全确定。尝试至少打印出值以限制我的问题可能出在哪里。 (是每次按下按钮时只在列表中添加1吗?当我单击它时它只呈现一个吗?是每次单击都获取所有数据还是只获取一个json对象?等等)
感谢您的任何帮助。抱歉,我对飞镖有点陌生,所以这是一个巨大的学习曲线
【问题讨论】:
标签: list listview dart flutter