我在点击listTile时尝试导航到新页面newData[index]["title"]
,如何从此范围访问newData,index和data变量,我知道我必须在全局范围内声明它们但我试过this.index,但它不起作用,我创建了一个_onTap()方法,但我没有访问索引,所以我只能通过询问一个特定的位置[0]来访问。
有人可以给我一个暗示或一点帮助解决这个问题,谢谢。
class _ContentPageState extends State<ContentPage> {
@override
Widget build(BuildContext context,) {
List data;
return new Scaffold(
appBar: new AppBar(
title: new Text("Local json file"),
),
body: new Container(
child: new Center(
child: new FutureBuilder(
future: DefaultAssetBundle
.of(context)
.loadString('data_files/file.json'),
builder: (context, snapshot) {
var newData = JSON.decode(snapshot.data.toString());
return new ListView.builder(
itemBuilder: (BuildContext context, int index) {
return new Card(
child: new ListTile(
title: new Text(newData[index]['title'],textScaleFactor: 1.5),
),
);
},
itemCount: newData == null ? 0 : newData.length,
);
}),
),
));
}
}
答案 0 :(得分:3)
我猜你在我的课堂上尝试使用私有_onTap
方法,类似于:
_onTap(newData, int index) {
}
这非常简单,在ListTile
内你可以将_onTap
包裹在另一个函数中:
return new Card(
child: new ListTile(
onTap: () => _onTap(newData, index),
title: new Text(newData[index]['title'], textScaleFactor: 1.5),
),
);
答案 1 :(得分:0)
上一个答案是将newData作为参数传递。另一种方法是在构建方法之外声明newData。
winSize()
所以,在assign remove de type(var)中 newData = JSON.decode(snapshot.data.toString());