Flutter错误总结1:Scaffold.of() called with a context that does not contain a Scaffold.

本文解决了一个特定的Flutter错误:Scaffold.of()被一个不包含Scaffold的上下文调用。此错误通常发生在使用Navigator从第二个页面返回到第一个页面并尝试显示SnackBar时。通过将按钮组件独立出来并正确传递上下文解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入代码片## 1.Scaffold.of() called with a context that does not contain a Scaffold.
错误出现的场景: 使用Navigator 从第二个页面向第一个页面返回值

class HomePage extends StatelessWidget {
   @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('我是第一个页面'),),
      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              child: Text('点我进入下一页面'),
              onPressed: (){
            _navigateToSecondPage(context);
              },
              )
          ],
        ),
      ),
    );
  }

  _navigateToSecondPage(BuildContext context) async {
    final result = await Navigator.push(context, 
            MaterialPageRoute(
            builder: (context)=> SecondPage(),
          ));
    Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result'),));
  }
}

修改后

class HomePage extends StatelessWidget {
   @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('我是第一个页面'),),
      body: Center(
        child: Column(
          children: <Widget>[
            RaiseMyButton()
          ],
        ),
      ),
    );
  }
}

class RaiseMyButton extends StatelessWidget{
    @override 
    Widget build(BuildContext context) {
    // TODO: implement build
    return Column(
      children: <Widget>[
        RaisedButton(
              child: Text('点我进入下一页面'),
              onPressed: (){
            _navigateToSecondPage(context);
              },
              )
      ], 
    );
    }
    _navigateToSecondPage(BuildContext context) async {
    final result = await Navigator.push(context, 
            MaterialPageRoute(
            builder: (context)=> SecondPage(),
          ));
    Scaffold.of(context).showSnackBar(SnackBar(content: Text('$result'),));
  }
}

原因: of method
需要将RaiseButton剥离出来,因为build方法如果嵌套build后,接收不到外层的context参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值