Список виджетов не отображается на экране

#flutter #android-studio

Вопрос:

У меня есть этот код, который получит список напоминаний в базе данных и покажет его на экране. Он отлично работает со списком напоминаний. Проблема в том, что когда список пуст (напоминания нет), я хочу, чтобы в нем отображался текст типа «Напоминания нет». Поэтому я попробовал использовать столбец, текстовый виджет, я завернул их в список, как показано ниже, но на экране ничего не отображается.

Если я удалю [], это ошибка, значение типа «Карта» не может быть возвращено из метода «buildReminderList», потому что он имеет возвращаемый тип «Список».

Кто-нибудь знает, как сделать так, чтобы текст типа «Напоминания нет» отображался в случае, когда список «Предстоящие» пуст.

 List<Widget> buildReminderList(List<Reminder> reminders) {
    debugPrint(reminders.length.toString());
    if (reminders != null)
      return reminders.map((Reminder reminder)
      => ListTile()).toList();
    else
      return [Card(
          child: ListTile(
            title: Text("There is no reminder", style: TextStyle(fontWeight: FontWeight.bold)),
          )
      )];
  }
 

введите описание изображения здесь

Ответ №1:

Результат

выход

попробуй вот так

 import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';


class Test extends StatelessWidget {
  List<Widget> buildReminderList() {
    return [
      Card(
        child: ListTile(
          title: Text("There is no reminder",
              style: TextStyle(fontWeight: FontWeight.bold)),
        ),
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ListView(
          children: [
            ...buildReminderList().toList(),
          ],
        ),
      ),
    );
  }
}

 

Комментарии:

1. Я пробую это, все работает нормально, но на экране ничего не отображается, я даже указываю черный цвет, размер: 20, но на экране ничего не отображается. Это хорошо работает со списком, но когда список пуст, ничего не отображается таким образом.

2. попробуй flutter clean перестроиться. также заменить if (reminders != null) на if (reminders.length>0) ,

3. flutter clean работает, большое вам спасибо!

Ответ №2:

Просто замените List<Widget> на Widget :-

 Widget buildReminderList(List<Reminder> reminders) {
    debugPrint(reminders.length.toString());
    if (reminders != null)
      return reminders.map((Reminder reminder)
      => ListTile()).toList();
    else
      return Text("There is no reminder", style: TextStyle(fontWeight: FontWeight.bold));
  }
 

Комментарии:

1. Если я заменю его виджетом и удалю . Функция ToList() выдает следующую ошибку: «Значение типа ‘Iterable<ListTile>’ не может быть возвращено из метода ‘buildReminderList’, поскольку оно имеет возвращаемый тип «Виджет»».