So i try to save user data after login to app But, after i kill the app the data didn't persist and showing null in the app
I called save data function after fetching and i don't know how or where to read the data
code to save data
class UserPreference {
Future<bool> saveUserData(UserModel user) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString('email', user.email);
prefs.setString('first_name', user.first_name!);
prefs.setString('last_name', user.last_name!);
prefs.setString('profile_picture', user.profile_picture!);
return true;
}
Future<UserModel> getUser() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
String email = prefs.getString('email') ?? "[email protected]";
String first_name = prefs.getString('first_name') ?? "user";
String last_name = prefs.getString('last_name') ?? "default";
String profile_picture = prefs.getString('profile_picture') ?? "";
String token = prefs.getString('token') ?? "";
return UserModel(
email: email,
first_name: first_name,
last_name: last_name,
profile_picture: profile_picture,
token: token,
);
}
}
call the save data function after fetching API
if (response.statusCode == 200) {
var data = jsonDecode(response.body)['data'];
UserModel user = UserModel.fromJson(data['user']['user_customer_detail']);
user.token = 'Bearer ' + data['access_token'];
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('token', user.token!);
UserPreference().saveUserData(user);
return user;
code to read data in main.dart
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Future<UserModel>? persistData;
@override
void initState() {
persistData = UserPreference().getUser();
super.initState();
}
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => AuthProvider(),
),
],
child: MaterialApp(
title: 'Tailorine',
routes: {
'/main': (context) => MainScreen(),
'/intro': (context) => IntroScreen(),
'/sign-in': (context) => SignInPage(),
'/sign-up': (context) => SignUpPage(),
},
home: FutureBuilder(
future: loadData(),
builder: (c, s) {
switch (s.connectionState) {
case ConnectionState.none:
return Scaffold(
body: Center(
child: Image.asset('assets/illustration/no_connection.png'),
),
);
case ConnectionState.waiting:
return Scaffold(
body: Center(
child: CircularProgressIndicator(
color: primaryColor,
),
),
);
default:
if (s.hasError) {
return Center(
child: Text(s.error.toString()),
);
} else if (s.hasData) {
return SplashScreen();
} else {
return MainScreen();
}
}
},
),
),
);
}
}
this code still showing null after i call data in my screen does anyone know how to fix? i use provider for state management