mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: select option chip size (#5859)
This commit is contained in:
parent
73421e0d58
commit
c2e8a12427
@ -1,5 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
import 'package:appflowy/plugins/database/application/cell/cell_controller_builder.dart';
|
import 'package:appflowy/plugins/database/application/cell/cell_controller_builder.dart';
|
||||||
import 'package:appflowy/plugins/database/application/field/field_info.dart';
|
import 'package:appflowy/plugins/database/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database/application/field/type_option/select_type_option_actions.dart';
|
import 'package:appflowy/plugins/database/application/field/type_option/select_type_option_actions.dart';
|
||||||
@ -9,7 +11,6 @@ import 'package:appflowy/plugins/database/domain/select_option_cell_service.dart
|
|||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
@ -109,16 +110,16 @@ class SelectOptionCellEditorBloc
|
|||||||
selectOption: (optionId) async {
|
selectOption: (optionId) async {
|
||||||
await _selectOptionService.select(optionIds: [optionId]);
|
await _selectOptionService.select(optionIds: [optionId]);
|
||||||
},
|
},
|
||||||
unSelectOption: (optionId) async {
|
unselectOption: (optionId) async {
|
||||||
await _selectOptionService.unSelect(optionIds: [optionId]);
|
await _selectOptionService.unselect(optionIds: [optionId]);
|
||||||
},
|
},
|
||||||
unSelectLastOption: () async {
|
unselectLastOption: () async {
|
||||||
if (state.selectedOptions.isEmpty) {
|
if (state.selectedOptions.isEmpty) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final lastSelectedOptionId = state.selectedOptions.last.id;
|
final lastSelectedOptionId = state.selectedOptions.last.id;
|
||||||
await _selectOptionService
|
await _selectOptionService
|
||||||
.unSelect(optionIds: [lastSelectedOptionId]);
|
.unselect(optionIds: [lastSelectedOptionId]);
|
||||||
},
|
},
|
||||||
submitTextField: () {
|
submitTextField: () {
|
||||||
_submitTextFieldValue(emit);
|
_submitTextFieldValue(emit);
|
||||||
@ -353,10 +354,10 @@ class SelectOptionCellEditorEvent with _$SelectOptionCellEditorEvent {
|
|||||||
const factory SelectOptionCellEditorEvent.createOption() = _CreateOption;
|
const factory SelectOptionCellEditorEvent.createOption() = _CreateOption;
|
||||||
const factory SelectOptionCellEditorEvent.selectOption(String optionId) =
|
const factory SelectOptionCellEditorEvent.selectOption(String optionId) =
|
||||||
_SelectOption;
|
_SelectOption;
|
||||||
const factory SelectOptionCellEditorEvent.unSelectOption(String optionId) =
|
const factory SelectOptionCellEditorEvent.unselectOption(String optionId) =
|
||||||
_UnSelectOption;
|
_UnselectOption;
|
||||||
const factory SelectOptionCellEditorEvent.unSelectLastOption() =
|
const factory SelectOptionCellEditorEvent.unselectLastOption() =
|
||||||
_UnSelectLastOption;
|
_UnselectLastOption;
|
||||||
const factory SelectOptionCellEditorEvent.updateOption(
|
const factory SelectOptionCellEditorEvent.updateOption(
|
||||||
SelectOptionPB option,
|
SelectOptionPB option,
|
||||||
) = _UpdateOption;
|
) = _UpdateOption;
|
||||||
|
@ -70,7 +70,7 @@ class SelectOptionCellBackendService {
|
|||||||
return DatabaseEventUpdateSelectOptionCell(payload).send();
|
return DatabaseEventUpdateSelectOptionCell(payload).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<FlowyResult<void, FlowyError>> unSelect({
|
Future<FlowyResult<void, FlowyError>> unselect({
|
||||||
required Iterable<String> optionIds,
|
required Iterable<String> optionIds,
|
||||||
}) {
|
}) {
|
||||||
final payload = SelectOptionCellChangesetPB()
|
final payload = SelectOptionCellChangesetPB()
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/mobile/presentation/base/app_bar/app_bar_actions.dart';
|
import 'package:appflowy/mobile/presentation/base/app_bar/app_bar_actions.dart';
|
||||||
@ -12,7 +14,6 @@ import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pbenum.
|
|||||||
import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/select_option_entities.pb.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:protobuf/protobuf.dart';
|
import 'package:protobuf/protobuf.dart';
|
||||||
@ -176,7 +177,7 @@ class _MobileSelectOptionEditorState extends State<MobileSelectOptionEditor> {
|
|||||||
} else {
|
} else {
|
||||||
context
|
context
|
||||||
.read<SelectOptionCellEditorBloc>()
|
.read<SelectOptionCellEditorBloc>()
|
||||||
.add(SelectOptionCellEditorEvent.unSelectOption(option.id));
|
.add(SelectOptionCellEditorEvent.unselectOption(option.id));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onMoreOptions: (option) {
|
onMoreOptions: (option) {
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/plugins/database/application/cell/bloc/select_option_cell_editor_bloc.dart';
|
import 'package:appflowy/plugins/database/application/cell/bloc/select_option_cell_editor_bloc.dart';
|
||||||
@ -10,14 +14,11 @@ import 'package:appflowy_popover/appflowy_popover.dart';
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flowy_infra/theme_extension.dart';
|
import 'package:flowy_infra/theme_extension.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
import '../../grid/presentation/layout/sizes.dart';
|
|
||||||
import '../../grid/presentation/widgets/common/type_option_separator.dart';
|
import '../../grid/presentation/widgets/common/type_option_separator.dart';
|
||||||
import '../field/type_option_editor/select/select_option_editor.dart';
|
import '../field/type_option_editor/select/select_option_editor.dart';
|
||||||
|
|
||||||
import 'extension.dart';
|
import 'extension.dart';
|
||||||
import 'select_option_text_field.dart';
|
import 'select_option_text_field.dart';
|
||||||
|
|
||||||
@ -73,7 +74,7 @@ class _SelectOptionCellEditorState extends State<SelectOptionCellEditor> {
|
|||||||
break;
|
break;
|
||||||
case LogicalKeyboardKey.backspace when event is KeyUpEvent:
|
case LogicalKeyboardKey.backspace when event is KeyUpEvent:
|
||||||
if (!textEditingController.text.isNotEmpty) {
|
if (!textEditingController.text.isNotEmpty) {
|
||||||
bloc.add(const SelectOptionCellEditorEvent.unSelectLastOption());
|
bloc.add(const SelectOptionCellEditorEvent.unselectLastOption());
|
||||||
return KeyEventResult.handled;
|
return KeyEventResult.handled;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -137,8 +138,7 @@ class _OptionList extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocConsumer<SelectOptionCellEditorBloc,
|
return BlocConsumer<SelectOptionCellEditorBloc,
|
||||||
SelectOptionCellEditorState>(
|
SelectOptionCellEditorState>(
|
||||||
listenWhen: (previous, current) =>
|
listenWhen: (prev, curr) => prev.clearFilter != curr.clearFilter,
|
||||||
previous.clearFilter != current.clearFilter,
|
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
if (state.clearFilter) {
|
if (state.clearFilter) {
|
||||||
textEditingController.clear();
|
textEditingController.clear();
|
||||||
@ -151,60 +151,66 @@ class _OptionList extends StatelessWidget {
|
|||||||
!listEquals(previous.options, current.options) ||
|
!listEquals(previous.options, current.options) ||
|
||||||
previous.createSelectOptionSuggestion !=
|
previous.createSelectOptionSuggestion !=
|
||||||
current.createSelectOptionSuggestion,
|
current.createSelectOptionSuggestion,
|
||||||
builder: (context, state) {
|
builder: (context, state) => ReorderableListView.builder(
|
||||||
return ReorderableListView.builder(
|
shrinkWrap: true,
|
||||||
shrinkWrap: true,
|
proxyDecorator: (child, index, _) => Material(
|
||||||
proxyDecorator: (child, index, _) => Material(
|
color: Colors.transparent,
|
||||||
color: Colors.transparent,
|
child: Stack(
|
||||||
child: Stack(
|
children: [
|
||||||
children: [
|
BlocProvider.value(
|
||||||
BlocProvider.value(
|
value: context.read<SelectOptionCellEditorBloc>(),
|
||||||
value: context.read<SelectOptionCellEditorBloc>(),
|
child: child,
|
||||||
child: child,
|
),
|
||||||
),
|
MouseRegion(
|
||||||
MouseRegion(
|
cursor: Platform.isWindows
|
||||||
cursor: Platform.isWindows
|
? SystemMouseCursors.click
|
||||||
? SystemMouseCursors.click
|
: SystemMouseCursors.grabbing,
|
||||||
: SystemMouseCursors.grabbing,
|
child: const SizedBox.expand(),
|
||||||
child: const SizedBox.expand(),
|
),
|
||||||
),
|
],
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
buildDefaultDragHandles: false,
|
),
|
||||||
itemCount: state.options.length,
|
buildDefaultDragHandles: false,
|
||||||
onReorderStart: (_) => popoverMutex.close(),
|
itemCount: state.options.length,
|
||||||
itemBuilder: (_, int index) {
|
onReorderStart: (_) => popoverMutex.close(),
|
||||||
final option = state.options[index];
|
itemBuilder: (_, int index) {
|
||||||
return _SelectOptionCell(
|
final option = state.options[index];
|
||||||
key: ValueKey("select_cell_option_list_${option.id}"),
|
return _SelectOptionCell(
|
||||||
index: index,
|
key: ValueKey("select_cell_option_list_${option.id}"),
|
||||||
option: option,
|
index: index,
|
||||||
popoverMutex: popoverMutex,
|
option: option,
|
||||||
);
|
popoverMutex: popoverMutex,
|
||||||
},
|
);
|
||||||
onReorder: (oldIndex, newIndex) {
|
},
|
||||||
if (oldIndex < newIndex) {
|
onReorder: (oldIndex, newIndex) {
|
||||||
newIndex--;
|
if (oldIndex < newIndex) {
|
||||||
}
|
newIndex--;
|
||||||
final fromOptionId = state.options[oldIndex].id;
|
}
|
||||||
final toOptionId = state.options[newIndex].id;
|
final fromOptionId = state.options[oldIndex].id;
|
||||||
context.read<SelectOptionCellEditorBloc>().add(
|
final toOptionId = state.options[newIndex].id;
|
||||||
SelectOptionCellEditorEvent.reorderOption(
|
context.read<SelectOptionCellEditorBloc>().add(
|
||||||
fromOptionId,
|
SelectOptionCellEditorEvent.reorderOption(
|
||||||
toOptionId,
|
fromOptionId,
|
||||||
),
|
toOptionId,
|
||||||
);
|
|
||||||
},
|
|
||||||
header: const _Title(),
|
|
||||||
footer: state.createSelectOptionSuggestion == null
|
|
||||||
? null
|
|
||||||
: _CreateOptionCell(
|
|
||||||
suggestion: state.createSelectOptionSuggestion!,
|
|
||||||
),
|
),
|
||||||
padding: const EdgeInsets.symmetric(vertical: 8.0),
|
);
|
||||||
);
|
},
|
||||||
},
|
header: Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
bottom: state.createSelectOptionSuggestion != null ||
|
||||||
|
state.options.isNotEmpty
|
||||||
|
? 12
|
||||||
|
: 0,
|
||||||
|
),
|
||||||
|
child: const _Title(),
|
||||||
|
),
|
||||||
|
footer: state.createSelectOptionSuggestion != null
|
||||||
|
? _CreateOptionCell(
|
||||||
|
suggestion: state.createSelectOptionSuggestion!,
|
||||||
|
)
|
||||||
|
: null,
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -245,11 +251,9 @@ class _TextField extends StatelessWidget {
|
|||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
textSeparators: const [','],
|
textSeparators: const [','],
|
||||||
onClick: () => popoverMutex.close(),
|
onClick: () => popoverMutex.close(),
|
||||||
newText: (text) {
|
newText: (text) => context
|
||||||
context
|
.read<SelectOptionCellEditorBloc>()
|
||||||
.read<SelectOptionCellEditorBloc>()
|
.add(SelectOptionCellEditorEvent.filterOption(text)),
|
||||||
.add(SelectOptionCellEditorEvent.filterOption(text));
|
|
||||||
},
|
|
||||||
onSubmitted: () {
|
onSubmitted: () {
|
||||||
context
|
context
|
||||||
.read<SelectOptionCellEditorBloc>()
|
.read<SelectOptionCellEditorBloc>()
|
||||||
@ -264,13 +268,12 @@ class _TextField extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
onRemove: (optionName) {
|
onRemove: (name) =>
|
||||||
context.read<SelectOptionCellEditorBloc>().add(
|
context.read<SelectOptionCellEditorBloc>().add(
|
||||||
SelectOptionCellEditorEvent.unSelectOption(
|
SelectOptionCellEditorEvent.unselectOption(
|
||||||
optionMap[optionName]!.id,
|
optionMap[name]!.id,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@ -286,12 +289,9 @@ class _Title extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
child: SizedBox(
|
child: FlowyText.regular(
|
||||||
height: GridSize.popoverItemHeight,
|
LocaleKeys.grid_selectOption_panelTitle.tr(),
|
||||||
child: FlowyText.regular(
|
color: Theme.of(context).hintColor,
|
||||||
LocaleKeys.grid_selectOption_panelTitle.tr(),
|
|
||||||
color: Theme.of(context).hintColor,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -326,16 +326,27 @@ class _SelectOptionCellState extends State<_SelectOptionCell> {
|
|||||||
constraints: BoxConstraints.loose(const Size(200, 470)),
|
constraints: BoxConstraints.loose(const Size(200, 470)),
|
||||||
mutex: widget.popoverMutex,
|
mutex: widget.popoverMutex,
|
||||||
clickHandler: PopoverClickHandler.gestureDetector,
|
clickHandler: PopoverClickHandler.gestureDetector,
|
||||||
|
popupBuilder: (popoverContext) => SelectOptionEditor(
|
||||||
|
key: ValueKey(widget.option.id),
|
||||||
|
option: widget.option,
|
||||||
|
onDeleted: () {
|
||||||
|
context
|
||||||
|
.read<SelectOptionCellEditorBloc>()
|
||||||
|
.add(SelectOptionCellEditorEvent.deleteOption(widget.option));
|
||||||
|
PopoverContainer.of(popoverContext).close();
|
||||||
|
},
|
||||||
|
onUpdated: (updatedOption) => context
|
||||||
|
.read<SelectOptionCellEditorBloc>()
|
||||||
|
.add(SelectOptionCellEditorEvent.updateOption(updatedOption)),
|
||||||
|
),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 2.0),
|
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 2.0),
|
||||||
child: MouseRegion(
|
child: MouseRegion(
|
||||||
onEnter: (_) {
|
onEnter: (_) => context.read<SelectOptionCellEditorBloc>().add(
|
||||||
context.read<SelectOptionCellEditorBloc>().add(
|
SelectOptionCellEditorEvent.updateFocusedOption(
|
||||||
SelectOptionCellEditorEvent.updateFocusedOption(
|
widget.option.id,
|
||||||
widget.option.id,
|
),
|
||||||
),
|
),
|
||||||
);
|
|
||||||
},
|
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 28,
|
height: 28,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -382,42 +393,16 @@ class _SelectOptionCellState extends State<_SelectOptionCell> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
popupBuilder: (BuildContext popoverContext) {
|
|
||||||
return SelectOptionEditor(
|
|
||||||
option: widget.option,
|
|
||||||
onDeleted: () {
|
|
||||||
context
|
|
||||||
.read<SelectOptionCellEditorBloc>()
|
|
||||||
.add(SelectOptionCellEditorEvent.deleteOption(widget.option));
|
|
||||||
PopoverContainer.of(popoverContext).close();
|
|
||||||
},
|
|
||||||
onUpdated: (updatedOption) {
|
|
||||||
context
|
|
||||||
.read<SelectOptionCellEditorBloc>()
|
|
||||||
.add(SelectOptionCellEditorEvent.updateOption(updatedOption));
|
|
||||||
},
|
|
||||||
key: ValueKey(
|
|
||||||
widget.option.id,
|
|
||||||
), // Use ValueKey to refresh the UI, otherwise, it will remain the old value.
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onTap() {
|
void _onTap() {
|
||||||
widget.popoverMutex.close();
|
widget.popoverMutex.close();
|
||||||
if (context
|
final bloc = context.read<SelectOptionCellEditorBloc>();
|
||||||
.read<SelectOptionCellEditorBloc>()
|
if (bloc.state.selectedOptions.contains(widget.option)) {
|
||||||
.state
|
bloc.add(SelectOptionCellEditorEvent.unselectOption(widget.option.id));
|
||||||
.selectedOptions
|
|
||||||
.contains(widget.option)) {
|
|
||||||
context
|
|
||||||
.read<SelectOptionCellEditorBloc>()
|
|
||||||
.add(SelectOptionCellEditorEvent.unSelectOption(widget.option.id));
|
|
||||||
} else {
|
} else {
|
||||||
context
|
bloc.add(SelectOptionCellEditorEvent.selectOption(widget.option.id));
|
||||||
.read<SelectOptionCellEditorBloc>()
|
|
||||||
.add(SelectOptionCellEditorEvent.selectOption(widget.option.id));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -472,13 +457,14 @@ class SelectOptionTagCell extends StatelessWidget {
|
|||||||
child: Align(
|
child: Align(
|
||||||
alignment: AlignmentDirectional.centerStart,
|
alignment: AlignmentDirectional.centerStart,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(horizontal: 6.0),
|
||||||
horizontal: 6.0,
|
|
||||||
),
|
|
||||||
child: SelectOptionTag(
|
child: SelectOptionTag(
|
||||||
|
fontSize: 14,
|
||||||
option: option,
|
option: option,
|
||||||
padding:
|
padding: const EdgeInsets.symmetric(
|
||||||
const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
horizontal: 8,
|
||||||
|
vertical: 2,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -492,16 +478,14 @@ class SelectOptionTagCell extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _CreateOptionCell extends StatelessWidget {
|
class _CreateOptionCell extends StatelessWidget {
|
||||||
const _CreateOptionCell({
|
const _CreateOptionCell({required this.suggestion});
|
||||||
required this.suggestion,
|
|
||||||
});
|
|
||||||
|
|
||||||
final CreateSelectOptionSuggestion suggestion;
|
final CreateSelectOptionSuggestion suggestion;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
height: 28,
|
height: 32,
|
||||||
margin: const EdgeInsets.symmetric(horizontal: 8.0),
|
margin: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -537,10 +521,10 @@ class _CreateOptionCell extends StatelessWidget {
|
|||||||
child: SelectOptionTag(
|
child: SelectOptionTag(
|
||||||
name: suggestion.name,
|
name: suggestion.name,
|
||||||
color: suggestion.color.toColor(context),
|
color: suggestion.color.toColor(context),
|
||||||
fontSize: 11,
|
fontSize: 14,
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
horizontal: 8,
|
horizontal: 8,
|
||||||
vertical: 1,
|
vertical: 2,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:appflowy_popover/appflowy_popover.dart';
|
import 'package:appflowy_popover/appflowy_popover.dart';
|
||||||
import 'package:flowy_infra/colorscheme/default_colorscheme.dart';
|
import 'package:flowy_infra/colorscheme/default_colorscheme.dart';
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
class AppFlowyPopover extends StatelessWidget {
|
class AppFlowyPopover extends StatelessWidget {
|
||||||
final Widget child;
|
final Widget child;
|
||||||
@ -152,7 +153,7 @@ extension on BuildContext {
|
|||||||
side: BorderSide(
|
side: BorderSide(
|
||||||
width: 1,
|
width: 1,
|
||||||
strokeAlign: BorderSide.strokeAlignOutside,
|
strokeAlign: BorderSide.strokeAlignOutside,
|
||||||
color: borderColor,
|
color: color != Colors.transparent ? borderColor : color!,
|
||||||
),
|
),
|
||||||
borderRadius: borderRadius ?? BorderRadius.circular(10),
|
borderRadius: borderRadius ?? BorderRadius.circular(10),
|
||||||
),
|
),
|
||||||
|
@ -123,7 +123,7 @@ void main() {
|
|||||||
await gridResponseFuture();
|
await gridResponseFuture();
|
||||||
|
|
||||||
final optionId = bloc.state.options[0].id;
|
final optionId = bloc.state.options[0].id;
|
||||||
bloc.add(SelectOptionCellEditorEvent.unSelectOption(optionId));
|
bloc.add(SelectOptionCellEditorEvent.unselectOption(optionId));
|
||||||
await gridResponseFuture();
|
await gridResponseFuture();
|
||||||
assert(bloc.state.selectedOptions.isEmpty);
|
assert(bloc.state.selectedOptions.isEmpty);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user