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