android - 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 因为它用于有状态小部件,后来用于无状态小部件。
解决方案
您在任何类之外声明变量,因此您更改的值也将存储在这里。
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();
}
推荐阅读
- excel - 如果单元格 A 值包含一些单词,则在 B 列中打印 yes
- ffmpeg - 无法在 ffmpeg 的精简版中使用 concat
- image-processing - 在FFmpeg中使用mininterpolate来减少模糊帧是否很好
- python - 当测试文件夹包含 __init__.py 时,在 pytest 中找不到模块错误
- c - gdb 错误地解析堆栈变量位置
- javascript - 如何在一个语句中声明和定义多个变量?
- javascript - Passport.js、会话和反应 | 从 /login 路由以外的任何路由访问 req.user 是未定义的
- swagger-ui - 在 SpringDoc OpenAPi 中未禁用 petstore URL
- python - 在 Google Colab 中安装 RDKit
- bash - 如何将范围保存到变量中以便稍后在 for 循环中使用它