List 列表视图上一次只显示一个项目
我似乎不知道如何让列表中的所有项目显示在列表视图中 当前,当我单击我的按钮显示列表时,只显示一个项目。如果单击“上一步”,然后再次单击主按钮,它将显示列表中的两个项目。冲洗并重复3项。我似乎无法调试print语句以查看错误所在。当我尝试打印(轨迹)或其他变体时,它会显示轨迹模型的实例(不是很有用)。有什么想法吗 这是我的密码:List 列表视图上一次只显示一个项目,list,listview,dart,flutter,List,Listview,Dart,Flutter,我似乎不知道如何让列表中的所有项目显示在列表视图中 当前,当我单击我的按钮显示列表时,只显示一个项目。如果单击“上一步”,然后再次单击主按钮,它将显示列表中的两个项目。冲洗并重复3项。我似乎无法调试print语句以查看错误所在。当我尝试打印(轨迹)或其他变体时,它会显示轨迹模型的实例(不是很有用)。有什么想法吗 这是我的密码: 类主屏幕扩展状态{ int计数器=0; Future fetchData()异步{ 计数器++; var response=等待获取( 'https://www.hiki
类主屏幕扩展状态{
int计数器=0;
Future fetchData()异步{
计数器++;
var response=等待获取(
'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);
设置状态(){
trails.add(trailModel);
});
返回路线;
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(标题:文本(“HikeLocator”),
主体:新升起的按钮(
子:文本(“单击我”),
onPressed:()异步{
最终跟踪=等待获取数据();
导航器。推(
上下文
new MaterialPage路线(生成器:(上下文)=>新建列表屏幕(轨迹)),
);
},
),
));
}
}
类ListScreen扩展了无状态小部件{
最后名单;
ListScreen(this.trails);
@凌驾
小部件构建(BuildContext-ctxt){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“这是你的轨迹”),
),
正文:TrailList(trails),
);
}
}
类TrailList扩展了无状态小部件{
最后名单;
TrailList(this.trails);
小部件构建(上下文){
返回ListView.builder(
itemCount:trails.length,
itemBuilder:(上下文,int索引){
对象myText=json.encode(trails[index].trails);
List myText2=json.decode(myText);
返回文本(myText2[索引]['name']);
},
);
}
}
类跟踪模型{
物体轨迹;
TrailModel(this.trails);
TrailModel.fromJson(Map parsedJson){
trails=parsedJson['trails'];
}
}
我想我的问题可能在于fetchData(),但我不能完全确定。尝试至少打印出这些值,以限制可能出现的问题。(我每次按下按钮时,它是否只向列表中添加1个?我单击它时,它是否只呈现一个?它是每次单击都获取所有数据还是仅获取一个json对象?等等)
谢谢你的帮助。对不起,我是dart的新手,所以这是一个巨大的学习曲线,因为您的代码中有几个问题。这不能像您期望的那样工作的主要原因是,您正在将json的所有元素解析为一个
TrailModel
对象,但是您的代码假设您将有多个TrailModel
对象
修复并使其工作的最简单方法是使用TrailModel.trails
中的列表,而不是小部件中的列表
首先,在列表屏幕中,只传递列表中的第一个元素
class ListScreen扩展了无状态小部件{
最后名单;
...
@凌驾
小部件构建(BuildContext-ctxt){
归还新脚手架(
...
正文:TrailList(trails.first),
);
}
}
然后,在TrailList
中,使用TrailModel
中的trails
列表:
类TrailList扩展了无状态小部件{
最终追踪模型;
TrailList(this.model);
小部件构建(上下文){
返回ListView.builder(
itemCount:model.trails.length,
itemBuilder:(上下文,int索引){
最终轨迹=模型轨迹[索引];
...
},
);
}
}
当我尝试打印(轨迹)或其他变体时,它会显示轨迹模型的实例(不是很有用)
print
在类中使用toString
方法的输出。您看到的是trail模型的实例
,因为这是从超类对象
获得的默认实现。您可以覆盖它以获得更有用的内容:
类跟踪模型{
@凌驾
字符串toString()=>“trails=$trails”;
}
您的代码中有几个问题。这不能像您期望的那样工作的主要原因是,您正在将json的所有元素解析为一个TrailModel
对象,但是您的代码假设您将有多个TrailModel
对象
修复并使其工作的最简单方法是使用TrailModel.trails
中的列表,而不是小部件中的列表
首先,在列表屏幕中,只传递列表中的第一个元素
class ListScreen扩展了无状态小部件{
最后名单;
...
@凌驾
小部件构建(BuildContext-ctxt){
归还新脚手架(
...
正文:TrailList(trails.first),
);
}
}
然后,在TrailList
中,使用TrailModel
中的trails
列表:
类TrailList扩展了无状态小部件{
最终追踪模型;
TrailList(this.model);
小部件构建(上下文){
返回ListView.builder(
itemCount:model.trails.length,
itemBuilder:(上下文,int索引){
最终轨迹=模型轨迹[索引];
...
},
);
}
}
当我尝试打印(轨迹)或其他变体时,它会显示轨迹模型的实例(不是很有用)
print
在类中使用toString
方法的输出。您看到的是trail模型的实例
,因为这是从超类对象
获得的默认实现。您可以覆盖它以获得更有用的内容:
类跟踪模型{
@凌驾
字符串toString()=>“trails=$trails”;