美文网首页
关于SetState使用注意事项添加mounted判断

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

作者: 禄子_c79b | 来源:发表于2023-08-22 11:40 被阅读0次
    • 在 Flutter 中,if (mounted) 是一种常用的用法,用于在某些异步操作或回调中检查当前组件是否仍然存在于界面上(即是否已经被挂载)。

    • Flutter 组件在销毁之后,仍然可能会有一些异步操作或回调在执行,此时访问已销毁的组件可能会引发异常。为了避免这种情况,通常在异步操作或回调的代码中,使用 if (mounted) 条件来检查组件是否仍然挂载在界面上。

    • 示例:

    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'),
            ),
          ],
        );
      }
    }
    
    
    • 在上面的示例中,我们在异步操作中使用 if (mounted) 条件来检查组件是否仍然挂载,以避免在组件已销毁后执行 setState 导致异常。

    • 这个模式在处理异步操作或回调时非常有用,可以确保在组件已销毁后不会触发不必要的更新或操作。

    相关文章

      网友评论

          本文标题:关于SetState使用注意事项添加mounted判断

          本文链接:https://www.haomeiwen.com/subject/xrhumdtx.html