从json文件生成列表“选项”,如下所示,没有问题:为简单起见,删除了一些部分
Future getidea(String subject) async {
List ideaList = [];
for (var idea in ideaListTemp) {
List options = [];
options.add(idea["A"]);
options.add(idea["B"]);
options.add(idea["C"]);
ideaList.add(ideaItem(
idea["ideaText"],
idea["ideaMedia"],
idea[options],
));
}
return (ideaList);
}
class ideaItem {
final String ideaText;
final String ideaMedia;
List? options;
ideaItem(
this.ideaText,
this.ideaMedia,
this.options,
);
}
然而,当我使用“选项”来创建一个小部件,这个错误发生。错误:参数类型“List?”不能分配给参数类型“List”。
Widget build(BuildContext context) {
return Expanded(
child: SingleChildScrollView(
padding: const EdgeInsets.all(_horizontalMargin),
physics: const AlwaysScrollableScrollPhysics(),
child: Column(
children: [
_buildOptions(widget.fromJSON.options), // this will have the error message
],
),
),
);
}
Widget _buildOptions(List option) {
List<Widget> listElevatedButton = [];
for (var i = 0; i < option.length; i++) {
//print(allOptions[i]);
listElevatedButton.add(
Builder(
builder: (context) => Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () {
print('Use the update function');
},
child: Text(
option[i],
),
),
),
),
);
}
return Column(children: listElevatedButton);
}
解决此问题的最佳做法是什么?
2条答案
按热度按时间yduiuuwa1#
变量选项被粗心地使用,您需要确保
options
在使用之前有值,为此您可以像这样进行空检查:_buildOptions(widget.fromJSON.options)
-〉_buildOptions(widget.fromJSON.options ?? [])
只要
options
为空,这将为_buildOptions
函数提供一个空列表,并且不会在_buildOptions
函数中构建任何小部件。我希望你能理解这里的概念。
9wbgstp72#
您的属性"options"具有类型(可选)?List,这意味着它可以包含List或null值。您尝试将"options"用作"_buildOptions"函数中的参数,这需要类型List,而不是(可选)?List。
重写代码如下:
如果"widget. fromJSON. options"值为空,则_buildOptions将具有空List,否则,它将具有"widget. fromJSON. options"值的值。
祝你好运;)