Flutter与Dart学习之路之Scafold的坑(一)

Flutter与Dart学习之路之Scafold的坑 一

  • 遇见的问题
    • 问题描述
    • 异常描述
    • 错误代码展示(部分)
    • 正确示范 方法一
    • 添加一个记录Scafold状态的 GlobalKey,在创建的Scafold的key中添加此参数
    • 使用_scaffoldKey 来打开侧边栏
    • 正确示范 方法二
  • 创建一个新的context(在此不做示范,下面链接有案例展示)
  • 参考文档

遇见的问题

问题描述

  • 在flutter写一个侧边栏的时候,我使用的方式是通过一个按钮中的onPress调用Scafold中的侧边栏,使用的方法是Scaffold.of(context).openDrawer();但是出现了异常,一直显示context中没有这个Scafold,我测试判断了一下传入的context是否为空,检验确实传入了context,最后发现该context是不包含Scafold的。因为此时我正在new出一个Scafold,Scafold还在生成中,context中是不包含该Scafold的,使用的context是父级的build中的context

异常描述

  • Another exception was thrown: Scaffold.of() called with a context that does not contain a Scaffold

错误代码展示(部分)

 child: new IconButton(
            iconSize: 40,
            icon: new Icon(Icons.menu),
            color: Colors.white,
             onPressed: (){
           
             if(context == null){
          print('>>>>>>>>>>>>>>>>>>>>context null');
        }else{
          print('>>>>>>>>>>>>>>>>>>context not null');
        }
            Scaffold.of(context).openDrawer();
            
             },
          ),

正确示范 方法一

添加一个记录Scafold状态的 GlobalKey,在创建的Scafold的key中添加此参数

  • 代码
class homePageState extends State{
 @override
 GlobalKey _scaffoldKey = new GlobalKey();
  
     Widget build(BuildContext context) {
       final Color backgroundColor1 = Color(0xFF444152);
       final Color backgroundColor2 = Color(0xFF6f6c7d);
       final Color highlightColor = Color(0xfff65aa3);
       final Color foregroundColor = Colors.white;

  return  new MaterialApp(

    home:new  Scaffold(
      key: _scaffoldKey,

使用_scaffoldKey 来打开侧边栏

 child: new IconButton(
            iconSize: 40,
            icon: new Icon(Icons.menu),
            color: Colors.white,
             onPressed: (){
          
            _scaffoldKey.currentState.openDrawer();
             },
          ),

正确示范 方法二

创建一个新的context(在此不做示范,下面链接有案例展示)

参考文档

参考

你可能感兴趣的:(flutter,dart)