簡體   English   中英

Flutter:想要在按下后退按鈕或按下按鈕時清理數據

[英]Flutter: want to clean data when pressing back button or pressing a button

我想在按下一個按鈕時清除數據,該按鈕將我帶到下一頁或后退按鈕也清除數據。 但是當我回到同一頁面時,數據仍然存在,並且沒有回到初始頁面。 現在,我的代碼看起來像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM