关于SetState使用注意事项添加mounted判断

2023-08-22  本文已影响0人  禄子_c79b
class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  bool isLoading = false;

  void fetchData() {
    setState(() {
      isLoading = true;
    });

    // 模拟异步操作
    Future.delayed(Duration(seconds: 2), () {
      // 检查组件是否仍然挂载
      if (mounted) {
        setState(() {
          isLoading = false;
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        if (isLoading)
          CircularProgressIndicator(),
        ElevatedButton(
          onPressed: fetchData,
          child: Text('Fetch Data'),
        ),
      ],
    );
  }
}

上一篇 下一篇

猜你喜欢

热点阅读