#flutter #flutter-desktop
#порхание #flutter-рабочий стол
Вопрос:
Я работаю над приложением Windows с flutter desktop, на данный момент все работает гладко и без проблем. Но я подозреваю, что я вызвал утечку памяти при использовании просмотра страниц!!
В принципе, у меня есть просмотры страниц с 6 страницами. Одна из этих страниц — это форма с большим количеством TextEditingController, и да, я вызываю dispose()
для каждого TextEditingController, а также для всех блоков, которые я использую.
Теперь, когда пользователь отправляет данные, и я получаю ответ от API о том, что данные были успешно сохранены, я показываю диалоговое окно успеха:
return showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Succès'),
content: Text(message),
actions: [
FlatButton(
child: Text('Sortie'),
textColor: Colors.white,
color: kColorGreen,
onPressed: () {
Navigator.of(context).pop();
pageController.jumpToPage(2);
// Tried calling dispose here !!
// dispose();
},
),
],
);
},
);
onPressed: я переношу пользователя на другую страницу. И это работает, НО когда я возвращаюсь на страницу формы, все поля формы по-прежнему заполнены старыми данными, и метод dispose никогда не вызывается!!
Я попытался вызвать метод dispose самостоятельно перед переходом на другую страницу, но безуспешно!!
Итак, мой вопрос: как я могу избавиться от всего TextEditingController и блоков, присутствующих на странице формы, при переходе из нее?
Комментарии:
1. У меня была аналогичная проблема с просмотром страниц, причем каждая страница содержала ListView с различными типами входных данных в списках. Что я сделал, так это зарегистрировал каждый метод инициализации и удаления виджетов на каждой из страниц. В конце концов выяснилось, что эти виджеты инициализируются и удаляются непредсказуемо, особенно если вы вызываете диалоговое окно, а затем закрываете его с помощью навигатора. Наша система использует MobX, и мы заполняем поля в каждом из входных данных данными из наших хранилищ MobX. Наилучший подход — заполнить каждый виджет состоянием из вашего хранилища / блока при инициализации и принудительно обновлять с помощью setState, если это необходимо.