如何解决我可以扩展State类并覆盖setState吗
我一直遇到未挂载小部件时(尤其是在获取数据后)调用setState
的问题。我的问题是:
我可以像这样扩展State
类并覆盖setState
abstract class MountedState<T extends StatefulWidget> extends State<T> {
@override
void setState(fn) {
if(mounted) super.setState(fn);
}
}
我做到了,而且奏效了。我只想知道这是否不理想,或者我不应该
Future<void> fetchSubjectsAndClasses() async {
try {
Response res = await TeachersAPI.classesAndSubjects();
classes = res.data;
setState(() {});
} catch (e) {
print(e);
}
}
这是导致问题的我的数据提取。它在initState
解决方法
这不是理想的。在处理与UI有关的异步函数时,应使用FutureBuilder
。它不是强制性的,但它处理了用Future
数据更新UI的更烦人的部分。
您应该在initState
中获得未来,并将其存储在小部件的State
中。然后将其传递到FutureBuilder
中的build
:
Future myFuture;
@override
void initState() {
super.initState();
myFuture = futureCall();
}
@override
Widget build() {
return FutureBuilder(
future: myFuture,builder: (BuildContext context,AsyncSnapshot snapshot) {
if (snapshot.hasData) {
//Show widget that has data
}
else if (snapshot.hasError) {
//Show widget that has error
}
else {
//Show widget while loading
}
}
);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。