【问题标题】:Only static members can be accessed in initializer在初始化程序中只能访问静态成员
【发布时间】:2020-01-05 08:23:23
【问题描述】:

我不能在Scaffold 中使用GlobalKey。错误是

在初始化器中只能访问静态成员

//Global key
  final GlobalKey<ScaffoldState> _mainKey= GlobalKey<ScaffoldState>();
// List of TabBar
final List<Widget> tabBar = <Widget>[
    Column(
      children: <Widget>[
        Icon(Icons.account_balance_wallet),
        Text('flutter'),
        Text('dart')
      ],
    ),
    FlatButton(
      child: Text('Open Drawer'),
      onPressed: (){
         //( _mainKey) has a red underLine color
        _mainKey.currentState.openDrawer();
      },
    )
  ];
/*
Compiler message:
lib/Trial.dart:32:9: Error: Can't access 'this' in a field initializer to read '_mainKey'.
        _mainKey.currentState.openDrawer();*/

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    简答

    替换

    final _mainKey = ...; 
    

    static _mainKey = ...;
    

    长答案:

    我建议您将 tabBar 从变量更改为方法,这样您就不需要创建变量 static。喜欢:

    List<Widget> getTabBar() {
      return [
        Column(
          children: <Widget>[Icon(Icons.account_balance_wallet), Text('flutter'), Text('dart')],
        ),
        FlatButton(
          child: Text('Open Drawer'),
          onPressed: () {
            _mainKey.currentState.openDrawer();
          },
        )
      ];
    }
    

    【讨论】:

    • 能告诉我原因吗?
    • 因为你不能在初始化列表中使用非静态成员,所以我更新了问题给你一个更好的解决方案。
    • 非常感谢您,我理解简短和详细的回答,谢谢
    • 嘿,发生了什么事,你之前接受了答案,然后你就撤消了?我可以知道在这个解决方案中什么不起作用
    • 是的,我不知道为什么!我又做了一次
    猜你喜欢
    • 2019-01-23
    • 2018-11-13
    • 1970-01-01
    • 2020-08-31
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多