Aryan Bisht Asked: 2025-01-09 13:15:18 +0800 CST2025-01-09 13:15:18 +0800 CST 2025-01-09 13:15:18 +0800 CST Flutter中context.mounted和mounted的区别 772 有人能解释一下 Flutter 中 context.mounted 和 mounted 的区别吗?我不确定什么时候该用哪个,所以大多数时候我都会互换使用它们。请解释一下 flutter 1 个回答 Voted Best Answer Saiful Islam 2025-01-09T13:30:02+08:002025-01-09T13:30:02+08:00 在 Flutter 中,context.mounted和mounted用于在执行某些操作(尤其是异步操作)之前检查 Widget 是否仍是 Widget 树的一部分。但它们的访问方式有所不同。 1.context.mounted 在 Flutter 3.10 中引入,context.mounted是 的一个实例属性BuildContext。 它允许检查与给定关联的小部件是否BuildContext仍然安装(即小部件树的一部分)。 在异步回调中或当您传递BuildContext给另一个函数并想要验证小部件是否仍然处于活动状态时很有用。 2.mounted Flutter 中类的一个属性State。 指示State对象是否仍然处于活动状态以及其小部件是否仍在小部件树中。 通常在同一个State类中使用来检查执行操作是否可以安全。 主要区别 context.mounted与 绑定BuildContext,可以在 的任何可用地方访问BuildContext。 mounted特定于State对象,并且只能在State类内访问。 示例 使用context.mounted import 'package:flutter/material.dart'; class ExampleWidget extends StatefulWidget { @override State<ExampleWidget> createState() => _ExampleWidgetState(); } class _ExampleWidgetState extends State<ExampleWidget> { Future<void> fetchData(BuildContext context) async { // Simulate a network request await Future.delayed(Duration(seconds: 2)); // Use context.mounted to check if the widget is still active if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text("Data fetched successfully!")), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("Context Mounted Example")), body: Center( child: ElevatedButton( onPressed: () => fetchData(context), child: Text("Fetch Data"), ), ), ); } } 使用mounted import 'package:flutter/material.dart'; class ExampleWidget extends StatefulWidget { @override State<ExampleWidget> createState() => _ExampleWidgetState(); } class _ExampleWidgetState extends State<ExampleWidget> { bool _loading = false; Future<void> fetchData() async { setState(() { _loading = true; }); // Simulate a network request await Future.delayed(Duration(seconds: 2)); // Use mounted to check if the widget is still active if (mounted) { setState(() { _loading = false; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("Mounted Example")), body: Center( child: ElevatedButton( onPressed: _loading ? null : fetchData, child: Text(_loading ? "Loading..." : "Fetch Data"), ), ), ); } } 何时使用 context.mounted在异步操作中处理BuildContext或将其传递给另一个函数时使用。 用于类mounted内的简单状态管理State。 与小部件树中可能不再存在的小部件交互时,这两者对于避免潜在错误都至关重要。
在 Flutter 中,
context.mounted
和mounted
用于在执行某些操作(尤其是异步操作)之前检查 Widget 是否仍是 Widget 树的一部分。但它们的访问方式有所不同。1.
context.mounted
context.mounted
是 的一个实例属性BuildContext
。BuildContext
仍然安装(即小部件树的一部分)。BuildContext
给另一个函数并想要验证小部件是否仍然处于活动状态时很有用。2.
mounted
State
。State
对象是否仍然处于活动状态以及其小部件是否仍在小部件树中。State
类中使用来检查执行操作是否可以安全。主要区别
context.mounted
与 绑定BuildContext
,可以在 的任何可用地方访问BuildContext
。mounted
特定于State
对象,并且只能在State
类内访问。示例
使用
context.mounted
使用
mounted
何时使用
context.mounted
在异步操作中处理BuildContext或将其传递给另一个函数时使用。mounted
内的简单状态管理State
。与小部件树中可能不再存在的小部件交互时,这两者对于避免潜在错误都至关重要。