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