Как использовать обнаружение изменений в элементах массива с помощью провайдера? - PullRequest
0 голосов
/ 26 января 2020

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

У меня есть экран, который содержит горизонтальный ListView, где каждый элемент представляет месяц и занимает весь экран. Каждый предмет - это другой список итенов. В основном это список расходов за каждый месяц. Я контролирую состояние с помощью провайдера, и у меня возникают проблемы с обнаружением изменений за месяц. Например, я нахожусь в январе, но я добавил расходы в феврале, поэтому февральский элемент должен обнаружить изменение и переписать. Я не смог сделать это до сих пор. Вот скриншоты приложения:

enter image description here

enter image description here

У меня есть провайдер, который имеет массив "периодов". И «Период» - это класс, представляющий месяц и содержащий массив расходов.

Я предполагаю, что я не организую свои данные сразу, я был бы признателен, если бы кто-то мог указать мне на правильное направление.

РЕДАКТИРОВАТЬ:

Итак, я посмотрел это видео здесь: https://www.youtube.com/watch?v=d_m5csmrf7I, и это помогло мне хотя бы немного о том, как обнаружить изменения во вложенных провайдеры. Я в основном сделал это:

Widget build(BuildContext context) {
    ...
  final size = MediaQuery.of(context).size;
  final financeiro = Provider.of<Financeiro>(context);
    return ImprovedListView.builder(
      controller: _listController,
      scrollDirection: Axis.horizontal,
      itemCount: financeiro.periodos.length,
      itemSize: size.width,
      physics: const NeverScrollableScrollPhysics(),
      initialScrollOffset: financeiro.indexMesAtual * size.width,
      itemBuilder: (ctx, index) {
        final periodo = financeiro.periodos[index]; //get a piece of the list and pass to another change notifier provider
        return ChangeNotifierProvider<Periodo>.value(
          value: periodo,
          child: PeriodoFinanceiro(
            key: ValueKey('${periodo.ano}${periodo.mes}'),
            index: index,
            scrollTo: scrollTo,
            carregarDadosIniciais: carregarDadosIniciais,
            excluirLancamento: excluirLancamento,
          ),
        );
      };
}

Теперь мне просто нужно выяснить, как лучше контролировать scrolloffset из списка при его повторном рендеринге.

Спасибо

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