Отображение данных из sqlite в simpledialog во флаттере - PullRequest
0 голосов
/ 19 января 2020

Я хочу отобразить данные из 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'),
              );
            }
          }),
      ],
    );
});

При этом я получаю следующую ошибку:

тип 'Future' не является подтипом введите "Виджет"

1 Ответ

1 голос
/ 19 января 2020

Вы пытаетесь добавить SimpleDialogOption виджеты к children, но вам нужно дождаться завершения в будущем, прежде чем добавлять их.

type 'Future' не является подтипом типа 'Виджет'

Эта ошибка должна дать вам подсказку: она ожидает виджеты, а вы даете ей будущее (dbHelper.getCategories().then((val) возвращает 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'),
                );
              }
            }
...