Как сохранить данные http-запроса в провайдере Flutter. Мне нужно использовать эти данные глобально в приложении - PullRequest
0 голосов
/ 12 июля 2020

Я не могу понять, как save данные http request преобразовать в Flutter Provider. Мне нужно использовать эти данные globally в приложении.

class Home extends StatefulWidget {
  static const routeName = 'home-page';

  @override
  _HomeState createState() => _HomeState();
}

const request = "https://api.exchangeratesapi.io/latest";
Future<Map> getData() async {
  http.Response response = await http.get(request);
  return await json.decode(response.body);
}

class _HomeState extends State<Home> {
  String dropdownValue = 'USD';

  @override
  Widget build(BuildContext context) {
    final currencyProvider = Provider.of<CurrencyProvider>(context);
    return FutureBuilder(
      future: getData(),
      builder: (context, snapshot) {
        switch (snapshot.connectionState) {
          case ConnectionState.none:
          case ConnectionState.waiting:
            return Scaffold(
              backgroundColor: Colors.blue,
            );
          default:
            if (snapshot.hasError) {
              return Center(
                  child: Text(
                "Error :(",
                style: TextStyle(color: Colors.amber, fontSize: 25.0),
                textAlign: TextAlign.center,
              ));
            } else {
              currencyProvider.loadData(snapshot);
              return Scaffold(
                  backgroundColor: Colors.blue,
                  body: Column(
                    children: <Widget>[
                      AppBarHome(),
                      ConvertFrom(),
                      ConvertTo(),
                      Spacer(),
                      CurrencyInput(),
                    ],
                  ),
              );
            }
        }
      },
    );
  }
}

Я получаю следующую ошибку: « setState () или markNeedsBuild (), вызванный во время сборки». I ' Вы уже пробовали WidgetsBinding.instance.addPostFrameCallback((_){});, и это тоже не сработало. Повторный вызов Future Builder тоже не помог.

PS: Я не против работать с необработанным снимком. Все, что мне действительно нужно, это сообщение об ошибке на go.

...