Skip to content

Commit 515cd50

Browse files
authored
chore: grid/kanban toolbar UI improvements (#1634)
1 parent c5b15da commit 515cd50

File tree

6 files changed

+79
-75
lines changed

6 files changed

+79
-75
lines changed

frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:flowy_infra_ui/style_widget/text.dart';
1313
import 'package:flowy_infra_ui/widget/spacing.dart';
1414
import 'package:flutter/material.dart';
1515
import 'package:flutter_bloc/flutter_bloc.dart';
16+
import 'package:styled_widget/styled_widget.dart';
1617

1718
import 'board_toolbar.dart';
1819

@@ -181,6 +182,6 @@ class _BoardSettingListPopoverState extends State<BoardSettingListPopover> {
181182
onAction: (action, settingContext) {
182183
setState(() => _action = action);
183184
},
184-
);
185+
).padding(all: 6.0);
185186
}
186187
}

frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:app_flowy/plugins/grid/application/field/field_controller.dart';
2+
import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart';
23
import 'package:appflowy_popover/appflowy_popover.dart';
34
import 'package:easy_localization/easy_localization.dart';
45
import 'package:flowy_infra/theme_extension.dart';
@@ -67,12 +68,12 @@ class _SettingButtonState extends State<_SettingButton> {
6768
direction: PopoverDirection.leftWithTopAligned,
6869
triggerActions: PopoverTriggerFlags.none,
6970
constraints: BoxConstraints.loose(const Size(260, 400)),
71+
margin: EdgeInsets.zero,
7072
child: FlowyTextButton(
7173
LocaleKeys.settings_title.tr(),
72-
fontSize: 14,
7374
fillColor: Colors.transparent,
7475
hoverColor: AFThemeExtension.of(context).lightGreyHover,
75-
padding: const EdgeInsets.symmetric(vertical: 2, horizontal: 6),
76+
padding: GridSize.typeOptionContentInsets,
7677
onPressed: () {
7778
popoverController.show();
7879
},

frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/filter_button.dart

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:flowy_infra_ui/style_widget/button.dart';
88
import 'package:flutter/material.dart';
99
import 'package:flutter_bloc/flutter_bloc.dart';
1010

11+
import '../../layout/sizes.dart';
1112
import '../filter/create_filter_list.dart';
1213

1314
class FilterButton extends StatefulWidget {
@@ -28,39 +29,34 @@ class _FilterButtonState extends State<FilterButton> {
2829
? null
2930
: Theme.of(context).colorScheme.primary;
3031

31-
return wrapPopover(
32+
return _wrapPopover(
3233
context,
33-
SizedBox(
34-
height: 26,
35-
child: FlowyTextButton(
36-
LocaleKeys.grid_settings_filter.tr(),
37-
fontSize: 13,
38-
fontColor: textColor,
39-
fillColor: Colors.transparent,
40-
hoverColor: AFThemeExtension.of(context).lightGreyHover,
41-
padding: const EdgeInsets.symmetric(vertical: 2, horizontal: 2),
42-
onPressed: () {
43-
final bloc = context.read<GridFilterMenuBloc>();
44-
if (bloc.state.filters.isEmpty) {
45-
_popoverController.show();
46-
} else {
47-
bloc.add(const GridFilterMenuEvent.toggleMenu());
48-
}
49-
},
50-
),
34+
FlowyTextButton(
35+
LocaleKeys.grid_settings_filter.tr(),
36+
fontColor: textColor,
37+
fillColor: Colors.transparent,
38+
hoverColor: AFThemeExtension.of(context).lightGreyHover,
39+
padding: GridSize.typeOptionContentInsets,
40+
onPressed: () {
41+
final bloc = context.read<GridFilterMenuBloc>();
42+
if (bloc.state.filters.isEmpty) {
43+
_popoverController.show();
44+
} else {
45+
bloc.add(const GridFilterMenuEvent.toggleMenu());
46+
}
47+
},
5148
),
5249
);
5350
},
5451
);
5552
}
5653

57-
Widget wrapPopover(BuildContext buildContext, Widget child) {
54+
Widget _wrapPopover(BuildContext buildContext, Widget child) {
5855
return AppFlowyPopover(
5956
controller: _popoverController,
6057
direction: PopoverDirection.leftWithTopAligned,
6158
constraints: BoxConstraints.loose(const Size(200, 300)),
6259
offset: const Offset(0, 10),
63-
margin: const EdgeInsets.all(6),
6460
triggerActions: PopoverTriggerFlags.none,
6561
child: child,
6662
popupBuilder: (BuildContext context) {

frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,10 @@ class GridGroupList extends StatelessWidget {
4646
return ListView.separated(
4747
shrinkWrap: true,
4848
itemCount: cells.length,
49-
itemBuilder: (BuildContext context, int index) {
50-
return cells[index];
51-
},
52-
separatorBuilder: (BuildContext context, int index) {
53-
return VSpace(GridSize.typeOptionSeparatorHeight);
54-
},
49+
itemBuilder: (BuildContext context, int index) => cells[index],
50+
separatorBuilder: (BuildContext context, int index) =>
51+
VSpace(GridSize.typeOptionSeparatorHeight),
52+
padding: const EdgeInsets.all(6.0),
5553
);
5654
},
5755
),

frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -59,79 +59,88 @@ class _GridPropertyListState extends State<GridPropertyList> {
5959
controller: ScrollController(),
6060
shrinkWrap: true,
6161
itemCount: cells.length,
62-
itemBuilder: (BuildContext context, int index) {
63-
return cells[index];
64-
},
65-
separatorBuilder: (BuildContext context, int index) {
66-
return VSpace(GridSize.typeOptionSeparatorHeight);
67-
},
62+
itemBuilder: (BuildContext context, int index) => cells[index],
63+
separatorBuilder: (BuildContext context, int index) =>
64+
VSpace(GridSize.typeOptionSeparatorHeight),
65+
padding: const EdgeInsets.symmetric(vertical: 6.0),
6866
);
6967
},
7068
),
7169
);
7270
}
7371
}
7472

75-
class _GridPropertyCell extends StatelessWidget {
73+
class _GridPropertyCell extends StatefulWidget {
7674
final FieldInfo fieldInfo;
7775
final String gridId;
7876
final PopoverMutex popoverMutex;
77+
7978
const _GridPropertyCell({
8079
required this.gridId,
8180
required this.fieldInfo,
8281
required this.popoverMutex,
8382
Key? key,
8483
}) : super(key: key);
8584

85+
@override
86+
State<_GridPropertyCell> createState() => _GridPropertyCellState();
87+
}
88+
89+
class _GridPropertyCellState extends State<_GridPropertyCell> {
90+
late PopoverController _popoverController;
91+
92+
@override
93+
void initState() {
94+
_popoverController = PopoverController();
95+
super.initState();
96+
}
97+
8698
@override
8799
Widget build(BuildContext context) {
88100
final checkmark = svgWidget(
89-
fieldInfo.visibility ? 'home/show' : 'home/hide',
101+
widget.fieldInfo.visibility ? 'home/show' : 'home/hide',
90102
color: Theme.of(context).colorScheme.onSurface,
91103
);
92104

93-
return Row(
94-
children: [
95-
Expanded(
96-
child: SizedBox(
97-
height: GridSize.typeOptionItemHeight,
98-
child: _editFieldButton(context),
99-
),
100-
),
101-
FlowyIconButton(
102-
width: GridSize.typeOptionItemHeight,
103-
onPressed: () {
104-
context.read<GridPropertyBloc>().add(
105-
GridPropertyEvent.setFieldVisibility(
106-
fieldInfo.id, !fieldInfo.visibility));
107-
},
108-
icon: checkmark.padding(all: 6),
109-
)
110-
],
105+
return SizedBox(
106+
height: GridSize.typeOptionItemHeight,
107+
child: _editFieldButton(context, checkmark),
111108
);
112109
}
113110

114-
Widget _editFieldButton(BuildContext context) {
111+
Widget _editFieldButton(BuildContext context, Widget checkmark) {
115112
return AppFlowyPopover(
116-
mutex: popoverMutex,
113+
mutex: widget.popoverMutex,
114+
controller: _popoverController,
117115
offset: const Offset(20, 0),
118116
direction: PopoverDirection.leftWithTopAligned,
119117
constraints: BoxConstraints.loose(const Size(240, 400)),
118+
triggerActions: PopoverTriggerFlags.none,
120119
margin: EdgeInsets.zero,
121120
child: FlowyButton(
122-
text: FlowyText.medium(fieldInfo.name),
121+
text: FlowyText.medium(widget.fieldInfo.name),
123122
leftIcon: svgWidget(
124-
fieldInfo.fieldType.iconName(),
123+
widget.fieldInfo.fieldType.iconName(),
125124
color: Theme.of(context).colorScheme.onSurface,
126125
),
127-
),
126+
rightIcon: FlowyIconButton(
127+
hoverColor: Colors.transparent,
128+
onPressed: () {
129+
context.read<GridPropertyBloc>().add(
130+
GridPropertyEvent.setFieldVisibility(
131+
widget.fieldInfo.id, !widget.fieldInfo.visibility));
132+
},
133+
icon: checkmark.padding(all: 6.0),
134+
),
135+
onTap: () => _popoverController.show(),
136+
).padding(horizontal: 6.0),
128137
popupBuilder: (BuildContext context) {
129138
return FieldEditor(
130-
gridId: gridId,
131-
fieldName: fieldInfo.name,
139+
gridId: widget.gridId,
140+
fieldName: widget.fieldInfo.name,
132141
typeOptionLoader: FieldTypeOptionLoader(
133-
gridId: gridId,
134-
field: fieldInfo.field,
142+
gridId: widget.gridId,
143+
field: widget.fieldInfo.field,
135144
),
136145
);
137146
},

frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/setting_button.dart

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
88
import 'package:flowy_infra_ui/style_widget/button.dart';
99
import 'package:flutter/material.dart';
1010
import 'package:flutter_bloc/flutter_bloc.dart';
11+
import 'package:styled_widget/styled_widget.dart';
1112

13+
import '../../layout/sizes.dart';
1214
import 'grid_property.dart';
1315
import 'grid_setting.dart';
1416

@@ -20,11 +22,11 @@ class SettingButton extends StatefulWidget {
2022
}
2123

2224
class _SettingButtonState extends State<SettingButton> {
23-
late PopoverController popoverController;
25+
late PopoverController _popoverController;
2426

2527
@override
2628
void initState() {
27-
popoverController = PopoverController();
29+
_popoverController = PopoverController();
2830
super.initState();
2931
}
3032

@@ -41,21 +43,18 @@ class _SettingButtonState extends State<SettingButton> {
4143
},
4244
builder: (context, settingContext) {
4345
return AppFlowyPopover(
44-
controller: popoverController,
46+
controller: _popoverController,
4547
constraints: BoxConstraints.loose(const Size(260, 400)),
4648
direction: PopoverDirection.leftWithTopAligned,
4749
offset: const Offset(0, 10),
48-
margin: const EdgeInsets.all(6),
50+
margin: EdgeInsets.zero,
4951
triggerActions: PopoverTriggerFlags.none,
5052
child: FlowyTextButton(
5153
LocaleKeys.settings_title.tr(),
52-
fontSize: 13,
5354
fillColor: Colors.transparent,
5455
hoverColor: AFThemeExtension.of(context).lightGreyHover,
55-
padding: const EdgeInsets.symmetric(vertical: 2, horizontal: 6),
56-
onPressed: () {
57-
popoverController.show();
58-
},
56+
padding: GridSize.typeOptionContentInsets,
57+
onPressed: () => _popoverController.show(),
5958
),
6059
popupBuilder: (BuildContext context) {
6160
return _GridSettingListPopover(settingContext: settingContext);
@@ -95,6 +94,6 @@ class _GridSettingListPopoverState extends State<_GridSettingListPopover> {
9594
_action = action;
9695
});
9796
},
98-
);
97+
).padding(all: 6.0);
9998
}
10099
}

0 commit comments

Comments
 (0)