簡體   English   中英

Flutter:使用共享首選項的字符串填充文本字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM