如果setState在build方法中调用,那么每次调用setState方法,都会触发build方法,进而导致无限循环。我们可以将setState方法放在一个异步函数中,比如Future.wait(),来避免触发无限循环。以下是代码示例:
class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder( future: loadData(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.done) { return Text('Data loaded'); } else { Future.wait([]); return CircularProgressIndicator(); } }, ); }
Future loadData() async { // here is your data loading code await Future.delayed(Duration(seconds: 2)); setState(() {}); // this will not trigger the build method return; } }