【问题标题】:ScrollController with flutter bloc带有颤振块的滚动控制器
【发布时间】:2020-03-09 03:00:45
【问题描述】:

我有这门课:

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,因为还没有附加的滚动视图。

有一种方法可以不使用延迟(使用延迟听起来很骇人听闻)?

【问题讨论】:

  • 那段代码还能用吗?您使用 BlocBuilder 的上下文与使用 BlocProvider 的上下文相同

标签: flutter dart flutter-bloc


【解决方案1】:

好的,我刚刚用SchedulerBinding.instance.addPostFrameCallback,像这样:

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

这是从 Flutter bloc 的 github 上的回复中得到的,here

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2020-11-16
    • 2021-11-29
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多