在您投反对票之前,请阅读完整的问题。
我收到此错误,我知道此错误的原因,原因是在选择登录屏幕后,从树中删除了userDetails Widget。问题是我如何将该小部件重新插入到Tree中。我已经尝试了StackOverflow和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()));
}
答案 0 :(得分:1)
我建议您使用一个临时选择器页面,这意味着您可以创建一个新页面,并且在该页面中您不必显示任何UI(只需黑屏)。
此操作将决定您要转到哪个页面,并且该页面始终是您的主屏幕,因此启动该页面时,它将检查电话号码是否为空,并且pushreplacement
登录屏幕,否则将转到其他页面。
也不必担心它会成为“黑屏”,因为这一切发生得太快(这取决于允许您确定起始屏幕的条件),并且可以直接将您带到想要的屏幕,具体取决于你有条件。