#android #ios #flutter
#Android #iOS #флаттер
Вопрос:
Я хочу очистить данные при нажатии кнопки, которая переводит меня на следующую страницу или кнопку возврата, которая также очищает данные. Но когда я возвращаюсь на ту же страницу, данные все еще там, и они не возвращаются на страницу инициализации. Прямо сейчас мой код выглядит примерно так:
import 'package:flutter/material.dart';
DateTime _dateFrom;
DateTime _dateTo;
bool _checked = false;
class ItemDetail extends StatelessWidget{
var someVariable1 = "something";
var someVariable2 = "Something elser";
@override
Widget build(BuildContext context) {
return Scaffold(
//Some widgets here
//_DateTimePickerAndCheckBox is also used here
);
}
}
class _DateTimePickerAndCheckBox extends StatefulWidget
{
@override
State<StatefulWidget> createState() => _DateTimePickerAndCheckBoxState();
}
class _DateTimePickerAndCheckBoxState extends State<_DateTimePickerAndCheckBox>
{
@override
Widget build(BuildContext context)
{
return Column(); //More widgets here
}
}
Все, что я хочу, это удалить _dateFrom и _dateTo, потому что они используются для виджета с отслеживанием состояния, а затем используются для виджета без состояния.
Комментарии:
1. Вы должны добавить больше кода, включая навигацию между страницами, чтобы помочь нам понять вашу проблему
2. Он использует navigator.pop, когда я нажимаю кнопку
3. Хорошо, но без дополнительной информации я не могу вам здесь помочь
Ответ №1:
Вы объявляете переменные вне каких-либо классов, поэтому измененное вами значение также будет сохранено здесь.
DateTime _dateFrom;
DateTime _dateTo;
class ItemDetail extends StatelessWidget {} ...
Вариант 1: вы можете объявить его внутри класса ItemDetail.
class ItemDetail extends StatelessWidget {
DateTime _dateFrom;
DateTime _dateTo;
}
Вариант 2
Или, если у вас есть несколько классов в этом файле, которые зависят от него, создайте пользовательский класс для его включения и используйте его. Объекты будут создаваться и удаляться автоматически в зависимости от состояния экрана.
class _DateTime{
DateTime from;
DateTime to;
}
Чтобы использовать его, создайте объект _DateTime, когда захотите
_DateTime dateTime = _DateTime();
dateTime.from = ... // your code here
dateTime.to = ... // your code here
Не забудьте передать объект дочернему виджету, если вы хотите использовать тот же объект позже.
ПРЕДУПРЕЖДЕНИЕ. Вы должны хорошо понимать, как передавать данные между виджетами, например, от родителей к дочернему элементу и от дочернего элемента к родителям.
Хорошим методом будет использование какого-либо инструмента управления состоянием, такого как Provider.
Вариант 3
Это не правильное решение, а просто умный хак, вам не нужно ничего менять в своем коде, кроме замены метода кнопки закрытия на:
onPressed/ontap : () {
_dateFrom = null;
_dateTo = null;
Navigator.of(context).pop();
}