Как убрать лишний интервал внизу ReorderableListView - флаттер? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь создать ReorderableListView во флаттере с динамическими данными. Дополнительный интервал идет внизу списка. Любая помощь будет оценена.

class _MyHomePageState extends State {

  List<String> _listData = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"];


  @override
  Widget build(BuildContext context) {

    return Scaffold(
      key: _scaffoldKey,
      backgroundColor: Colors.lightGreen,
      appBar: AppBar(
        title: Text("Listview Drag and Drop"),
        backgroundColor: Colors.deepOrange,
      ),
      body: Center(

        child: ReorderableListView(
          header:
          Container(
             margin: EdgeInsets.only(top: 10),
            decoration: BoxDecoration(
                color: Colors.deepPurple,
                border: Border.all(color: Colors.white,width: 2),
                borderRadius: BorderRadius.all(Radius.circular(4))
            ),

            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text("ReorderableListView",textAlign: TextAlign.start,
                style: TextStyle(color: Colors.white,fontSize: 18),),
            ),
          ),
            children: [
              for(final item in _listData) getChildItems(item,context)
            ],
            onReorder: (oldIndex,newIndex){

                _updateMyItems(oldIndex,newIndex);


            }
        ),
      ),
    );
  }

  getChildItems(_item,_context) {
    return Padding(
      key: ValueKey(_item),

      padding: const EdgeInsets.all(8.0),
      child: InkWell(
        onTap: (){},
        child: Container(
          width: double.infinity,
          decoration: BoxDecoration(
            color: Colors.white,
            border: Border.all(color: Colors.white,width: 2),
            borderRadius: BorderRadius.all(Radius.circular(4))
          ),

          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Text(_item+" Items",textAlign: TextAlign.start,
            style: TextStyle(color: Colors.black54,fontSize: 18),),
          ),
        ),
      ),
    );
   }

  _updateMyItems(int old,int newIndex)
  {
    setState(() {

      if(newIndex>old)
        {
          newIndex-=1;
        }
        var item=_listData.removeAt(old);
      _listData.insert(newIndex, item);


    });

  }
}

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Полагаю, вы можете использовать MediaQuery.removePadding:

MediaQuery.removePadding(
            context: context,
            removeBottom: true,
            child: Text("Your child here")
           )

, что позволяет вам удалить отступы по умолчанию, применяемые в некоторых случаях

0 голосов
/ 11 ноября 2019

Дополнительное пространство 100px добавлено намеренно, чтобы позволить элементу списка быть добавленным в это пространство при перетаскивании.

Вы можете увидеть источник Здесь, на github

static const double _defaultDropAreaExtent = 100.0;

Единственным решением является использование любых других пользовательских библиотек и плагинов ReorderListView. Или Вы можете скопировать этот файл (льготы с открытым исходным кодом) и внести изменения в соответствии с вашими требованиями.

Например, вы можете изменить то же значение, чтобы убрать лишний интервал, но это заставит пользователя ждатьанимированный предмет, чтобы завершить анимацию и переупорядочение, и тогда он / она сможет уронить этот предмет в это место (в конце).

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