Flutter 指定问题:类型';填充数据';(Statefulwidget)不是类型为';列表<;对象>';
我是新来的。我正试图用Flutter 指定问题:类型';填充数据';(Statefulwidget)不是类型为';列表<;对象>';,flutter,push,Flutter,Push,我是新来的。我正试图用pushNamed将列表从NewData推送到FillData屏幕。但它说: 处理手势时引发了以下类型错误: 类型“FillData”不是类型“List”的子类型 如果删除“/FillData”中的注释,则会收到空数据。我该怎么办 这是我的代码: 设置导航器 您的代码有两个问题: 1-你不能使用onGenerateRoute进行用户路由,因为现在应用程序不知道去哪里,到你没有传递任何信息的小部件(内部路由)或onGenerateRoute内部的小部件 2-参数是一个通用对象
pushNamed
将列表从NewData推送到FillData屏幕。但它说:
处理手势时引发了以下类型错误:
类型“FillData”不是类型“List”的子类型
如果删除“/FillData”中的注释,则会收到空数据。我该怎么办
这是我的代码:
您的代码有两个问题: 1-你不能使用onGenerateRoute进行用户路由,因为现在应用程序不知道去哪里,到你没有传递任何信息的小部件(内部路由)或onGenerateRoute内部的小部件 2-参数是一个通用对象,您可以将任何需要的内容放入其中,并执行以下操作: final ChartGroupData chartName=setting.arguments;决赛 列表组名=setting.arguments 将相同的值传递给两个不同的对象,我通过执行以下操作解决了这个问题(这不是最好的,但会让您大致了解应该做什么)
- 已创建包含要传递的数据的新对象:
class ObjectToPass { final ChartGroupData chartName; final List<ChartGroupData> groupNames; ObjectToPass({this.chartName, this.groupNames}); }
- 要导航到FillData,请执行以下操作:
Navigator.pushNamed( context, '/FillData', arguments: ObjectToPass( chartName: ChartGroupData(_nameCtrl.text), groupNames: groupNames, ), );
- 最后,这是MaterialApp的外观:
return MaterialApp( initialRoute: '/NewData', onGenerateRoute: (setting) { if (setting.name == '/FillData') { return MaterialPageRoute(builder: (context) { return FillData( objectToPass: setting.arguments, ); }); } else if (setting.name == '/NewData') { return MaterialPageRoute(builder: (_) => NewData()); } return null; }, );
您可以传递一个列表而不是我创建的对象,并通过它的索引从中获取您的对象。谢谢,它可以工作。我已经成功地推送了我的列表。这是我项目中最困难的部分
lass ChartGroupData {
final String groupNames;
ChartGroupData(this.groupNames);
@override
String toString() {
return 'Group: $groupNames';
}
}
class ObjectToPass {
final ChartGroupData chartName;
final List<ChartGroupData> groupNames;
ObjectToPass({this.chartName, this.groupNames});
}
class FillData extends StatefulWidget {
final ObjectToPass objectToPass;
FillData({Key key, @required this.objectToPass}) : super(key: key);
@override
FillDataStage createState() => FillDataStage();
}
...
void _showDialog() {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text("Received Data"),
content: Text(widget.objectToPass.chartName.toString()),
);
},
);
}
void _onTapPrintReceivedData() {
print(widget.objectToPass.groupNames);
print(widget.objectToPass.chartName);
}
Navigator.pushNamed(
context,
'/FillData',
arguments: ObjectToPass(
chartName: ChartGroupData(_nameCtrl.text),
groupNames: groupNames,
),
);
return MaterialApp(
initialRoute: '/NewData',
onGenerateRoute: (setting) {
if (setting.name == '/FillData') {
return MaterialPageRoute(builder: (context) {
return FillData(
objectToPass: setting.arguments,
);
});
} else if (setting.name == '/NewData') {
return MaterialPageRoute(builder: (_) => NewData());
}
return null;
},
);