如何在 Flutter / Dart 的下一个屏幕上显示小吃栏消息?

问题描述

我的 Flutter 项目中有 2 个屏幕:

  1. 记录列表屏幕
  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(); });

反馈小吃店演示:

enter image description here

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',);
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...