SnackBar在Flutter中无法显示

9 浏览
0 Comments

SnackBar在Flutter中无法显示

这个问题已经有了答案:

Scaffold.of() called with a context that does not contain a Scaffold

我似乎无法弄清楚为什么它不起作用。当我点击按钮时,我应该会得到一个 snackbar。有任何帮助吗?在 Flutter API 上的代码片段却能正常工作。

void main() => runApp(SnackBarDemo());
class SnackBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SafeArea(
        child: Scaffold(
          body: Center(
            child: InkWell(
              // When the user taps the button, show a snackbar.
              onTap: () {
                Scaffold.of(context).showSnackBar(SnackBar(
                  content: Text('Tap'),
                ));
              },
              child: Container(
                padding: EdgeInsets.all(12.0),
                child: Text('Flat Button'),
              ),
            ),
          )
        )
      )
    );
  }
}

admin 更改状态以发布 2023年5月22日
0
0 Comments

您正在同级小部件中调用showSnackbar,因此您发送到此方法的上下文不包含Scaffold

解决方案:将此小部件下调到Scaffold的下一级:

void main() => runApp(SnackBarDemo());

class SnackBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: SafeArea(
            child: Scaffold(
                body: Center(
                  child: Builder(
                    builder: (context)=>InkWell(
                      // When the user taps the button, show a snackbar.
                      onTap: () {
                        Scaffold.of(context).showSnackBar(SnackBar(
                          content: Text('Tap'),
                        ));
                      },
                      child: Container(
                        padding: EdgeInsets.all(12.0),
                        child: Text('Flat Button'),
                      ),
                    ),
                  ),
                )
            )
        )
    );
  }
}

0