首页 > 解决方案 > Flutter:想要在按下返回按钮或按下按钮时清理数据

问题描述

当我按下一个带我到下一页或后退按钮的按钮时,我想清理数据,这也清理数据。但是当我回到同一页面时,数据仍然存在并且它没有回到初始页面。现在,我的代码看起来像这样:

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 因为它用于有状态小部件,后来用于无状态小部件。

标签: androidiosflutter

解决方案


您在任何类之外声明变量,因此您更改的值也将存储在这里。

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

推荐阅读