我有一个带2个按钮的ScreenA。按钮1按下ScreenB(快照),并作为ScreenB(this.snapshot)接收。按钮2按下ScreenB(null)。根据ScreenB中快照是否为null或不同,ScreenB initState中会触发不同的方法。
现在,如果我首先按下按钮2,即ScreenB(null),则快照在ScreenB中的确为空。但是,如果我按Button1,即ScreenB(快照),然后弹出ScreenB,然后按Button2,我希望快照在ScreenB中为空,但不是。
我在这里想念什么吗?欣赏一些启示。
根据要求添加了测试代码:
ScreenA:
import 'screen_b.dart';
import "package:flutter/material.dart";
import 'mock_data.dart';
List < MockData > snapshot = List < MockData > ();
class ScreenA extends StatelessWidget {
@override
Widget build(BuildContext context) {
snapshot.add(MockData("1", "title", "description"));
return Scaffold(
appBar: AppBar(
title: Text("ScreenA"),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.all(12.0),
child: ListView(
children: < Widget > [
Center(child: FlatButton(
child: Text("Goto ScreenB with null", style: TextStyle(fontSize: 20.0, color: Colors.blue)),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => ScreenB(null)));
},
), ),
SizedBox(height: 20.0), Center(child: FlatButton(
child: Text("Goto ScreenB with data", style: TextStyle(fontSize: 20.0, color: Colors.blue)),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => ScreenB(snapshot[0])));
},
), ),
],
),
), );
}
}
ScreenB:
import "package:flutter/material.dart";
import 'mock_data.dart';
bool editing = false;
class ScreenB extends StatefulWidget {
ScreenB(this._snapshot);
final MockData _snapshot;
@override
_ScreenBState createState() => _ScreenBState();
}
class _ScreenBState extends State < ScreenB > {
@override
void initState() {
super.initState();
if (widget._snapshot != null) {
editing = true;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("ScreenB"),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.all(30.0),
child: Center(child: Text("Is Editing: $editing ",
style: TextStyle(fontSize: 20.0, color: Colors.red)),
),
), );
}
}
MockData类:
class MockData {
String id;
String title;
String description;
MockData(this.id, this.title, this.description);
}
要测试: 1.运行ScreenA并点击按钮“转到带有空值的ScreenB”。屏幕B上的文本按预期显示“正在编辑中:否”。
在appBar上单击向后箭头以弹出ScreenB,然后点击“转到带有数据的ScreenB”。屏幕B上的文本按预期显示“正在编辑:是”。
重复1,现在ScreenB上的文本显示“ Is Editing:true”,这是不期望的。
答案 0 :(得分:0)
是您在此处提到的类型为AsyncSnapshot的快照,如果是,则数据快照从不为空,快照的数据字段为空
# boardapp/__init__.py
from . import admin
from . import apps
from . import models
from . import tests
from . import urls
from . import views
让我知道这是否有帮助。
答案 1 :(得分:0)
最终做了:
@override
void dispose() {
editing = false;
super.dispose();
}
屏幕B中的
。尽管变量为何即使在弹出屏幕后仍保留最后一个值,仍然感到困惑。