Флаттер: заполните текстовое поле строкой общих настроек - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь заполнить текстовое поле строкой, хранящейся в общих настройках, но я не понимаю, как это сделать.

Случай: 1 - я вхожу в систему на первом экране. 2 - имя пользователя сохраняется в общих настройках. 3 - Затем второй экран вызывается текстовыми полями. 4 - Поле имени пользователя должно быть заполнено сохраненным пользователем.

Вот как я сохраняю имя пользователя на первом экране:

 final prefs = await SharedPreferences.getInstance();
                      final key = 'user';
                      final value = loggedUser;
                      prefs.setString(key, value);
                      print('saved $value');

А вот функция, которую я использую на втором экране, чтобы получить имя пользователя:

 static _read() async {
    final prefs = await SharedPreferences.getInstance();
    final key = 'user';
    final value = prefs.getString(key);
    print('saved $value');
    String usu = value;
  }

Я могу загрузить имя пользователя на втором экране, но я не могу поместить его в текстовое поле, как я могу это сделать?

У меня есть попробовал небольшую модификацию функции (ниже) и они передали функцию текстовому контроллеру, но это не сработало, я думаю, это не правильный путь.

  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
  }

контроллер:

final _pecasController = TextEditingController(text: _read());

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

У вас это работает?

class TheState расширяет State {

TextEditingController _pecasController = TextEditingController();

@override
void initState() async{
  _pecasController.text = await _read();
}
0 голосов
/ 09 апреля 2020

Я наконец сделал это.

Спасибо за ребят, которые прокомментировали здесь и помогли мне, это не сработало, поэтому я сделал поиск и наконец сумел заставить его работать.

Вот коды

Функция:

 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;

  }

Initstate:

  @override
  void initState() {
    super.initState();
    _read();

    WidgetsBinding.instance.addPostFrameCallback((_) async {
      _usuarioController.text = await _read();
    });

Я не знаю, является ли это лучшим способом сделать это, но это сработало, и это все, что мне нужно на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...