查找停用的小部件的祖先是不安全的。此时小部件的元素树的状态不再稳定。在颤动中
Looking up a deactivated widget's ancestor is unsafe. At this point the state of the widget's element tree is no longer stable. In flutter
在投反对票之前,请阅读完整问题。
I am getting this error I know the reason behind this error, the reason is userDetails Widget is removed from the tree when the login screen is selected.问题是我如何将该小部件重新插入到树中。我已经尝试了 Whosebug 和 GitHub 上可用的所有解决方案,但没有一个解决方案适合我。我尝试在脚手架中使用 new 关键字和全局键。
Main.dart
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
var userPhoneNumber = prefs.getString('phoneNumber');
var userAlternateNumber = prefs.getString('AlternateNumber');
print(userPhoneNumber);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
runApp(
MaterialApp(
theme: ThemeData(
textSelectionHandleColor: kOrangeColor, cursorColor: kOrangeColor),
home: userPhoneNumber == null
? new LoginScreen()
: (userAlternateNumber == null
? new UserDetails()
: new HomeScreen()),
),
);
});
}
函数在LoginScreen.dart
void pushToUserDetailsScreen(BuildContext context) async {
Navigator.push(
context, MaterialPageRoute(builder: (context) => new UserDetails()));
}
我建议你使用一个临时的选择器页面,也就是说你可以创建一个新的页面,并且在这个页面中你不必显示任何UI(只是黑屏)。
它会做的是它会决定你想去哪个页面,这个页面将永远是你的主屏幕,所以当它启动时它会检查 phone 数字是否为空并且会 pushreplacement
登录屏幕,否则会转到其他页面。
也不要担心它是 "Black Screen" 因为这一切发生得太快了(这取决于允许您决定开始屏幕的条件)并且它会直接将您带到您想要的屏幕看你有什么条件。
在投反对票之前,请阅读完整问题。
I am getting this error I know the reason behind this error, the reason is userDetails Widget is removed from the tree when the login screen is selected.问题是我如何将该小部件重新插入到树中。我已经尝试了 Whosebug 和 GitHub 上可用的所有解决方案,但没有一个解决方案适合我。我尝试在脚手架中使用 new 关键字和全局键。
Main.dart
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
var userPhoneNumber = prefs.getString('phoneNumber');
var userAlternateNumber = prefs.getString('AlternateNumber');
print(userPhoneNumber);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
runApp(
MaterialApp(
theme: ThemeData(
textSelectionHandleColor: kOrangeColor, cursorColor: kOrangeColor),
home: userPhoneNumber == null
? new LoginScreen()
: (userAlternateNumber == null
? new UserDetails()
: new HomeScreen()),
),
);
});
}
函数在LoginScreen.dart
void pushToUserDetailsScreen(BuildContext context) async {
Navigator.push(
context, MaterialPageRoute(builder: (context) => new UserDetails()));
}
我建议你使用一个临时的选择器页面,也就是说你可以创建一个新的页面,并且在这个页面中你不必显示任何UI(只是黑屏)。
它会做的是它会决定你想去哪个页面,这个页面将永远是你的主屏幕,所以当它启动时它会检查 phone 数字是否为空并且会 pushreplacement
登录屏幕,否则会转到其他页面。
也不要担心它是 "Black Screen" 因为这一切发生得太快了(这取决于允许您决定开始屏幕的条件)并且它会直接将您带到您想要的屏幕看你有什么条件。