问题是,您的snackBar 有持续时间,如果您导航回屏幕,在该持续时间内,您会再次看到那个旧的snackBar。
解决方法是在 Navigator 之前添加这个方法:
Scaffold.of(context).removeCurrentSnackBar();
在您的情况下,您使用的是scaffoldKey,因此请根据需要进行翻译。但是,请确保您与正确的 Scaffold 联系。
scaffoldKey.currentState.removeCurrentSnackBar();
官方链接:
https://api.flutter.dev/flutter/material/ScaffoldState/removeCurrentSnackBar.html
编辑:关于在 Screen 2 Scaffold 中调用 Screen 1 Scaffold:
您的屏幕有支架。如我所见,脚手架在你的情况下有关键。
假设 Screen1 有 screen1Key ScaffoldState 键。 Screen2 也一样。
必须在 Screen2 内调用
screen1Key.currentState.removeCurrentSnackBar();
full example:
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
home: Screen1(),
));
}
GlobalKey<ScaffoldState> screen1Key = GlobalKey<ScaffoldState>();
GlobalKey<ScaffoldState> screen2Key = GlobalKey<ScaffoldState>();
class Screen1 extends StatefulWidget {
@override
_Screen1State createState() => _Screen1State();
}
class _Screen1State extends State<Screen1> {
@override
Widget build(BuildContext context) {
return Scaffold(
key: screen1Key,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
RaisedButton(
onPressed: () {
screen1Key.currentState
.showSnackBar(SnackBar(content: Text('Screen 1 SnackBar')));
},
child: Text('Show SnackBar'),
),
RaisedButton(
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return Screen2();
}));
},
child: Text('Navigate forward'),
),
],
),
),
);
}
}
class Screen2 extends StatefulWidget {
@override
_Screen2State createState() => _Screen2State();
}
class _Screen2State extends State<Screen2> {
@override
Widget build(BuildContext context) {
return Scaffold(
key: screen2Key,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
RaisedButton(
onPressed: () {
screen2Key.currentState
.showSnackBar(SnackBar(content: Text('Screen 2 SnackBar')));
},
child: Text('Show SnackBar'),
),
RaisedButton(
onPressed: () {
screen1Key.currentState.removeCurrentSnackBar();
Navigator.pop(context);
},
child: Text('Navigate Back'),
),
],
),
),
);
}
}
我希望我能很好地理解你的问题。