首页 > 解决方案 > 回调函数在颤动中不起作用

问题描述

创建一个示例来学习Flutter. 增加a的counter onTap是一个简单的程序GestureDetetor但是,回调方法不起作用。热重载时计数会增加,但点击时不会增加。下面是带有注释的代码。

class BoxState extends State<ChangeBoxState>{
  int _counter = 0;

  //Callback method changes the state onTap of GestureDetector widget. It is not calling onTap.
  increaseCount(){
    setState(() {
      ++_counter;
      print(_counter);
    });
  }

  @override
  Widget build(BuildContext context) {
    // Passing the callback method,"increaseCount()" to stateless class where GestureDetector is defined.
    return BoxWidget(onPressed: increaseCount(), counter: _counter,);
  }

}

无状态类:

class BoxWidget extends StatelessWidget{

  BoxWidget({this.onPressed, this.counter});

  final VoidCallback onPressed;
  final int counter;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      decoration: BoxDecoration(color: Colors.blue[500]),
      child: Column(
        children: <Widget>[Center(child: Text('Hello, world!')),
        GestureDetector(
          onTap: onPressed, //Passing onPressed to onTap.

          child: Container(
            margin: const EdgeInsets.only(left:0.0, top:200.0, right:0.0, bottom:0.0),
            height: 200.0,
            width: 200.0,
            decoration: BoxDecoration(
              color: Colors.teal[200],
              border: Border.all(color: Colors.yellow, width: 10.0, style: BorderStyle.solid),
              borderRadius: BorderRadius.all(Radius.circular(20.0)),
            ),
            child: Center(child: Text(counter.toString())),
          ),
        ),
        ],
      ),
    );
  }
}

标签: dartflutter

解决方案


删除括号,increaseCount()因为使用括号您正在创建一个实例,VoidCallback 这将只运行一次,所以试试这个

return BoxWidget(onPressed: increaseCount, counter: _counter,);

推荐阅读