Как читать и использовать общие значения предпочтений в initstate()? Я могу читать и использовать значения в других виджетах, но не в своем API, который я вызываю в состоянии инициализации

Я создаю список предприятий через RestAPI в initstate. Мне нужно использовать значение sharedpreference в качестве одного из его параметров, но когда я пытаюсь загрузить данные, значение sharepreference имеет нулевое начальное значение, но это значение можно легко использовать в других виджетах.

Проблема в том, как прочитать значение sharepreference и использовать одновременно в initstate.?

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

**@override
  void initState() {
    super.initState();
    loadData();
    getBizList();
  }
  getBizList() async {
    await api
        .bizListAPI(widget.subCatid, savedCityID, supSubFinal, areaFinal)
        .then((response) {
      setState(() {
        bizListOBJ = response;
      });
    });
  }
loadData() async {
    SharedPreferences savedPref = await SharedPreferences.getInstance();
    setState(() {
      savedCity = (savedPref.getString('savedCity') ?? "Mumbai");
      savedCityID = (savedPref.getString('savedCityID') ?? "1");
    });
  }**

в приведенном выше коде я могу получить или прочитать данные и показать название города из sharedpreference (savedCity), который находится на панели приложений, но я хочу использовать данные savecityID для передачи в мой API в initstate.

Я также пытался использовать следующий плагин

[https://medium.com/@greg.perry/a-flutter-class-for-app-preferences-a256166ecc63.][1]

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

"_prefsInstance != null,
        "Maybe call Prefs.getKeysF() instead. SharedPreferences not ready yet!");"

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

 [1]: https://medium.com/@greg.perry/a-flutter-class-for-app-preferences-a256166ecc63

извините за любое нубское объяснение или вопрос. На самом деле это мой первый вопрос в стеке, и я новичок в флаттере.

1
0
1 761
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно использовать состояние установки внутри состояния инициализации, потому что

    loadData();
    getBizList();

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

Попробуй это

 @override
  void initState() {
    // TODO: implement initState
    super.initState();
    setState(() {
      loadData();
      getBizList();
    });
  }

Извините, это не то, как вы это делаете.

CopsOnRoad 08.04.2019 16:43

setstate обязателен, но здесь он мне не помог.

NilxSingh 13.04.2019 06:46
Ответ принят как подходящий

Вы можете попробовать это?

void initState() {
  super.initState();
  loadData().then((_) {
    getBizList();
  });
}

Я попробовал это, и это сработало ... спасибо, но есть другое решение, которое я нашел более удобным, поместив все мои API и в асинхронную функцию, а затем заставив мои API ждать ответа, наконец, поместив функцию в initstate ( ),

NilxSingh 13.04.2019 06:45

Другие вопросы по теме