Как прочитать более 1 данных, используя общие настройки в Flutter - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь записывать и читать данные, используя общие настройки, но я не знал, как читать более одной информации. Маршрут такой: у меня 3 экрана (Вход, Главная и Профиль) экран) внутри экрана «Домой» и «Профиль» состоит из навигатора нижней вкладки ... поэтому после прохождения экрана входа в систему я хочу сохранить имя пользователя и идентификатор, чтобы передать его внутри экрана «Домой и профиль» ... пока что я сохранил имя пользователя и идентификатор внутри входа в систему Скрин, и я просто не понял, как читать их оба ... вот код

class _BottomTab extends State<BottomTab> {
  @override
  Widget build(BuildContext context) {
    return FutureProvider<String>(
      create: (context) async {
        final prefs = await SharedPreferences.getInstance();
        return prefs.getString("username");
      },

      child: ...,
      );
    }
  }
}

здесь при вызове имени пользователя, но я не знал, как позвонить id

Widget build() {
  final username = Provider.of<String>(context).toString();

  if (username == null) {
    return "Loading...";
  }
  return Text("Hi $username");
}

Я пытался создать новую функцию и определить эту функцию внутри initState () ... но проблема в том, что данные всегда перестраиваются всякий раз, когда я нажимаю bottomTab ... именно поэтому я не использовал этот метод (объявить функцию внутри initState)

1 Ответ

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

делай так

class _BottomTab extends State<BottomTab> {
  @override
  Widget build(BuildContext context) {
    return FutureProvider<String/* or 'Map' if you can*/>(
      create: (context) async {
        final prefs = await SharedPreferences.getInstance();
        final username = prefs.getString("username");
        final id = prefs.getId("id");
        final userMap = {"username":username, "id":id};
        // return userMap /* if return type is Map */
        return json.encode(userMap); /* if return type is String */
      },

      child: ...,
      );
    }
  }
}

теперь звони

Widget build() {
  final userInfo = Provider.of<String>(context).toString();
  final userMap = json.encode(userStr);
  final username = userMap["username"]; 
  if (username == null) {
    return "Loading...";
  }
  return Text("Hi $username");
}

!!! этот код не был проверен

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