Как получить данные от FutureProvider во флаттере - PullRequest
0 голосов
/ 11 июля 2019

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

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

class _ReceiptsRouteState extends State<ReceiptsRoute> {
  List<Receipt> receipts = [];

  @override
  Widget build(BuildContext context) {
    return FutureProvider(
      initialData: List(),
      builder: (_){
        return DBProvider().receipts().then((result) {
          receipts = result;
        });
      },
      child: Scaffold(
        appBar: AppBar(
          title: Text(AppLocalizations.of(context).history),
        ),
        body: Container(
          child: ListView.builder(
            itemBuilder: (context, position) {
              final item = receipts[position];
              return ListTile(
                title: Text(item.date),
              );
            },
          ),
        ),
      ),
    );
  }
}

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

1 Ответ

1 голос
/ 11 июля 2019

FutureProvider предоставляет результат Future, возвращенный builder его потомкам.

Как таковой, используя следующее FutureProvider:

FutureProvider<int>(
  initialData: 0,
  builder: (_) => Future.value(42),
  child: ...
)

текущее значение можно получить через:

Provider.of<int>(context)

или

Consumer<int>(
  builder: (context, value, __) {
    return Text(value.toString());
  }
);
...