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++;
    });
  }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM