0

我想将数据从 sqlite 显示到 SimpleDialog 小部件

showDialog(
  context: context,
  barrierDismissible: true,
    builder: (BuildContext context) {
      return SimpleDialog(
        title: const Text('Select Category '),
        children: <Widget>[
          dbHelper.getCategories().then((val) {
            for (var item in val) {
              SimpleDialogOption(
                onPressed: () {
                  Navigator.pop(context);
                },
                child: const Text('Food'),
              );
            }
          }),
      ],
    );
});

这样做时,我收到以下错误:

“未来”类型不是“小部件”类型的子类型

4

1 回答 1

1

您正在尝试将SimpleDialogOption小部件添加到children,但您需要等待将来完成后再添加它们。

“未来”类型不是“小部件”类型的子类型

这个错误应该给你一个提示:它需要小部件,你给它一个未来(dbHelper.getCategories().then((val)返回 a Future)。

有效的是在显示对话框之前等待您的类别。为此,您可以使用FutureBuilder

FutureBuilder(
  future: dbHelper.getCategories(),
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData) {
      showDialog(
        context: context,
        barrierDismissible: true,
        builder: (BuildContext context) {
          return SimpleDialog(
            title: const Text('Select Category '),
            children: [
              for (var item in snapshot.data) {
                SimpleDialogOption(
                  onPressed: () { Navigator.pop(context); },
                  child: const Text('Food'),
                );
              }
            }
于 2020-01-19T15:23:16.650 回答