颤振显示登录或主屏幕基于偏好数据



我知道这个问题已经被很多人问过了,但是我试着在代码上工作却没有成功。我使用共享偏好来存储我的电子邮件,一旦用户登录,一旦注销,电子邮件应该被删除。这工作得很好。当应用程序开始时,它应该从电话使用共享的偏好和阅读电子邮件如果电子邮件存在,用户登录,应该导航回家()如果电子邮件不存在其他屏幕,用户没有登录,所以应该导航屏幕登录()。下面是我的代码,当我启动应用程序时,它总是显示Home()屏幕,即使用户注销。有人能告诉我我哪里做错了吗。提前谢谢。

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Future<String> getSharedPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String _email = prefs.getString('email') ?? '';
return _email;
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'chat app',
home: FutureBuilder<String>(
future: getSharedPrefs(),
builder: (
BuildContext context,
AsyncSnapshot<String> snapshot,
) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return const Text('Error');
} else if (snapshot.hasData) {
return Home();
} else {
return Login();
}
} else {
return Text('State: ${snapshot.connectionState}');
}
},
),
);
}
}

快照。hasData将始终为true,因为您在getSharedPrefs中返回空字符串。

您应该将其修改为snapshot.hasData && snapshot.data.isNotEmpty以使其像您期望的那样工作。

相关内容

  • 没有找到相关文章

最新更新