ScrollController с блоком флаттера - PullRequest
0 голосов
/ 09 марта 2020

У меня есть этот класс:

class MyView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      title: Text("My Page"),
      body: BlocProvider<MyBloc>(
        builder: (context) => MyBloc()..add(OnOpen()),
        child: BlocBuilder<MyBloc, MyBlocState>(
          builder: (context, state) => _buildView(state, context)
        )
      )
      ...
    );
  }

  Widget _buildView(MyBlocState state, BuildContext context) {
    if (state is MainState) {
      ScrollController sc = ScrollController(
        initialScrollOffset: 0,
        keepScrollOffset: true
      );

      ListView lv = ListView.separated(
        controller: sc,
        scrollDirection: Axis.horizontal,
        ...
      );

      if (state.hasNewItem && sc.hasClients) {
        sc.animateTo(
          ...
        );
      }

      return lv;
    }

    return _loadingScreen();
  }
}

По сути, я хочу прокрутить список при добавлении нового элемента, однако, sc.hasClients всегда возвращает false , так как нет пока нет прикрепленных прокрутки

1 Ответ

0 голосов
/ 09 марта 2020

Хорошо, я только что использовал SchedulerBinding.instance.addPostFrameCallback, вот так:

if (state.hasNewItem) {
  SchedulerBinding.instance.addPostFrameCallback((_) {
    sc.animateTo(
      ...
    );
  });
}

Получено из ответа на github flutter blo c, здесь .

...