【问题标题】:flutter can not use reordableListView in a screen that contain two listview颤振不能在包含两个列表视图的屏幕中使用 reordableListView
【发布时间】:2020-05-14 09:17:11
【问题描述】:

这是我的代码,我有一行包含两个堆栈,每个堆栈都有一个列表视图,左侧小部件有一个堆栈,其中包含一个 reordablelistView,但是当拖动其中的一个元素时会出现此错误

Scaffold(
    body: Container(
      width: width,
      child: Row(
        children: <Widget>[
          RightWidget(),// a listview
          Container(
            width: 1.5,
            color: Colors.grey,
          ),
          LeftWidget()
        ],
      ),
    ),)

我的 reordablelistview 是

class _RightWidgetState extends State<RightWidget> {
@override
Widget build(BuildContext context) {
print('right widget called');
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
return Stack(
  children: <Widget>[


    Container(
      color: Color(0xFF1B1D22),
      width: (1 / 4) * width + 10,
      child://new reordable list added



       ReorderableListView(

                  children:
                List.generate(Provider.of<ClassroomBlac>(context).classes[Provider.of<ClassroomBlac>                      (context).numberclass].moves.length, (index) {
                  return _itemBuilder(context,index);
                }), onReorder: (int oldIndex, int newIndex) {

                Provider.of<ClassroomBlac>(context).changeMoveIndex(newIndex, oldIndex);

                })

我得到了这个错误

I/flutter (25693): Another exception was thrown: A RenderFlex overflowed by 2.0 pixels on the bottom.
I/flutter (25693): Another exception was thrown: A RenderFlex overflowed by 2.0 pixels on the bottom.
I/flutter (25693): Another exception was thrown: A RenderFlex overflowed by 11 pixels on the right.
I/flutter (25693): Another exception was thrown: ScrollController attached to multiple scroll views.

我在列表中使用它的小部件是

Widget _itemBuilder(BuildContext context, int count) {
 print('video thumbnail build in listview');
 return GestureDetector(
  key: UniqueKey(),//new
   onTap: () {
    // Provider.of<ClassroomBlac>(context).setOptionView(context);//set options for view
    //ToDo:if name dont update must refresh moves of class lenght
    Provider.of<ClassroomBlac>(context,listen: false).setMoveIndex(count);
    Provider.of<CheckOneRunVideo>(context,listen: false).setIndex(count);

    if (Provider.of<ButtonAddStateBloc>(context).editingState)
      Provider.of<ClassroomBlac>(context)
          .classes[Provider.of<ClassroomBlac>(context).numberclass]
          .moves[count]
          .isselectedfor =
      !Provider.of<ClassroomBlac>(context)
          .classes[Provider.of<ClassroomBlac>(context).numberclass]
          .moves[count]
          .isselectedfor;
  },
  child: Container(
    margin: EdgeInsets.only(bottom: 8),
    child: VideoThumbnailItem(count),
  ));
 }

如果我使用 contoroller,请帮助我,如果是的话,如果我正确生成列表项如何? 哪里不对?

当我评论包含列表视图的 leftWidget() 时,我的代码可以正常工作

【问题讨论】:

    标签: listview flutter dart


    【解决方案1】:

    不确定当您遇到此问题时是否存在,但 ReorderableListView 现在有一个 scrollController 属性。

    所以像这样声明你的滚动控制器:

    final ScrollController reorderScrollController = ScrollController();
    

    然后将唯一的滚动控制器分配给您的 ReorderableListView:

    ReorderableListView(
       scrollController: reorderScrollController,
       ...
    )
    

    【讨论】:

      【解决方案2】:

      此类问题的常见解决方法是将控制器分配给您的Scrollable。 不幸的是,ReorderableListView 没有为此提供公共属性。

      我知道的最佳解决方案是将您的ReorderableListView(仅此)包装在PrimaryScrollController 中,并给它一个ScrollController。它之所以有效是因为ReorderableListView 将其contextPrimaryScrollController 分配给其私有_scrollController

      return PrimaryScrollController(
        controller: myScrollController,
        child: ReorderableListView(...),
      );
      

      另一个不太优雅的选择是重写 ReorderableListView 小部件并在构造函数中公开 scrollController 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-20
        • 2021-12-03
        • 2020-06-19
        • 2021-07-12
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        相关资源
        最近更新 更多