我在flutter中将json数据传递给新的有状态小部件。我可以在调试控制台中看到数据不是null,但是有状态的小部件会接收到null数据。
我尝试了其他传递数据类型,但仍然无法正常工作。
我该如何解决?任何帮助
这是代码
导航器代码
void goToFilteredList() async {
jsonData =await postQuotationFilteredList(
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
false,
false,
null,
null);
print(jsonData);
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => FilteredQuotationList(jsonData)));
}
状态小部件
class FilteredQuotationList extends StatefulWidget {
final List<Map<String, dynamic>> jsonData;
FilteredQuotationList(this.jsonData);
static const String routeName = "/filteredquotationlist";
@override
State<StatefulWidget> createState() =>
FilteredQuotationListScreen(this.jsonData);
}
jsonData具有相同的类型,并且存在缺点,并且此代码接收到空数据。
class FilteredQuotationListScreen extends State<FilteredQuotationList> {
List<Map<String, dynamic>> jsonData;
FilteredQuotationListScreen(List<Map<String, dynamic>> jsonData) {
this.jsonData = jsonData;
}
@override
Widget build(BuildContext context) {
print("filtreleme ekranı");
print(jsonData);
return Scaffold(
body: quotationFilteredListItems(jsonData),
);
}
ListView quotationFilteredListItems(List<Map<String, dynamic>> jsonData) {
print("quotation filtered list items");
List<GetQuotationModel> getQuotationModel =
GetQuotationModel.fromJson(jsonData);
print(getQuotationModel.length);
return ListView.builder(
itemCount: 3,
itemBuilder: (BuildContext context, int position) {
return Card(
color: Colors.amberAccent,
elevation: 2.0,
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.green,
child: Text("getQuotationModel.quoteNumber"),
),
title: Text("this."),
),
);
},
);
}
}
答案 0 :(得分:0)
首先,这不是您应该使用通过其构造函数提供数据的有状态窗口小部件的方式。基本上,State对象可以免费访问Widget对象的任何参数。
以下是应如何使用它的示例。
class MyWidget extends StatefulWidget {
MyWidget({
Key key,
@required this.myParameter,
}) : super(key: key);
final String myParameter;
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
@override
Widget build(BuildContext context) {
return Text(widget.myParameter); // the widget accessor is included in every State
}
}
然后使用它看起来像这样:
@override
Widget build(BuildContext context) {
return MyWidget(myParameter: "Hurray!");
}
让我知道这是否可以解决您遇到的问题。