沒事寫代碼寫到標注釋這一句報錯:
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++; }); }