Flutter 使用小部件的SharedReferences获取存储的值的正确方法是什么?
使用小部件的SharedReferences获取存储的值的正确方法是什么 佩加 错误 我猜是因为小部件在调用SharedReference之前先调用了它?正确的写作方法是什么 示例共享首选项Flutter 使用小部件的SharedReferences获取存储的值的正确方法是什么?,flutter,dart,widget,sharedpreferences,Flutter,Dart,Widget,Sharedpreferences,使用小部件的SharedReferences获取存储的值的正确方法是什么 佩加 错误 我猜是因为小部件在调用SharedReference之前先调用了它?正确的写作方法是什么 示例共享首选项 您的问题是简单的SharedReferences需要一些时间来获取保存在其中的值,当它获取值时,构建函数已经被调用,因此它给您一个非空字符串,必须提供给文本小部件。这是一个错误 解决方案: 因此,请尝试初始化您的Srting名称= 或检查 Text( name!=null? name:'', sty
您的问题是简单的SharedReferences需要一些时间来获取保存在其中的值,当它获取值时,构建函数已经被调用,因此它给您一个非空字符串,必须提供给文本小部件。这是一个错误 解决方案: 因此,请尝试初始化您的Srting名称= 或检查
Text(
name!=null? name:'',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
每当sharepref准备好使用字符串时,尝试调用setState
sharepref .then((onValue) {
setState(() {
mUserInfo = onValue;
});
}
加载SharedPreferences需要一些时间,因此请使用FutureBuilder:
是的,小部件是在name属性出现之前构建的。当SharedReferences数据到达时,使用FutureBuilder或调用setState以使用非空名称属性重建小部件。我应该将setState放在哪里?getUser是调用SharedReferences的函数?
class SampleSharedPreferences {
static const NAME = "user_name";
void store(ABC abc) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(NAME, name);
}
Future<ABC> getUser() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
ABC abc = new ABC();
abc.name = prefs.getString(USER_NAME);
return abc;
}
}
Text(
name!=null? name:'',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
sharepref .then((onValue) {
setState(() {
mUserInfo = onValue;
});
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
child: FutureBuilder(
future: getUser, // a previously-obtained Future<String> or null
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.done:
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
return Text(
snapshot.data,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
);
}
return null; // unreachable
},
),
padding: const EdgeInsets.only(top: 14.0, left: 14.0),
),
],
),
),
);
}