Хобрук: Ваш путь к мастерству в программировании

Как создать список ListTile во Flutter?

Моя цель - иметь список ListTiles, чтобы отслеживать, иметь возможность добавлять/удалять элементы, которые позже могут отображаться в ListView. Вот упрощенная версия моего кода:

class Notes extends StatefulWidget{

  List<ListTile> notes;

  _NotesState createState() => new _NotesState();
}

class _NotesState extends State<Notes>{

  @override
  Widget build(BuildContext context){

     widget.notes.add(new ListTile(title: new Text("Title")));

     return new ListView(
       children: <ListTile>[
          notes[0],
       ]
     );
  }
}

Но я получаю следующее:

NoSuchMethodError: метод add был вызван при нулевом значении. Получатель: ноль Пробный вызов: добавить (Экземпляр 'ListTile')

Я предполагаю, что это должно быть возможно сделать, хотя, конечно, я могу ошибаться. Заранее благодарю за помощь в моем, возможно, глупом вопросе.


Ответы:


1

Проблема двоякая: 1) ваше поле заметок может быть не инициализировано. 2) вы сохраняете состояние вне объекта State. Вместо этого поместите свои заметки внутрь вашего объекта состояния и инициализируйте член следующим образом:

class _NotesState extends State<Notes>{
  List<ListTile> notes = [
    new ListTile(title: new Text("Title")),
  ];

  @override
  Widget build(BuildContext context){
     return new ListView(
       children: <ListTile>[
          notes[0],
       ]
     );
  }
}

Причина, по которой такие изменяемые данные должны быть в State, заключается в том, что сам виджет может перестраиваться десятки раз, стирая все ваши заметки. Например, если ваш виджет является потомком анимации, он будет перестраиваться 60 раз в секунду. Это также означает, что вам вообще не следует изменять данные внутри метода сборки, поскольку он может вызываться чаще, чем вы думаете.

03.04.2018
Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...