diff --git a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart
index 11f4cf6910..faf3490b70 100644
--- a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart
+++ b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart
@@ -22,7 +22,7 @@ part 'board_bloc.freezed.dart';
class BoardBloc extends Bloc {
final BoardDataController _gridDataController;
- late final AFBoardDataController boardController;
+ late final AppFlowyBoardDataController boardController;
final MoveRowFFIService _rowService;
LinkedHashMap groupControllers = LinkedHashMap();
@@ -34,8 +34,8 @@ class BoardBloc extends Bloc {
: _rowService = MoveRowFFIService(gridId: view.id),
_gridDataController = BoardDataController(view: view),
super(BoardState.initial(view.id)) {
- boardController = AFBoardDataController(
- onMoveColumn: (
+ boardController = AppFlowyBoardDataController(
+ onMoveGroup: (
fromColumnId,
fromIndex,
toColumnId,
@@ -43,7 +43,7 @@ class BoardBloc extends Bloc {
) {
_moveGroup(fromColumnId, toColumnId);
},
- onMoveColumnItem: (
+ onMoveGroupItem: (
columnId,
fromIndex,
toIndex,
@@ -52,15 +52,15 @@ class BoardBloc extends Bloc {
final toRow = groupControllers[columnId]?.rowAtIndex(toIndex);
_moveRow(fromRow, columnId, toRow);
},
- onMoveColumnItemToColumn: (
- fromColumnId,
+ onMoveGroupItemToGroup: (
+ fromGroupId,
fromIndex,
- toColumnId,
+ toGroupId,
toIndex,
) {
- final fromRow = groupControllers[fromColumnId]?.rowAtIndex(fromIndex);
- final toRow = groupControllers[toColumnId]?.rowAtIndex(toIndex);
- _moveRow(fromRow, toColumnId, toRow);
+ final fromRow = groupControllers[fromGroupId]?.rowAtIndex(fromIndex);
+ final toRow = groupControllers[toGroupId]?.rowAtIndex(toIndex);
+ _moveRow(fromRow, toGroupId, toRow);
},
);
@@ -165,10 +165,10 @@ class BoardBloc extends Bloc {
boardController.clear();
//
- List columns = groups
+ List columns = groups
.where((group) => fieldController.getField(group.fieldId) != null)
.map((group) {
- return AFBoardColumnData(
+ return AppFlowyBoardGroupData(
id: group.groupId,
name: group.desc,
items: _buildRows(group),
@@ -178,7 +178,7 @@ class BoardBloc extends Bloc {
),
);
}).toList();
- boardController.addColumns(columns);
+ boardController.addGroups(columns);
for (final group in groups) {
final delegate = GroupControllerDelegateImpl(
@@ -227,8 +227,8 @@ class BoardBloc extends Bloc {
if (isClosed) return;
for (final group in updatedGroups) {
final columnController =
- boardController.getColumnController(group.groupId);
- columnController?.updateColumnName(group.desc);
+ boardController.getGroupController(group.groupId);
+ columnController?.updateGroupName(group.desc);
}
},
onError: (err) {
@@ -243,13 +243,13 @@ class BoardBloc extends Bloc {
);
}
- List _buildRows(GroupPB group) {
+ List _buildRows(GroupPB group) {
final items = group.rows.map((row) {
final fieldContext = fieldController.getField(group.fieldId);
return BoardColumnItem(row: row, fieldContext: fieldContext!);
}).toList();
- return [...items];
+ return [...items];
}
Future _loadGrid(Emitter emit) async {
@@ -335,7 +335,7 @@ class GridFieldEquatable extends Equatable {
UnmodifiableListView get value => UnmodifiableListView(_fields);
}
-class BoardColumnItem extends AFColumnItem {
+class BoardColumnItem extends AppFlowyGroupItem {
final RowPB row;
final GridFieldContext fieldContext;
@@ -350,7 +350,7 @@ class BoardColumnItem extends AFColumnItem {
class GroupControllerDelegateImpl extends GroupControllerDelegate {
final GridFieldController fieldController;
- final AFBoardDataController controller;
+ final AppFlowyBoardDataController controller;
final void Function(String, RowPB, int?) onNewColumnItem;
GroupControllerDelegateImpl({
@@ -369,16 +369,16 @@ class GroupControllerDelegateImpl extends GroupControllerDelegate {
if (index != null) {
final item = BoardColumnItem(row: row, fieldContext: fieldContext);
- controller.insertColumnItem(group.groupId, index, item);
+ controller.insertGroupItem(group.groupId, index, item);
} else {
final item = BoardColumnItem(row: row, fieldContext: fieldContext);
- controller.addColumnItem(group.groupId, item);
+ controller.addGroupItem(group.groupId, item);
}
}
@override
void removeRow(GroupPB group, String rowId) {
- controller.removeColumnItem(group.groupId, rowId);
+ controller.removeGroupItem(group.groupId, rowId);
}
@override
@@ -388,7 +388,7 @@ class GroupControllerDelegateImpl extends GroupControllerDelegate {
Log.warn("FieldContext should not be null");
return;
}
- controller.updateColumnItem(
+ controller.updateGroupItem(
group.groupId,
BoardColumnItem(row: row, fieldContext: fieldContext),
);
@@ -404,9 +404,9 @@ class GroupControllerDelegateImpl extends GroupControllerDelegate {
final item = BoardColumnItem(row: row, fieldContext: fieldContext);
if (index != null) {
- controller.insertColumnItem(group.groupId, index, item);
+ controller.insertGroupItem(group.groupId, index, item);
} else {
- controller.addColumnItem(group.groupId, item);
+ controller.addGroupItem(group.groupId, item);
}
onNewColumnItem(group.groupId, row, index);
}
diff --git a/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart b/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart
index 233917ec8c..35f50dd121 100644
--- a/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart
+++ b/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart
@@ -65,8 +65,8 @@ class _BoardContentState extends State {
late ScrollController scrollController;
late AFBoardScrollManager scrollManager;
- final config = AFBoardConfig(
- columnBackgroundColor: HexColor.fromHex('#F7F8FC'),
+ final config = AppFlowyBoardConfig(
+ groupBackgroundColor: HexColor.fromHex('#F7F8FC'),
);
@override
@@ -101,7 +101,7 @@ class _BoardContentState extends State {
Expanded _buildBoard(BuildContext context) {
return Expanded(
- child: AFBoard(
+ child: AppFlowyBoard(
scrollManager: scrollManager,
scrollController: scrollController,
dataController: context.read().boardController,
@@ -112,9 +112,9 @@ class _BoardContentState extends State {
column,
columnItem,
),
- columnConstraints: const BoxConstraints.tightFor(width: 300),
- config: AFBoardConfig(
- columnBackgroundColor: HexColor.fromHex('#F7F8FC'),
+ groupConstraints: const BoxConstraints.tightFor(width: 300),
+ config: AppFlowyBoardConfig(
+ groupBackgroundColor: HexColor.fromHex('#F7F8FC'),
),
),
);
@@ -149,14 +149,14 @@ class _BoardContentState extends State {
Widget _buildHeader(
BuildContext context,
- AFBoardColumnData columnData,
+ AppFlowyBoardGroupData columnData,
) {
final boardCustomData = columnData.customData as BoardCustomData;
- return AppFlowyColumnHeader(
+ return AppFlowyGroupHeader(
title: Flexible(
fit: FlexFit.tight,
child: FlowyText.medium(
- columnData.headerData.columnName,
+ columnData.headerData.groupName,
fontSize: 14,
overflow: TextOverflow.clip,
color: context.read().textColor,
@@ -181,14 +181,14 @@ class _BoardContentState extends State {
);
}
- Widget _buildFooter(BuildContext context, AFBoardColumnData columnData) {
+ Widget _buildFooter(BuildContext context, AppFlowyBoardGroupData columnData) {
final boardCustomData = columnData.customData as BoardCustomData;
final group = boardCustomData.group;
if (group.isDefault) {
return const SizedBox();
} else {
- return AppFlowyColumnFooter(
+ return AppFlowyGroupFooter(
icon: SizedBox(
height: 20,
width: 20,
@@ -215,8 +215,8 @@ class _BoardContentState extends State {
Widget _buildCard(
BuildContext context,
- AFBoardColumnData column,
- AFColumnItem columnItem,
+ AppFlowyBoardGroupData column,
+ AppFlowyGroupItem columnItem,
) {
final boardColumnItem = columnItem as BoardColumnItem;
final rowPB = boardColumnItem.row;
@@ -242,7 +242,7 @@ class _BoardContentState extends State {
},
);
- return AppFlowyColumnItemCard(
+ return AppFlowyGroupItemCard(
key: ValueKey(columnItem.id),
margin: config.cardPadding,
decoration: _makeBoxDecoration(context),
diff --git a/frontend/app_flowy/packages/appflowy_board/README.md b/frontend/app_flowy/packages/appflowy_board/README.md
index 8da1064699..7360bde69d 100644
--- a/frontend/app_flowy/packages/appflowy_board/README.md
+++ b/frontend/app_flowy/packages/appflowy_board/README.md
@@ -9,6 +9,7 @@
Twitter
+
@@ -30,6 +31,7 @@ Add the AppFlowy Board [Flutter package](https://docs.flutter.dev/development/pa
With Flutter:
```dart
flutter pub add appflowy_board
+flutter pub get
```
This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):
@@ -38,6 +40,8 @@ dependencies:
appflowy_board: ^0.0.6
```
+## Create board
+
Import the package in your Dart file:
```dart
import 'package:appflowy_board/appflowy_board.dart';
@@ -47,14 +51,18 @@ import 'package:appflowy_board/appflowy_board.dart';
To quickly grasp how it can be used, look at the /example/lib folder.
First, run main.dart to play with the demo.
+
Second, let's delve into multi_board_list_example.dart to understand a few key components:
* A Board widget is created via instantiating an AFBoard() object.
* In the AFBoard() object, you can find:
* AFBoardDataController, which is defined in board_data.dart, is feeded with prepopulated mock data. It also contains callback functions to materialize future user data.
* Three builders: AppFlowyColumnHeader, AppFlowyColumnFooter, AppFlowyColumnItemCard. See below image for what they are used for.
-
+
+
+
+
## Glossary
Please refer to the API documentation.
@@ -68,4 +76,4 @@ Please look at [CONTRIBUTING.md](https://appflowy.gitbook.io/docs/essential-docu
Distributed under the AGPLv3 License. See [LICENSE](https://github.com/AppFlowy-IO/AppFlowy-Docs/blob/main/LICENSE) for more information.
-
+d
\ No newline at end of file
diff --git a/frontend/app_flowy/packages/appflowy_board/example/lib/multi_board_list_example.dart b/frontend/app_flowy/packages/appflowy_board/example/lib/multi_board_list_example.dart
index c0fc62f8e2..18f5118ced 100644
--- a/frontend/app_flowy/packages/appflowy_board/example/lib/multi_board_list_example.dart
+++ b/frontend/app_flowy/packages/appflowy_board/example/lib/multi_board_list_example.dart
@@ -9,21 +9,22 @@ class MultiBoardListExample extends StatefulWidget {
}
class _MultiBoardListExampleState extends State {
- final AFBoardDataController boardDataController = AFBoardDataController(
- onMoveColumn: (fromColumnId, fromIndex, toColumnId, toIndex) {
+ final AppFlowyBoardDataController boardDataController =
+ AppFlowyBoardDataController(
+ onMoveGroup: (fromColumnId, fromIndex, toColumnId, toIndex) {
// debugPrint('Move column from $fromIndex to $toIndex');
},
- onMoveColumnItem: (columnId, fromIndex, toIndex) {
+ onMoveGroupItem: (columnId, fromIndex, toIndex) {
// debugPrint('Move $columnId:$fromIndex to $columnId:$toIndex');
},
- onMoveColumnItemToColumn: (fromColumnId, fromIndex, toColumnId, toIndex) {
+ onMoveGroupItemToGroup: (fromColumnId, fromIndex, toColumnId, toIndex) {
// debugPrint('Move $fromColumnId:$fromIndex to $toColumnId:$toIndex');
},
);
@override
void initState() {
- List a = [
+ List a = [
TextItem("Card 1"),
TextItem("Card 2"),
RichTextItem(title: "Card 3", subtitle: 'Aug 1, 2020 4:05 PM'),
@@ -35,82 +36,83 @@ class _MultiBoardListExampleState extends State {
TextItem("Card 9"),
];
- final column1 = AFBoardColumnData(id: "To Do", name: "To Do", items: a);
- final column2 = AFBoardColumnData(
+ final column1 =
+ AppFlowyBoardGroupData(id: "To Do", name: "To Do", items: a);
+ final column2 = AppFlowyBoardGroupData(
id: "In Progress",
name: "In Progress",
- items: [
+ items: [
RichTextItem(title: "Card 10", subtitle: 'Aug 1, 2020 4:05 PM'),
TextItem("Card 11"),
],
);
- final column3 =
- AFBoardColumnData(id: "Done", name: "Done", items: []);
+ final column3 = AppFlowyBoardGroupData(
+ id: "Done", name: "Done", items: []);
- boardDataController.addColumn(column1);
- boardDataController.addColumn(column2);
- boardDataController.addColumn(column3);
+ boardDataController.addGroup(column1);
+ boardDataController.addGroup(column2);
+ boardDataController.addGroup(column3);
super.initState();
}
@override
Widget build(BuildContext context) {
- final config = AFBoardConfig(
- columnBackgroundColor: HexColor.fromHex('#F7F8FC'),
+ final config = AppFlowyBoardConfig(
+ groupBackgroundColor: HexColor.fromHex('#F7F8FC'),
);
return Container(
color: Colors.white,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 30, horizontal: 20),
- child: AFBoard(
+ child: AppFlowyBoard(
dataController: boardDataController,
footerBuilder: (context, columnData) {
- return AppFlowyColumnFooter(
+ return AppFlowyGroupFooter(
icon: const Icon(Icons.add, size: 20),
title: const Text('New'),
height: 50,
- margin: config.columnItemPadding,
+ margin: config.groupItemPadding,
);
},
headerBuilder: (context, columnData) {
- return AppFlowyColumnHeader(
+ return AppFlowyGroupHeader(
icon: const Icon(Icons.lightbulb_circle),
title: SizedBox(
width: 60,
child: TextField(
controller: TextEditingController()
- ..text = columnData.headerData.columnName,
+ ..text = columnData.headerData.groupName,
onSubmitted: (val) {
boardDataController
- .getColumnController(columnData.headerData.columnId)!
- .updateColumnName(val);
+ .getGroupController(columnData.headerData.groupId)!
+ .updateGroupName(val);
},
),
),
addIcon: const Icon(Icons.add, size: 20),
moreIcon: const Icon(Icons.more_horiz, size: 20),
height: 50,
- margin: config.columnItemPadding,
+ margin: config.groupItemPadding,
);
},
cardBuilder: (context, column, columnItem) {
- return AppFlowyColumnItemCard(
+ return AppFlowyGroupItemCard(
key: ValueKey(columnItem.id),
child: _buildCard(columnItem),
);
},
- columnConstraints: const BoxConstraints.tightFor(width: 240),
- config: AFBoardConfig(
- columnBackgroundColor: HexColor.fromHex('#F7F8FC'),
+ groupConstraints: const BoxConstraints.tightFor(width: 240),
+ config: AppFlowyBoardConfig(
+ groupBackgroundColor: HexColor.fromHex('#F7F8FC'),
),
),
),
);
}
- Widget _buildCard(AFColumnItem item) {
+ Widget _buildCard(AppFlowyGroupItem item) {
if (item is TextItem) {
return Align(
alignment: Alignment.centerLeft,
@@ -172,7 +174,7 @@ class _RichTextCardState extends State {
}
}
-class TextItem extends AFColumnItem {
+class TextItem extends AppFlowyGroupItem {
final String s;
TextItem(this.s);
@@ -181,7 +183,7 @@ class TextItem extends AFColumnItem {
String get id => s;
}
-class RichTextItem extends AFColumnItem {
+class RichTextItem extends AppFlowyGroupItem {
final String title;
final String subtitle;
diff --git a/frontend/app_flowy/packages/appflowy_board/example/lib/single_board_list_example.dart b/frontend/app_flowy/packages/appflowy_board/example/lib/single_board_list_example.dart
index f22c562343..5c68a24e62 100644
--- a/frontend/app_flowy/packages/appflowy_board/example/lib/single_board_list_example.dart
+++ b/frontend/app_flowy/packages/appflowy_board/example/lib/single_board_list_example.dart
@@ -9,11 +9,11 @@ class SingleBoardListExample extends StatefulWidget {
}
class _SingleBoardListExampleState extends State {
- final AFBoardDataController boardData = AFBoardDataController();
+ final AppFlowyBoardDataController boardData = AppFlowyBoardDataController();
@override
void initState() {
- final column = AFBoardColumnData(
+ final column = AppFlowyBoardGroupData(
id: "1",
name: "1",
items: [
@@ -24,13 +24,13 @@ class _SingleBoardListExampleState extends State {
],
);
- boardData.addColumn(column);
+ boardData.addGroup(column);
super.initState();
}
@override
Widget build(BuildContext context) {
- return AFBoard(
+ return AppFlowyBoard(
dataController: boardData,
cardBuilder: (context, column, columnItem) {
return _RowWidget(
@@ -55,7 +55,7 @@ class _RowWidget extends StatelessWidget {
}
}
-class TextItem extends AFColumnItem {
+class TextItem extends AppFlowyGroupItem {
final String s;
TextItem(this.s);
diff --git a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board.dart b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board.dart
index 96874a1425..7ed69db822 100644
--- a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board.dart
+++ b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board.dart
@@ -11,70 +11,78 @@ import 'reorder_phantom/phantom_controller.dart';
import '../rendering/board_overlay.dart';
class AFBoardScrollManager {
- BoardColumnsState? _columnState;
+ BoardGroupsState? _groupState;
- // AFBoardScrollManager();
-
- void scrollToBottom(String columnId, VoidCallback? completed) {
- _columnState
- ?.getReorderFlexState(columnId: columnId)
+ void scrollToBottom(String groupId, VoidCallback? completed) {
+ _groupState
+ ?.getReorderFlexState(groupId: groupId)
?.scrollToBottom(completed);
}
}
-class AFBoardConfig {
+class AppFlowyBoardConfig {
final double cornerRadius;
- final EdgeInsets columnPadding;
- final EdgeInsets columnItemPadding;
+ final EdgeInsets groupPadding;
+ final EdgeInsets groupItemPadding;
final EdgeInsets footerPadding;
final EdgeInsets headerPadding;
final EdgeInsets cardPadding;
- final Color columnBackgroundColor;
+ final Color groupBackgroundColor;
- const AFBoardConfig({
+ const AppFlowyBoardConfig({
this.cornerRadius = 6.0,
- this.columnPadding = const EdgeInsets.symmetric(horizontal: 8),
- this.columnItemPadding = const EdgeInsets.symmetric(horizontal: 12),
+ this.groupPadding = const EdgeInsets.symmetric(horizontal: 8),
+ this.groupItemPadding = const EdgeInsets.symmetric(horizontal: 12),
this.footerPadding = const EdgeInsets.symmetric(horizontal: 12),
this.headerPadding = const EdgeInsets.symmetric(horizontal: 16),
this.cardPadding = const EdgeInsets.symmetric(horizontal: 3, vertical: 4),
- this.columnBackgroundColor = Colors.transparent,
+ this.groupBackgroundColor = Colors.transparent,
});
}
-class AFBoard extends StatelessWidget {
+class AppFlowyBoard extends StatelessWidget {
/// The direction to use as the main axis.
final Axis direction = Axis.vertical;
- ///
+ /// The widget that will be rendered as the background of the board.
final Widget? background;
+ /// The [cardBuilder] function which will be invoked on each card build.
+ /// The [cardBuilder] takes the [BuildContext],[AppFlowyBoardGroupData] and
+ /// the corresponding [AppFlowyGroupItem].
///
- final AFBoardColumnCardBuilder cardBuilder;
+ /// must return a widget.
+ final AppFlowyBoardCardBuilder cardBuilder;
+
+ /// The [headerBuilder] function which will be invoked on each group build.
+ /// The [headerBuilder] takes the [BuildContext] and [AppFlowyBoardGroupData].
+ ///
+ /// must return a widget.
+ final AppFlowyBoardHeaderBuilder? headerBuilder;
+
+ /// The [footerBuilder] function which will be invoked on each group build.
+ /// The [footerBuilder] takes the [BuildContext] and [AppFlowyBoardGroupData].
+ ///
+ /// must return a widget.
+ final AppFlowyBoardFooterBuilder? footerBuilder;
///
- final AFBoardColumnHeaderBuilder? headerBuilder;
+ final AppFlowyBoardDataController dataController;
- ///
- final AFBoardColumnFooterBuilder? footerBuilder;
-
- ///
- final AFBoardDataController dataController;
-
- final BoxConstraints columnConstraints;
+ final BoxConstraints groupConstraints;
///
late final BoardPhantomController phantomController;
final ScrollController? scrollController;
- final AFBoardConfig config;
+ final AppFlowyBoardConfig config;
final AFBoardScrollManager? scrollManager;
- final BoardColumnsState _columnState = BoardColumnsState();
+ final BoardGroupsState _groupState = BoardGroupsState();
- AFBoard({
+ AppFlowyBoard({
required this.dataController,
required this.cardBuilder,
this.background,
@@ -82,13 +90,13 @@ class AFBoard extends StatelessWidget {
this.headerBuilder,
this.scrollController,
this.scrollManager,
- this.columnConstraints = const BoxConstraints(maxWidth: 200),
- this.config = const AFBoardConfig(),
+ this.groupConstraints = const BoxConstraints(maxWidth: 200),
+ this.config = const AppFlowyBoardConfig(),
Key? key,
}) : super(key: key) {
phantomController = BoardPhantomController(
delegate: dataController,
- columnsState: _columnState,
+ groupsState: _groupState,
);
}
@@ -96,10 +104,10 @@ class AFBoard extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: dataController,
- child: Consumer(
+ child: Consumer(
builder: (context, notifier, child) {
if (scrollManager != null) {
- scrollManager!._columnState = _columnState;
+ scrollManager!._groupState = _groupState;
}
return AFBoardContent(
@@ -107,15 +115,15 @@ class AFBoard extends StatelessWidget {
dataController: dataController,
scrollController: scrollController,
scrollManager: scrollManager,
- columnsState: _columnState,
+ columnsState: _groupState,
background: background,
delegate: phantomController,
- columnConstraints: columnConstraints,
+ columnConstraints: groupConstraints,
cardBuilder: cardBuilder,
- footBuilder: footerBuilder,
+ footerBuilder: footerBuilder,
headerBuilder: headerBuilder,
phantomController: phantomController,
- onReorder: dataController.moveColumn,
+ onReorder: dataController.moveGroup,
);
},
),
@@ -128,22 +136,22 @@ class AFBoardContent extends StatefulWidget {
final OnDragStarted? onDragStarted;
final OnReorder onReorder;
final OnDragEnded? onDragEnded;
- final AFBoardDataController dataController;
+ final AppFlowyBoardDataController dataController;
final Widget? background;
- final AFBoardConfig config;
+ final AppFlowyBoardConfig config;
final ReorderFlexConfig reorderFlexConfig;
final BoxConstraints columnConstraints;
final AFBoardScrollManager? scrollManager;
- final BoardColumnsState columnsState;
+ final BoardGroupsState columnsState;
///
- final AFBoardColumnCardBuilder cardBuilder;
+ final AppFlowyBoardCardBuilder cardBuilder;
///
- final AFBoardColumnHeaderBuilder? headerBuilder;
+ final AppFlowyBoardHeaderBuilder? headerBuilder;
///
- final AFBoardColumnFooterBuilder? footBuilder;
+ final AppFlowyBoardFooterBuilder? footerBuilder;
final OverlapDragTargetDelegate delegate;
@@ -162,7 +170,7 @@ class AFBoardContent extends StatefulWidget {
this.background,
required this.columnConstraints,
required this.cardBuilder,
- this.footBuilder,
+ this.footerBuilder,
this.headerBuilder,
required this.phantomController,
Key? key,
@@ -178,13 +186,15 @@ class _AFBoardContentState extends State {
GlobalKey(debugLabel: '$AFBoardContent overlay key');
late BoardOverlayEntry _overlayEntry;
+ final Map _reorderFlexKeys = {};
+
@override
void initState() {
_overlayEntry = BoardOverlayEntry(
builder: (BuildContext context) {
final interceptor = OverlappingDragTargetInterceptor(
reorderFlexId: widget.dataController.identifier,
- acceptedReorderFlexId: widget.dataController.columnIds,
+ acceptedReorderFlexId: widget.dataController.groupIds,
delegate: widget.delegate,
columnsState: widget.columnsState,
);
@@ -233,40 +243,45 @@ class _AFBoardContentState extends State {
List _buildColumns() {
final List children =
- widget.dataController.columnDatas.asMap().entries.map(
+ widget.dataController.groupDatas.asMap().entries.map(
(item) {
final columnData = item.value;
final columnIndex = item.key;
- final dataSource = _BoardColumnDataSourceImpl(
- columnId: columnData.id,
+ final dataSource = _BoardGroupDataSourceImpl(
+ groupId: columnData.id,
dataController: widget.dataController,
);
+ if (_reorderFlexKeys[columnData.id] == null) {
+ _reorderFlexKeys[columnData.id] = GlobalObjectKey(columnData.id);
+ }
+
+ GlobalObjectKey reorderFlexKey = _reorderFlexKeys[columnData.id]!;
return ChangeNotifierProvider.value(
key: ValueKey(columnData.id),
- value: widget.dataController.getColumnController(columnData.id),
- child: Consumer(
+ value: widget.dataController.getGroupController(columnData.id),
+ child: Consumer(
builder: (context, value, child) {
- final boardColumn = AFBoardColumnWidget(
+ final boardColumn = AppFlowyBoardGroupWidget(
+ reorderFlexKey: reorderFlexKey,
// key: PageStorageKey(columnData.id),
margin: _marginFromIndex(columnIndex),
- itemMargin: widget.config.columnItemPadding,
+ itemMargin: widget.config.groupItemPadding,
headerBuilder: _buildHeader,
- footBuilder: widget.footBuilder,
+ footerBuilder: widget.footerBuilder,
cardBuilder: widget.cardBuilder,
dataSource: dataSource,
scrollController: ScrollController(),
phantomController: widget.phantomController,
- onReorder: widget.dataController.moveColumnItem,
+ onReorder: widget.dataController.moveGroupItem,
cornerRadius: widget.config.cornerRadius,
- backgroundColor: widget.config.columnBackgroundColor,
+ backgroundColor: widget.config.groupBackgroundColor,
dragStateStorage: widget.columnsState,
dragTargetIndexKeyStorage: widget.columnsState,
);
- widget.columnsState.addColumn(columnData.id, boardColumn);
-
+ widget.columnsState.addGroup(columnData.id, boardColumn);
return ConstrainedBox(
constraints: widget.columnConstraints,
child: boardColumn,
@@ -282,79 +297,79 @@ class _AFBoardContentState extends State {
Widget? _buildHeader(
BuildContext context,
- AFBoardColumnData columnData,
+ AppFlowyBoardGroupData groupData,
) {
if (widget.headerBuilder == null) {
return null;
}
- return Selector(
- selector: (context, controller) => controller.columnData.headerData,
+ return Selector(
+ selector: (context, controller) => controller.groupData.headerData,
builder: (context, headerData, _) {
- return widget.headerBuilder!(context, columnData)!;
+ return widget.headerBuilder!(context, groupData)!;
},
);
}
EdgeInsets _marginFromIndex(int index) {
- if (widget.dataController.columnDatas.isEmpty) {
- return widget.config.columnPadding;
+ if (widget.dataController.groupDatas.isEmpty) {
+ return widget.config.groupPadding;
}
if (index == 0) {
- return EdgeInsets.only(right: widget.config.columnPadding.right);
+ return EdgeInsets.only(right: widget.config.groupPadding.right);
}
- if (index == widget.dataController.columnDatas.length - 1) {
- return EdgeInsets.only(left: widget.config.columnPadding.left);
+ if (index == widget.dataController.groupDatas.length - 1) {
+ return EdgeInsets.only(left: widget.config.groupPadding.left);
}
- return widget.config.columnPadding;
+ return widget.config.groupPadding;
}
}
-class _BoardColumnDataSourceImpl extends AFBoardColumnDataDataSource {
- String columnId;
- final AFBoardDataController dataController;
+class _BoardGroupDataSourceImpl extends AppFlowyBoardGroupDataDataSource {
+ String groupId;
+ final AppFlowyBoardDataController dataController;
- _BoardColumnDataSourceImpl({
- required this.columnId,
+ _BoardGroupDataSourceImpl({
+ required this.groupId,
required this.dataController,
});
@override
- AFBoardColumnData get columnData =>
- dataController.getColumnController(columnId)!.columnData;
+ AppFlowyBoardGroupData get groupData =>
+ dataController.getGroupController(groupId)!.groupData;
@override
- List get acceptedColumnIds => dataController.columnIds;
+ List get acceptedGroupIds => dataController.groupIds;
}
-class BoardColumnContext {
- GlobalKey? columnKey;
+class BoardGroupContext {
+ GlobalKey? groupKey;
DraggingState? draggingState;
}
-class BoardColumnsState extends DraggingStateStorage
+class BoardGroupsState extends DraggingStateStorage
with ReorderDragTargetIndexKeyStorage {
- /// Quick access to the [AFBoardColumnWidget]
- final Map columnKeys = {};
- final Map columnDragStates = {};
- final Map> columnDragDragTargets = {};
+ /// Quick access to the [AppFlowyBoardGroupWidget]
+ final Map groupKeys = {};
+ final Map groupDragStates = {};
+ final Map> groupDragDragTargets = {};
- void addColumn(String columnId, AFBoardColumnWidget columnWidget) {
- columnKeys[columnId] = columnWidget.globalKey;
+ void addGroup(String groupId, AppFlowyBoardGroupWidget groupWidget) {
+ groupKeys[groupId] = groupWidget.reorderFlexKey;
}
- ReorderFlexState? getReorderFlexState({required String columnId}) {
- final flexGlobalKey = columnKeys[columnId];
+ ReorderFlexState? getReorderFlexState({required String groupId}) {
+ final flexGlobalKey = groupKeys[groupId];
if (flexGlobalKey == null) return null;
if (flexGlobalKey.currentState is! ReorderFlexState) return null;
final state = flexGlobalKey.currentState as ReorderFlexState;
return state;
}
- ReorderFlex? getReorderFlex({required String columnId}) {
- final flexGlobalKey = columnKeys[columnId];
+ ReorderFlex? getReorderFlex({required String groupId}) {
+ final flexGlobalKey = groupKeys[groupId];
if (flexGlobalKey == null) return null;
if (flexGlobalKey.currentWidget is! ReorderFlex) return null;
final widget = flexGlobalKey.currentWidget as ReorderFlex;
@@ -363,18 +378,18 @@ class BoardColumnsState extends DraggingStateStorage
@override
DraggingState? read(String reorderFlexId) {
- return columnDragStates[reorderFlexId];
+ return groupDragStates[reorderFlexId];
}
@override
void write(String reorderFlexId, DraggingState state) {
Log.trace('$reorderFlexId Write dragging state: $state');
- columnDragStates[reorderFlexId] = state;
+ groupDragStates[reorderFlexId] = state;
}
@override
void remove(String reorderFlexId) {
- columnDragStates.remove(reorderFlexId);
+ groupDragStates.remove(reorderFlexId);
}
@override
@@ -383,20 +398,20 @@ class BoardColumnsState extends DraggingStateStorage
String key,
GlobalObjectKey> value,
) {
- Map? column = columnDragDragTargets[reorderFlexId];
- if (column == null) {
- column = {};
- columnDragDragTargets[reorderFlexId] = column;
+ Map? group = groupDragDragTargets[reorderFlexId];
+ if (group == null) {
+ group = {};
+ groupDragDragTargets[reorderFlexId] = group;
}
- column[key] = value;
+ group[key] = value;
}
@override
GlobalObjectKey>? readKey(
String reorderFlexId, String key) {
- Map? column = columnDragDragTargets[reorderFlexId];
- if (column != null) {
- return column[key];
+ Map? group = groupDragDragTargets[reorderFlexId];
+ if (group != null) {
+ return group[key];
} else {
return null;
}
diff --git a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column.dart b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column.dart
index ce998b365e..9723f97807 100644
--- a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column.dart
+++ b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column.dart
@@ -9,49 +9,49 @@ import '../reorder_flex/reorder_flex.dart';
import '../reorder_flex/drag_target_interceptor.dart';
import 'board_column_data.dart';
-typedef OnColumnDragStarted = void Function(int index);
+typedef OnGroupDragStarted = void Function(int index);
-typedef OnColumnDragEnded = void Function(String listId);
+typedef OnGroupDragEnded = void Function(String listId);
-typedef OnColumnReorder = void Function(
+typedef OnGroupReorder = void Function(
String listId,
int fromIndex,
int toIndex,
);
-typedef OnColumnDeleted = void Function(String listId, int deletedIndex);
+typedef OnGroupDeleted = void Function(String listId, int deletedIndex);
-typedef OnColumnInserted = void Function(String listId, int insertedIndex);
+typedef OnGroupInserted = void Function(String listId, int insertedIndex);
-typedef AFBoardColumnCardBuilder = Widget Function(
+typedef AppFlowyBoardCardBuilder = Widget Function(
BuildContext context,
- AFBoardColumnData columnData,
- AFColumnItem item,
+ AppFlowyBoardGroupData groupData,
+ AppFlowyGroupItem item,
);
-typedef AFBoardColumnHeaderBuilder = Widget? Function(
+typedef AppFlowyBoardHeaderBuilder = Widget? Function(
BuildContext context,
- AFBoardColumnData columnData,
+ AppFlowyBoardGroupData groupData,
);
-typedef AFBoardColumnFooterBuilder = Widget Function(
+typedef AppFlowyBoardFooterBuilder = Widget Function(
BuildContext context,
- AFBoardColumnData columnData,
+ AppFlowyBoardGroupData groupData,
);
-abstract class AFBoardColumnDataDataSource extends ReoderFlexDataSource {
- AFBoardColumnData get columnData;
+abstract class AppFlowyBoardGroupDataDataSource extends ReoderFlexDataSource {
+ AppFlowyBoardGroupData get groupData;
- List get acceptedColumnIds;
+ List get acceptedGroupIds;
@override
- String get identifier => columnData.id;
+ String get identifier => groupData.id;
@override
- UnmodifiableListView get items => columnData.items;
+ UnmodifiableListView get items => groupData.items;
void debugPrint() {
- String msg = '[$AFBoardColumnDataDataSource] $columnData data: ';
+ String msg = '[$AppFlowyBoardGroupDataDataSource] $groupData data: ';
for (var element in items) {
msg = '$msg$element,';
}
@@ -60,25 +60,25 @@ abstract class AFBoardColumnDataDataSource extends ReoderFlexDataSource {
}
}
-/// [AFBoardColumnWidget] represents the column of the Board.
+/// [AppFlowyBoardGroupWidget] represents the column of the Board.
///
-class AFBoardColumnWidget extends StatefulWidget {
- final AFBoardColumnDataDataSource dataSource;
+class AppFlowyBoardGroupWidget extends StatefulWidget {
+ final AppFlowyBoardGroupDataDataSource dataSource;
final ScrollController? scrollController;
final ReorderFlexConfig config;
- final OnColumnDragStarted? onDragStarted;
- final OnColumnReorder onReorder;
- final OnColumnDragEnded? onDragEnded;
+ final OnGroupDragStarted? onDragStarted;
+ final OnGroupReorder onReorder;
+ final OnGroupDragEnded? onDragEnded;
final BoardPhantomController phantomController;
- String get columnId => dataSource.columnData.id;
+ String get groupId => dataSource.groupData.id;
- final AFBoardColumnCardBuilder cardBuilder;
+ final AppFlowyBoardCardBuilder cardBuilder;
- final AFBoardColumnHeaderBuilder? headerBuilder;
+ final AppFlowyBoardHeaderBuilder? headerBuilder;
- final AFBoardColumnFooterBuilder? footBuilder;
+ final AppFlowyBoardFooterBuilder? footerBuilder;
final EdgeInsets margin;
@@ -92,12 +92,13 @@ class AFBoardColumnWidget extends StatefulWidget {
final ReorderDragTargetIndexKeyStorage? dragTargetIndexKeyStorage;
- final GlobalObjectKey globalKey;
+ final GlobalObjectKey reorderFlexKey;
- AFBoardColumnWidget({
+ const AppFlowyBoardGroupWidget({
Key? key,
+ required this.reorderFlexKey,
this.headerBuilder,
- this.footBuilder,
+ this.footerBuilder,
required this.cardBuilder,
required this.onReorder,
required this.dataSource,
@@ -111,59 +112,59 @@ class AFBoardColumnWidget extends StatefulWidget {
this.itemMargin = EdgeInsets.zero,
this.cornerRadius = 0.0,
this.backgroundColor = Colors.transparent,
- }) : globalKey = GlobalObjectKey(dataSource.columnData.id),
- config = const ReorderFlexConfig(setStateWhenEndDrag: false),
+ }) : config = const ReorderFlexConfig(setStateWhenEndDrag: false),
super(key: key);
@override
- State createState() => _AFBoardColumnWidgetState();
+ State createState() =>
+ _AppFlowyBoardGroupWidgetState();
}
-class _AFBoardColumnWidgetState extends State {
+class _AppFlowyBoardGroupWidgetState extends State {
final GlobalKey _columnOverlayKey =
- GlobalKey(debugLabel: '$AFBoardColumnWidget overlay key');
+ GlobalKey(debugLabel: '$AppFlowyBoardGroupWidget overlay key');
late BoardOverlayEntry _overlayEntry;
@override
void initState() {
_overlayEntry = BoardOverlayEntry(
builder: (BuildContext context) {
- final children = widget.dataSource.columnData.items
+ final children = widget.dataSource.groupData.items
.map((item) => _buildWidget(context, item))
.toList();
final header =
- widget.headerBuilder?.call(context, widget.dataSource.columnData);
+ widget.headerBuilder?.call(context, widget.dataSource.groupData);
final footer =
- widget.footBuilder?.call(context, widget.dataSource.columnData);
+ widget.footerBuilder?.call(context, widget.dataSource.groupData);
final interceptor = CrossReorderFlexDragTargetInterceptor(
- reorderFlexId: widget.columnId,
+ reorderFlexId: widget.groupId,
delegate: widget.phantomController,
- acceptedReorderFlexIds: widget.dataSource.acceptedColumnIds,
+ acceptedReorderFlexIds: widget.dataSource.acceptedGroupIds,
draggableTargetBuilder: PhantomDraggableBuilder(),
);
Widget reorderFlex = ReorderFlex(
- key: widget.globalKey,
+ key: widget.reorderFlexKey,
dragStateStorage: widget.dragStateStorage,
dragTargetIndexKeyStorage: widget.dragTargetIndexKeyStorage,
scrollController: widget.scrollController,
config: widget.config,
onDragStarted: (index) {
- widget.phantomController.columnStartDragging(widget.columnId);
+ widget.phantomController.groupStartDragging(widget.groupId);
widget.onDragStarted?.call(index);
},
onReorder: ((fromIndex, toIndex) {
- if (widget.phantomController.isFromColumn(widget.columnId)) {
- widget.onReorder(widget.columnId, fromIndex, toIndex);
+ if (widget.phantomController.isFromGroup(widget.groupId)) {
+ widget.onReorder(widget.groupId, fromIndex, toIndex);
widget.phantomController.transformIndex(fromIndex, toIndex);
}
}),
onDragEnded: () {
- widget.phantomController.columnEndDragging(widget.columnId);
- widget.onDragEnded?.call(widget.columnId);
+ widget.phantomController.groupEndDragging(widget.groupId);
+ widget.onDragEnded?.call(widget.groupId);
widget.dataSource.debugPrint();
},
dataSource: widget.dataSource,
@@ -171,6 +172,10 @@ class _AFBoardColumnWidgetState extends State {
children: children,
);
+ reorderFlex = Expanded(
+ child: Padding(padding: widget.itemMargin, child: reorderFlex),
+ );
+
return Container(
margin: widget.margin,
clipBehavior: Clip.hardEdge,
@@ -181,9 +186,7 @@ class _AFBoardColumnWidgetState extends State {
child: Column(
children: [
if (header != null) header,
- Expanded(
- child: Padding(padding: widget.itemMargin, child: reorderFlex),
- ),
+ reorderFlex,
if (footer != null) footer,
],
),
@@ -202,15 +205,15 @@ class _AFBoardColumnWidgetState extends State {
);
}
- Widget _buildWidget(BuildContext context, AFColumnItem item) {
- if (item is PhantomColumnItem) {
+ Widget _buildWidget(BuildContext context, AppFlowyGroupItem item) {
+ if (item is PhantomGroupItem) {
return PassthroughPhantomWidget(
key: UniqueKey(),
opacity: widget.config.draggingWidgetOpacity,
passthroughPhantomContext: item.phantomContext,
);
} else {
- return widget.cardBuilder(context, widget.dataSource.columnData, item);
+ return widget.cardBuilder(context, widget.dataSource.groupData, item);
}
}
}
diff --git a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart
index bc442acd2a..1a45dce39b 100644
--- a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart
+++ b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_column/board_column_data.dart
@@ -5,14 +5,14 @@ import 'package:flutter/material.dart';
import '../../utils/log.dart';
import '../reorder_flex/reorder_flex.dart';
-abstract class AFColumnItem extends ReoderFlexItem {
+abstract class AppFlowyGroupItem extends ReoderFlexItem {
bool get isPhantom => false;
@override
String toString() => id;
}
-/// [AFBoardColumnDataController] is used to handle the [AFBoardColumnData].
+/// [AFBoardGroupDataController] is used to handle the [AppFlowyBoardGroupData].
/// * Remove an item by calling [removeAt] method.
/// * Move item to another position by calling [move] method.
/// * Insert item to index by calling [insert] method
@@ -20,23 +20,23 @@ abstract class AFColumnItem extends ReoderFlexItem {
///
/// All there operations will notify listeners by default.
///
-class AFBoardColumnDataController extends ChangeNotifier with EquatableMixin {
- final AFBoardColumnData columnData;
+class AFBoardGroupDataController extends ChangeNotifier with EquatableMixin {
+ final AppFlowyBoardGroupData groupData;
- AFBoardColumnDataController({
- required this.columnData,
+ AFBoardGroupDataController({
+ required this.groupData,
});
@override
- List