Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 在颤振中使用定制脚手架复制GlobalKey_Dart_Flutter - Fatal编程技术网

Dart 在颤振中使用定制脚手架复制GlobalKey

Dart 在颤振中使用定制脚手架复制GlobalKey,dart,flutter,Dart,Flutter,我正试图根据以下github问题在颤振中实现自定义脚手架: 导入“包装:颤振/材料.省道”; 类MyCustomScaffold扩展了Scaffold{ 静态GlobalKey _keyscafold=GlobalKey(); MyCustomScaffold({ AppBar AppBar, 小部件主体, 控件浮动操作按钮, 浮动ActionButton定位浮动ActionButton定位, 浮动ActionButtonImator浮动ActionButtonImator, 列出Persist

我正试图根据以下github问题在颤振中实现自定义脚手架:

导入“包装:颤振/材料.省道”;
类MyCustomScaffold扩展了Scaffold{
静态GlobalKey _keyscafold=GlobalKey();
MyCustomScaffold({
AppBar AppBar,
小部件主体,
控件浮动操作按钮,
浮动ActionButton定位浮动ActionButton定位,
浮动ActionButtonImator浮动ActionButtonImator,
列出PersistentFooter按钮,
小部件抽屉,
小部件收尾抽屉,
小部件底部导航栏,
小部件底页,
颜色背景颜色,
bool resizeToAvoidBottomPadding=true,
bool primary=true,
}):超级(
键:_键折叠,
appBar:endDrawer!=null&&
appBar.actions!=null&&
appBar.actions.isNotEmpty
?_buildEndDrawerButton(appBar)
:appBar,
身体:身体,,
浮动操作按钮:浮动操作按钮,
浮动ActionButtonLocation:浮动ActionButtonLocation,
浮动ActionButtonImator:浮动ActionButtonImator,
persistentFooterButtons:persistentFooterButtons,
抽屉:抽屉,
收尾抽屉:收尾抽屉,
底部导航栏:底部导航栏,
底纸:底纸,
背景色:背景色,
resizeToAvoidBottomPadding:resizeToAvoidBottomPadding,
小学:小学,,
);
静态AppBar _buildEndDrawerButton(AppBar myAppBar){
myAppBar.actions.add(图标按钮(
图标:图标(图标菜单),
按下时:()=>!\u键cafold.currentState.IsEndDrawerRopen
?_keyScaffold.currentState.openanddrawer()
:null));
返回myAppBar;
}
}
代码本身运行良好。但是如果我使用其他GlobalKey在屏幕之间导航,就会出现
Duplicate GlobalKey
错误


如何避免这种情况?

尝试以下几项更改,以避免使用static时出现问题

    class MyCustomScaffold extends Scaffold {
      MyCustomScaffold({
        AppBar appBar,
        Widget body,
        GlobalKey<ScaffoldState> key,
        Widget floatingActionButton,
        FloatingActionButtonLocation floatingActionButtonLocation,
        FloatingActionButtonAnimator floatingActionButtonAnimator,
        List<Widget> persistentFooterButtons,
        Widget drawer,
        Widget endDrawer,
        Widget bottomNavigationBar,
        Widget bottomSheet,
        Color backgroundColor,
        bool resizeToAvoidBottomPadding = true,
        bool primary = true,
      })  : assert(key != null),
            super(
              key: key,
              appBar: endDrawer != null &&
                      appBar.actions != null &&
                      appBar.actions.isNotEmpty
                  ? _buildEndDrawerButton(appBar, key)
                  : appBar,
              body: body,
              floatingActionButton: floatingActionButton,
              floatingActionButtonLocation: floatingActionButtonLocation,
              floatingActionButtonAnimator: floatingActionButtonAnimator,
              persistentFooterButtons: persistentFooterButtons,
              drawer: drawer,
              endDrawer: endDrawer,
              bottomNavigationBar: bottomNavigationBar,
              bottomSheet: bottomSheet,
              backgroundColor: backgroundColor,
              resizeToAvoidBottomPadding: resizeToAvoidBottomPadding,
              primary: primary,
            );

      static AppBar _buildEndDrawerButton(
          AppBar myAppBar, GlobalKey<ScaffoldState> _keyScaffold) {
        myAppBar.actions.add(IconButton(
            icon: Icon(Icons.menu),
            onPressed: () => !_keyScaffold.currentState.isEndDrawerOpen
                ? _keyScaffold.currentState.openEndDrawer()
                : null));
        return myAppBar;
      }
    }
类MyCustomScaffold扩展了Scaffold{
MyCustomScaffold({
AppBar AppBar,
小部件主体,
环球钥匙,
控件浮动操作按钮,
浮动ActionButton定位浮动ActionButton定位,
浮动ActionButtonImator浮动ActionButtonImator,
列出PersistentFooter按钮,
小部件抽屉,
小部件收尾抽屉,
小部件底部导航栏,
小部件底页,
颜色背景颜色,
bool resizeToAvoidBottomPadding=true,
bool primary=true,
}):assert(key!=null),
超级(
钥匙:钥匙,
appBar:endDrawer!=null&&
appBar.actions!=null&&
appBar.actions.isNotEmpty
?_buildEndDrawerButton(应用栏,键)
:appBar,
身体:身体,,
浮动操作按钮:浮动操作按钮,
浮动ActionButtonLocation:浮动ActionButtonLocation,
浮动ActionButtonImator:浮动ActionButtonImator,
persistentFooterButtons:persistentFooterButtons,
抽屉:抽屉,
收尾抽屉:收尾抽屉,
底部导航栏:底部导航栏,
底纸:底纸,
背景色:背景色,
resizeToAvoidBottomPadding:resizeToAvoidBottomPadding,
小学:小学,,
);
静态AppBar _BuildEndDroperButton(
AppBar myAppBar,GlobalKey(折叠键){
myAppBar.actions.add(图标按钮(
图标:图标(图标菜单),
按下时:()=>!\u键cafold.currentState.IsEndDrawerRopen
?_keyScaffold.currentState.openanddrawer()
:null));
返回myAppBar;
}
}
这样使用:

  class YourWidget extends StatelessWidget {

    GlobalKey<ScaffoldState> _key = GlobalKey();

    @override
    Widget build(BuildContext context) {
      return MyCustomScaffold(
          endDrawer: Drawer(),
          key: _key,
          appBar: AppBar(
          ...
class YourWidget扩展了无状态Widget{
GlobalKey _key=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回MyCustomScaffold(
endDrawer:Drawer(),
键:_键,
appBar:appBar(
...

请解释您所做的操作,而不是粘贴代码。谢谢。
  class YourWidget extends StatelessWidget {

    GlobalKey<ScaffoldState> _key = GlobalKey();

    @override
    Widget build(BuildContext context) {
      return MyCustomScaffold(
          endDrawer: Drawer(),
          key: _key,
          appBar: AppBar(
          ...