flutter 扑动/ dart :创建/分配动态列表

2w2cym1i  于 2023-01-31  发布在  Flutter
关注(0)|答案(2)|浏览(146)

从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);
}

解决此问题的最佳做法是什么?

yduiuuwa

yduiuuwa1#

变量选项被粗心地使用,您需要确保options在使用之前有值,为此您可以像这样进行空检查:
_buildOptions(widget.fromJSON.options)-〉_buildOptions(widget.fromJSON.options ?? [])
只要options为空,这将为_buildOptions函数提供一个空列表,并且不会在_buildOptions函数中构建任何小部件。
我希望你能理解这里的概念。

9wbgstp7

9wbgstp72#

您的属性"options"具有类型(可选)?List,这意味着它可以包含List或null值。您尝试将"options"用作"_buildOptions"函数中的参数,这需要类型List,而不是(可选)?List。
重写代码如下:

Column(
  children: [
    _buildOptions(widget.fromJSON.options ?? []),
  ],
),

如果"widget. fromJSON. options"值为空,则_buildOptions将具有空List,否则,它将具有"widget. fromJSON. options"值的值。
祝你好运;)

相关问题