调用 Scaffold.of() 时出现了一个问题,该问题是由不包含 Scaffold 的上下文引起的。

7 浏览
0 Comments

调用 Scaffold.of() 时出现了一个问题,该问题是由不包含 Scaffold 的上下文引起的。

此问题已经在以下地方有答案:

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

我试图在scaffold上创建一个snackbar,但是出现了Scaffold.of() called with a context that does not contain a Scaffold的错误,并且我无法解决它,我尝试设置一个key但是出现了错误并且无法设置一个key,这是我的代码:

class Login extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          centerTitle: true,
          backgroundColor: Colors.transparent,
          elevation: 0.0,
          title: Text('Log in',
              style: TextStyle(color: Colors.black),
              textAlign: TextAlign.center),
        ),
                    SizedBox(
                        width: 500,
                        height: 50.0,
                        child: RaisedButton(
                            textColor: Colors.white,
                            color: Colors.blue,
                            child: Text('Log In'),
                            onPressed: () => {
                             Scaffold.of(context).showSnackBar(SnackBar(content: Text('Done!'),))
                            }))
                  ])
                ],
              ),
            ),
          ),
        ));
  }
}

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

通过在RaisedButton周围添加一个名为Builder的小部件,可以解决这个问题。这将导致出现一个新的上下文,这是因为您使用的是实例化Scaffold的小部件的上下文,而不是Scaffold子对象的上下文,从而解决了问题。希望这能帮到你,下面我会附上更新的代码片段来帮助你!

class Login extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          centerTitle: true,
          backgroundColor: Colors.transparent,
          elevation: 0.0,
          title: Text('Log in',
              style: TextStyle(color: Colors.black),
              textAlign: TextAlign.center),
        ),
                    SizedBox(
                        width: 500,
                        height: 50.0,
                        child: Builder(
                           builder: (context) {
                             return RaisedButton(
                               textColor: Colors.white,
                               color: Colors.blue,
                               child: Text('Log In'),
                               onPressed: () => {
                                Scaffold.of(context).showSnackBar(SnackBar(content: Text('Done!'),))
                                })
                             }
                        )
                   )
                  ])
                ],
              ),
            ),
          ),
        ));
  }
}

0