Flutter-变量初始化问题

没事写代码写到标注释这一句报错:

class TestPage extends StatefulWidget {
  @override
  TestPageState createState() {
    return TestPageState();
  }
}

class TestPageState extends State<TestPage> {

  Completer completer = Completer();

  int num = 1;

  Timer timer = Timer.periodic(Duration(seconds: 1), callback );    ///这一句报错

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        color: Colors.white,
        child: FlatButton(child: Text('点我打开弹窗'),
        onPressed: onTap,
        ),
      ),
    );
  }

   void callback(Timer t) {
    setState(() {
      num++;
    });
  }


  void onTap (){

    showDialog(context: context,
    builder: (context) => DialogPage(callback: (){completer.complete(true);}),
    );
  }

}

报错信息:

 

 意思是初始化变量的时候只能用static方法。

但callback里面有setState,不能用static方法。

解决方法是在initstate函数里进行初始化:

class TestPage extends StatefulWidget {
  @override
  TestPageState createState() {
    return TestPageState();
  }
}

class TestPageState extends State<TestPage> {

  Completer completer = Completer();

  int num = 1;

  Timer timer;

  @override
  void initState() {
    super.initState();
    timer = Timer.periodic(Duration(seconds: 1), callback );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        color: Colors.white,
        child: FlatButton(child: Text('点我打开弹窗'),
        onPressed: onTap,
        ),
      ),
    );
  }

   void callback(Timer t) {
    setState(() {
      num++;
    });
  }

 

posted @ 2020-09-05 21:02  NeoZy  阅读(1961)  评论(0编辑  收藏  举报