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++; }); }
进击的小🐴农