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正常工作。