Dart 在底部板材中轻敲项目时显示snackbar
我想在底部工作表中单击某个项目时显示Dart 在底部板材中轻敲项目时显示snackbar,dart,flutter,Dart,Flutter,我想在底部工作表中单击某个项目时显示Snackbar。我试过这个 @override Widget build(BuildContext defaultContext) { return Scaffold( body: Center( child: RaisedButton( onPressed: () => showModalBottomSheet( context: defaultContext,
Snackbar
。我试过这个
@override
Widget build(BuildContext defaultContext) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () => showModalBottomSheet(
context: defaultContext,
builder: (BuildContext context) {
return Builder(
builder: (BuildContext builderContext) {
return ListTile(
title: Text("Click me"),
onTap: () {
Navigator.pop(builderContext); // hiding bottom sheet
Scaffold.of(builderContext).showSnackBar(SnackBar(content: Text("Hi")));
},
);
},
);
},
),
),
),
);
}
但我有错误
使用不包含脚手架的上下文调用Scaffold.of()
注意这个问题不是重复的
PS:我知道我可以在
Scaffold
中使用GlobalKey
来显示Snackbar
,但我想使用Builder
像使用Builder
一样。我确实使用了builder,但它不起作用。这终于解决了
@override
Widget build(BuildContext defaultContext) {
return Scaffold(
body: Center(
child: Builder(builder: (builderContext) {
return RaisedButton(
onPressed: () => showModalBottomSheet(
context: defaultContext,
builder: (BuildContext context) {
return ListTile(
title: Text("Click me"),
onTap: () {
Navigator.pop(builderContext); // hiding bottom sheet
Scaffold.of(builderContext).showSnackBar(SnackBar(content: Text("Hi")));
},
);
},
),
);
},),
),
);
}
我需要将
Builder
移到树上。我不知道为什么,但它起作用了 有人能告诉我为什么将Builder
移到树上会使它工作吗?它会在最接近的上下文(context1)中找到上面最接近的脚手架。虽然您的错误示例在context2/RaisedButton中找到了它,但它没有。@mnemonic23谢谢,但我的命名约定太糟糕了,我更新了约定并格式化了代码,您现在可以告诉我使用更新的名称了吗?想法是,您必须将“Builder”放在脚手架下面的某个地方,但仍然放在脚手架所在的同一个BuildContext中(这是defaultContext)。发生错误的原因是您将“生成器”放置在另一个上下文(属于showModalBottomSheet)中。我认为这可以解释为什么我们需要其他生成器才能使showSnackBar正常工作。