![](/img/trans.png)
[英]flutter error: This widget has been unmounted, so the State no longer has a context (and should be considered defunct)
[英]Flutter : This widget has been unmounted, so the State no longer has a context (and should be considered defunct) Error when using streambuilder
class _MyAppState extends State<MyApp> {
bool isFirstTime = true;
bool? isRegistered;
checkIfRegisteredOrNot() async {
print("Checking if registered");
if (isFirstTime && mounted) {
print("Insided mounted");
final id = FirebaseAuth.instance.currentUser!.uid;
DocumentSnapshot ds =
await FirebaseFirestore.instance.collection("users").doc(id).get();
setState(() {
print("Setting state");
isRegistered = ds.exists;
isFirstTime = false;
print("isRegistered: $isRegistered");
print("isFirstTime: $isFirstTime");
});
}
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SehatMand',
theme: ThemeData(
scaffoldBackgroundColor: Color(0xFF222831),
inputDecorationTheme: InputDecorationTheme(
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(2),
borderSide: BorderSide(color: Colors.deepPurpleAccent)),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(2),
borderSide: BorderSide(color: Colors.deepPurpleAccent, width: 5),
),
),
colorScheme: ColorScheme.dark().copyWith(
secondary: Colors.deepPurpleAccent,
)),
home: StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasData) {
print("Has data");
checkIfRegisteredOrNot();
if (isRegistered != null) {
return isRegistered! ? const TestScreen() : const FormScreen();
} else {
print("isRegistered is null");
return const Scaffold(
body: Center(child: CircularProgressIndicator()));
}
} else {
print('LoginScreen');
return const LoginScreen();
}
},
),
routes: {
MainScreen.routeName: (context) => MainScreen(),
FormScreen.routeName: (context) => const FormScreen(),
},
);
}
}
我收到的错误说明
========调度程序库捕获异常===================================== ================ 在调度程序回调期间抛出以下断言:此小部件已卸载,因此 State 不再具有上下文(应被视为已失效)。
**> 考虑在“处置”或使用
"mounted" getter 以确定 State 是否仍处于活动状态。 当抛出异常时,这是堆栈:#0 State.context。 (包:flutter/src/widgets/framework.dart:942:9)#1 State.context(包:flutter/src/widgets/framework.dart:948:6)#2_TransformerPageViewState._onGetSize(包:another_view/transformer_page /another_transformer_page_view.dart:450:24) #3 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15) #4 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.82964024 :9) #5 SchedulerBinding.scheduleWarmUpFrame。 (包:flutter/src/scheduler/binding.dart:862:7)(从 class _RawReceivePortImpl、class _Timer、dart:async 和 dart:async 中删除了 11 帧)==**patch8:29646 ================================================ =========================================
在调用 setstate 之前做一个 if(mounted) 检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.