Introducing a powerful custom widget that crafts draggable Boards reminiscent of Trello or Jira interfaces. This versatile kanban-style view empowers users to effortlessly reorder and manage items via intuitive drag-and-drop functionality. Create, rearrange, and customize columns, offering a dynamic and flexible dashboard experience within your app.
https://pub.dev/packages/boardview
Just add flutter_boardview
to the pubspec.yaml
file.
To get started you can look inside the /example
folder. This package is divided into three core parts.
In example, we use https://pub.dev/packages/infinite_scroll_pagination
for infinite scrolling list
The BoardView class takes in a List of BoardLists. It can also take in a BoardViewController which is can be used to animate to positions in the BoardView
BoardViewController boardViewController = BoardViewController();
List<BoardList> _lists = List<BoardList>();
BoardView(
lists: _lists,
boardViewController: boardViewController,
);
The BoardList has several callback methods for when it is being dragged. The header item is a Row and expects a List as its object. The header item on long press will begin the drag process for the BoardList.
BoardList(
onStartDragList: (int? listIndex) {
},
onTapList: (int? listIndex) async {
},
onDropList: (int? listIndex, int? oldListIndex) {
},
headerBackgroundColor: Color.fromARGB(255, 235, 236, 240),
backgroundColor: Color.fromARGB(255, 235, 236, 240),
header: [
Expanded(
child: Padding(
padding: EdgeInsets.all(5),
child: Text(
"List Item",
style: TextStyle(fontSize: 20),
))),
],
items: items,
);
The BoardItem view has several callback methods that get called when dragging. A long press on the item field widget will begin the drag process.
BoardItem(
onStartDragItem: (int? listIndex, int? itemIndex, BoardItemState state) {
},
onDropItem: (int? listIndex, int? itemIndex, int oldListIndex,
int oldItemIndex, BoardItemState state) {
},
onTapItem: (int? listIndex, int? itemIndex, BoardItemState state) async {
},
item: Card(
child: Padding(
padding: const EdgeInsets.all(8),
child: Text("Board Item"),
),
)
);