[英]Flutter: fill a textfield with a string on shared preferences
我試圖用存儲在共享首選項中的字符串填充文本字段,但我不知道該怎么做。
案例是:
1 - 我在第一個屏幕上登錄。
2 - 用戶名保存在共享首選項中。
3 - 然后調用帶有一些文本字段的第二個屏幕。
4 - 用戶名字段應填寫保存的用戶。
這是我在第一個屏幕上存儲用戶名的方式:
final prefs = await SharedPreferences.getInstance();
final key = 'user';
final value = loggedUser;
prefs.setString(key, value);
print('saved $value');
這是我在第二個屏幕上用來檢索用戶名的 function:
static _read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'user';
final value = prefs.getString(key);
print('saved $value');
String usu = value;
}
我可以在第二個屏幕上加載用戶名,但我不能將其放在文本字段中,我該怎么做?
我已經嘗試對 function(下方)進行一些修改,並且他們在文本 controller 上傳遞了 function 但沒有用,我想這不是正確的方法。
static _read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'usuario';
final value = prefs.getString(key);
print('saved $value');
String usu = value;
return usu; //the modification
}
controller:
final _pecasController = TextEditingController(text: _read());
這對你有用嗎?
class TheState extends State<TheWidget> {
TextEditingController _pecasController = TextEditingController();
@override
void initState() async {
_pecasController.text = await _read();
}
我終於做到了。
感謝那些在這里發表評論並幫助我的人,它沒有用,所以我進行了搜索,最終設法讓它工作。
這是代碼
function:
static _read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'usuario';
final value = prefs.getString(key);
print('saved tester $value');
String usu = value;
return usu;
}
初始化狀態:
@override
void initState() {
super.initState();
_read();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_usuarioController.text = await _read();
});
我不知道這是否是最好的方法,但它有效,這就是我現在所需要的。
因為我在同一條船上,即使這個答案很老,我也覺得我想給出一個答案。 我會在評論中發布這個,但我無法在 atm 這樣做。
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _read();
});
}
初始代碼可以更小,不需要在WidgetsBinding之前加載_read()。 它所做的只是調用它兩次。為了便於閱讀,我還建議縮短 _read() 調用,並使其成為正常的 Future,這樣你就可以確定返回類型是 String。 還私有化了價值觀。
Future<void> _read() async {
final _prefs = await SharedPreferences.getInstance();
final _value = _prefs.getString('usuario');
print('saved tester $_value');
setState(() {
_usuarioController.text = value;
});
}
我知道以前的答案是正確的並且有效,但這更好。
使用 setState() 方法並使用更新的字符串更新文本字段的 textController。
final TextEditingController _mobile = TextEditingController(text: '');
String mobileString = '1238892922';
setState((){
_mobile.text = mobileString;
}
)
文本字段文本將是這個 1238892922
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.