Flutter 如何在具有共享首选项的Flatter应用程序中存储用户数据
我想将基本用户数据(姓名和电子邮件)存储在我的颤振应用程序中(使用共享首选项),并且我想使用这些数据来确定我应该显示启动屏幕还是主屏幕。我试图使用三元运算符查看共享首选项是否包含名称(如果是,则转到主屏幕,否则显示初始屏幕)。我正在分享我的主文件和我的表单代码,所以请帮助我做这件事,或者建议一些其他的方式,因为我对此非常陌生Flutter 如何在具有共享首选项的Flatter应用程序中存储用户数据,flutter,validation,Flutter,Validation,我想将基本用户数据(姓名和电子邮件)存储在我的颤振应用程序中(使用共享首选项),并且我想使用这些数据来确定我应该显示启动屏幕还是主屏幕。我试图使用三元运算符查看共享首选项是否包含名称(如果是,则转到主屏幕,否则显示初始屏幕)。我正在分享我的主文件和我的表单代码,所以请帮助我做这件事,或者建议一些其他的方式,因为我对此非常陌生 final val = _readName(); void main() { WidgetsFlutterBinding.ensureInitialized();
final val = _readName();
void main() {
WidgetsFlutterBinding.ensureInitialized();
_saveEmpty();
print(val);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'My Title',
theme: ThemeData(
textTheme: GoogleFonts.poppinsTextTheme(Theme.of(context).textTheme),
primaryColor: kPrimaryColor,
accentColor: kPrimaryColor,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: val != "a" ? HomeScreen() : SplashScreen(),
);
}
}
_readName() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final value = prefs.getString("myName");
print(value);
return value;
}
_saveEmpty() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("myName", "a");
}
表格:
我想使用共享首选项,因为数据库对我来说很复杂,所以请帮助我。谢谢我建议的实现方法是在显示启动屏幕时检查共享首选项状态,然后根据结果将用户导航到主屏幕或登录屏幕 下面是如何做到这一点
- 创建用于输入用户数据和主页的单独屏幕
- 在主应用程序中将下面的splashscreen类添加为home
- 当用户保存输入的数据时,将“是否登录”值保存为true
- 在显示启动屏幕时检查“是否已登录”值,并相应导航
溅屏 更新:
我使用的preferences常量类应该是这样的, 此值用作存储我们保存的首选项值的键
class Preferences {
Preferences._();
static const String is_logged_in = "isLoggedIn";
}
这回答了你的问题吗?你的方法出了什么问题?谢谢回复!在get bool中,您已经用大写字母P编写了首选项,但它对我不起作用。它显示了一个错误。是打字错误还是我应该在某处声明?不客气:),我已经更新了答案。Preferences类是我创建的一个类,用于存储SharedReferences的键值。如果您认为我的答案正确且有用,您是否可以接受我的答案为正确;)谢谢你的回复,我已将其标记为正确。非常感谢。
class SplashScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
@override
void initState() {
super.initState();
startTimer();
}
@override
Widget build(BuildContext context) {
return Material(
child: Center(child: AppIconWidget(image: Assets.appLogo)),
);
}
startTimer() {
var _duration = Duration(milliseconds: 2000);
return Timer(_duration, navigate);
}
navigate() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
if (preferences.getBool(Preferences.is_logged_in) ?? false) {
Navigator.of(context).pushNamed(Routes.home);
} else {
Navigator.of(context).pushNamed(Routes.login);
}
}
}
home: SplashScreen()
class Preferences {
Preferences._();
static const String is_logged_in = "isLoggedIn";
}