如何解决如何在 Flutter / Dart 的下一个屏幕上显示小吃栏消息?
我的 Flutter 项目中有 2 个屏幕:
- 记录列表屏幕
- 添加录制屏幕
在“添加记录屏幕”上提交并添加记录后,屏幕将重定向到“记录列表屏幕”,并在此屏幕上显示添加的记录,即工作。
我的查询是我想显示成功消息,该消息应设置在“添加记录屏幕” 上,并应在转换后显示在“记录屏幕列表” 上。我在 “添加记录屏幕” 上添加快餐栏代码:
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Record has been added successfully.'),duration: Duration(milliseconds: 5000),),);
重定向到“记录列表屏幕”后返回错误。我认为“记录屏幕列表”没有在“添加记录屏幕”上设置的快餐栏“上下文”,这就是我收到错误的原因。
有没有人可以帮助我了解实际错误是什么以及如何在“记录列表屏幕”上显示小吃栏消息,设置为“添加记录屏幕”?
任何帮助将不胜感激。谢谢。
解决方法
要在下一页显示小吃店,您可以将小吃店功能传递给您要导航到的页面,然后在该页面的 initState 中调用它,使用此答案中提到的方法:https://stackoverflow.com/a/50682918/16045128
WidgetsBinding.instance?.addPostFrameCallback((_) { widget.feedback?.call(); });
反馈小吃店演示:
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,title: const Text('Home Page'),),body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: const <Widget>[
Icon(Icons.home),SizedBox(height: 15),Text(
'Home Page',],floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,children: [
Tooltip(
message: "Show Snackbar",child: ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SecondPage(
feedback: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('You have reached the second page.'),duration: Duration(seconds: 3),);
},);
},child: const Icon(Icons.check),const SizedBox(width: 15),Tooltip(
message: "Don't Show Snackbar",child: ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const SecondPage(),child: const Icon(Icons.close),);
}
}
class SecondPage extends StatefulWidget {
const SecondPage({Key? key,this.feedback}) : super(key: key);
final Function? feedback;
@override
_SecondPageState createState() => _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
@override
void initState() {
super.initState();
WidgetsBinding.instance?.addPostFrameCallback(
(_) {
widget.feedback?.call();
},);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,title: const Text('Second Page'),children: const <Widget>[
Icon(Icons.two_k),Text(
'Second Page',);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。