【问题标题】:The instance member 'X' can't be accessed in an initializer. - Flutter, VoidCallback Function无法在初始化程序中访问实例成员“X”。 - Flutter, VoidCallback 函数
【发布时间】:2021-03-29 08:21:33
【问题描述】:

如您所见,我正在尝试在我的 StatelessWidget 中使用我的 StatefulWidget 的函数 addUser。唯一的问题是下面的错误添加HomeWidget(addUser: addUser),: 无法在初始化程序中访问实例成员“addUser”。 你能帮我解决这个问题吗? 非常感谢。

我的 StatefulWidget:


class _HomeStatefulState extends State<HomeStateful> {

  void addUser() {
   //do something
  }

  final List<Widget> _children = [
    HomeWidget(addUser: addUser),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: _children[_currentIndex],
      bottomNavigationBar: BottomNavigationBar(
          currentIndex: _currentIndex,
          onTap: onTabTapped,
          items: [
            BottomNavigationBarItem(
              icon: Icon(Icons.home),
              title: Text("Home"),
              backgroundColor: Colors.blue,
            ),
          ]),
    );
  }
}

StatelessWidget:


class HomeWidget extends StatelessWidget {
  const HomeWidget({Key key, @required this.addUser}) : super(key: key);
  final VoidCallback addUser;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: [
          SafeArea(
              child: Column(
            children: [
              Padding(
                child: FlatButton(
                  onPressed: addUser,
                ),
              ),
            ],
          )),
        ],
      ),
    );
  }
}


【问题讨论】:

  • final List&lt;Widget&gt; _children = ... 语句移动到build 函数中,然后再返回语句

标签: android ios flutter


【解决方案1】:

在对象初始化之前,您无法访问addUser。在构造函数中移动引用,例如

  List<Widget> _children;

  _HomeTestState() {
    _children = [
      HomeWidget(addUser: addUser),
    ];
  }

【讨论】:

    【解决方案2】:

    您的问题是您试图在初始化之前访问您的小部件的功能。
    如果你想为你的 Widget 建立一个“默认”设置,一个好方法是使用 initState 方法。

    List<Widget> _children;
      
      @override
      void initState() {
        super.initState();
        _children = [
          HomeWidget(addUser: addUser),
        ];
      }
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2020-12-12
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多