当前位置:  开发笔记 > 编程语言 > 正文

Flutter从不同的Dart文件访问父脚手架

如何解决《Flutter从不同的Dart文件访问父脚手架》经验,为你挑选了1个好方法。

我有这个:

  final GlobalKey _scaffoldkey = new GlobalKey();

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        key: _scaffoldkey,
        drawer: Menu(),
        appBar: AppBar(
          title: Container(
            child: Text('Dashboard'),
          ),
          bottom: TabBar(
            tabs: [
              ...
            ],
          ),
        ),
        body: TabBarView(
          children: [
            ...
          ],
        ),
      ),
    );
  }
}

现在,drawer: Menu()将从另一个menu.dart文件中导入,该文件如下所示:

class Menu extends StatelessWidget {

  final GlobalKey drawerKey = new GlobalKey();

  @override
  Widget build(BuildContext context) {
    return new Drawer(
      key: drawerKey,
      child: new ListView(
        children: [
          new ListTile(
            dense: true,
            title: new Text('My Text'),
            onTap: () {
              // On tap this, I want to show a snackbar.
              scaffoldKey.currentState.showSnackBar(showSnack('Error. Could not log out'));
            },
          ),
        ],
      ),
    );
  }
}

通过以上方法,我得到

NoSuchMethodError: The method 'showSnackBar' was called on null.

一个简单的解决方案是将所有menu.dart内容drawer: ...直接塞入其中。

我正在查看的另一种方法是能够引用父支架以显示小吃栏。

一个人怎么能做到这一点?

为什么甚至不能只在Flutter的任何地方打电话给快餐店,而必须通过脚手架来完成呢?只是为什么



1> rmtmckenzie..:

您应尽量避免使用GlobalKey;使用Scaffold.of获取ScaffoldState 几乎总是更好。由于您的菜单位于小部件树中的支架下方,因此Scaffold.of(context)将执行您想要的操作。

您尝试执行的操作不起作用的原因是,您正在创建两个单独的GlobalKeys-每个GlobalKeys是其自己的对象。将它们视为全局指针-由于您要创建两个不同的指针,因此它们指向不同的事物。由于您要将错误的类型传递到Drawer的key字段中,因此状态实际上应该是分析失败的……

如果出于某种原因绝对必须使用GlobalKeys,最好将外部小部件中创建的实例Menu作为成员ie 传递给您的类this.scaffoldKey,但这是不推荐的。

使用Scaffold.of,这就是您的代码在onTap函数中的样子:

onTap: () {
  // On tap this, I want to show a snackbar.
  Scaffold.of(context).showSnackBar(showSnack('Error. Could not log out'));
},

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有