I have successfully saved SharedPreferences in my app but now i am trying to display the data in a Text Widget. This is my code
//profile details
late String name;
late SharedPreferences profileData;
@override
void initState() {
// TODO: implement initState
super.initState();
initial();
}
void initial() async {
profileData = await SharedPreferences.getInstance();
setState(() {
name = profileData.getString('name')!;
});
}
Then in my text widget i have done this
Text('$name',
style: TextStyle(
color:Colors.black,
fontSize: 20.0,
fontWeight: FontWeight.bold,
)),
And i am getting this error
LateInitializationError: Field 'name' has not been initialized.
what have i done wrong and how can i fix it
CodePudding user response:
I suspect here the problem is the initial build (the text value is a required parameter for a text field, which cannot be null). Try something like this:
Text(name ?? '',
style: TextStyle(
color:Colors.black,
fontSize: 20.0,
fontWeight: FontWeight.bold,
)),
CodePudding user response:
This is because setState() is only triggered after the build is completed, meaning that the Text widget gets built with an uninitialised name. For this purpose it would be best if you instead did either
Option A:
var name = '';
late SharedPreferences profileData;
Option B:
String? name;
late SharedPreferences profileData;
@override
void initState() {
// TODO: implement initState
super.initState();
initial();
}
void initial() async {
profileData = await SharedPreferences.getInstance();
setState(() {
name = profileData.getString('name')!;
});
}
with
Text(name ?? '',
style: TextStyle(
color:Colors.black,
fontSize: 20.0,
fontWeight: FontWeight.bold,
)),
