Флаттер: хотите очистить данные при нажатии кнопки «Назад» или нажатии кнопки

#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();
}