fix: board ui bugs (#6194)

* fix: date reminder indicator on board/calendar cards

* fix: stop restricting max lines of card title to two lines

* fix: don't allow multiline row titles

* fix: oops
This commit is contained in:
Richard Shiue 2024-09-05 13:55:37 +08:00 committed by GitHub
parent 0fd0483302
commit 1c6e709c82
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 80 additions and 27 deletions

View File

@ -1,7 +1,9 @@
import 'package:appflowy/generated/flowy_svgs.g.dart';
import 'package:appflowy/plugins/database/application/cell/cell_controller.dart';
import 'package:appflowy/plugins/database/application/cell/cell_controller_builder.dart';
import 'package:appflowy/plugins/database/application/database_controller.dart';
import 'package:appflowy/plugins/database/application/cell/bloc/date_cell_bloc.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@ -44,7 +46,9 @@ class _DateCellState extends State<DateCardCell> {
);
},
child: BlocBuilder<DateCellBloc, DateCellState>(
buildWhen: (previous, current) => previous.dateStr != current.dateStr,
buildWhen: (previous, current) =>
previous.dateStr != current.dateStr ||
previous.data != current.data,
builder: (context, state) {
if (state.dateStr.isEmpty) {
return const SizedBox.shrink();
@ -53,9 +57,20 @@ class _DateCellState extends State<DateCardCell> {
return Container(
alignment: Alignment.centerLeft,
padding: widget.style.padding,
child: Text(
state.dateStr,
style: widget.style.textStyle,
child: Row(
children: [
Flexible(
child: Text(
state.dateStr,
style: widget.style.textStyle,
overflow: TextOverflow.ellipsis,
),
),
if (state.data?.reminderId.isNotEmpty ?? false) ...[
const HSpace(4),
const FlowySvg(FlowySvgs.clock_alarm_s),
],
],
),
);
},

View File

@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -12,7 +13,6 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../editable_cell_builder.dart';
import 'card_cell.dart';
class TextCardCellStyle extends CardCellStyle {
@ -209,12 +209,15 @@ class _TextCellState extends State<TextCardCell> {
bindings: {
const SingleActivator(LogicalKeyboardKey.escape): () =>
focusNode.unfocus(),
const SimpleActivator(LogicalKeyboardKey.enter): () =>
focusNode.unfocus(),
},
child: TextField(
controller: _textEditingController,
focusNode: focusNode,
onEditingComplete: () => focusNode.unfocus(),
maxLines: isEditing ? null : 2,
onSubmitted: (_) => focusNode.unfocus(),
maxLines: null,
minLines: 1,
textInputAction: TextInputAction.done,
readOnly: !isEditing,
@ -240,3 +243,27 @@ class _TextCellState extends State<TextCardCell> {
);
}
}
class SimpleActivator with Diagnosticable implements ShortcutActivator {
const SimpleActivator(
this.trigger, {
this.includeRepeats = true,
});
final LogicalKeyboardKey trigger;
final bool includeRepeats;
@override
bool accepts(KeyEvent event, HardwareKeyboard state) {
return (event is KeyDownEvent ||
(includeRepeats && event is KeyRepeatEvent)) &&
trigger == event.logicalKey;
}
@override
String debugDescribeKeys() =>
kDebugMode ? trigger.debugName ?? trigger.toStringShort() : '';
@override
Iterable<LogicalKeyboardKey>? get triggers => <LogicalKeyboardKey>[trigger];
}

View File

@ -1,4 +1,6 @@
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:appflowy/generated/flowy_svgs.g.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
@ -7,6 +9,7 @@ import 'package:appflowy/plugins/database/application/cell/cell_controller.dart'
import 'package:appflowy/plugins/database/application/database_controller.dart';
import 'package:appflowy/plugins/database/application/row/row_banner_bloc.dart';
import 'package:appflowy/plugins/database/application/row/row_controller.dart';
import 'package:appflowy/plugins/database/widgets/cell/card_cell_skeleton/text_card_cell.dart';
import 'package:appflowy/plugins/database/widgets/cell/editable_cell_builder.dart';
import 'package:appflowy/plugins/database/widgets/cell/editable_cell_skeleton/text.dart';
import 'package:appflowy/plugins/database/widgets/row/cells/cell_container.dart';
@ -14,7 +17,6 @@ import 'package:appflowy/plugins/database/widgets/row/row_action.dart';
import 'package:appflowy/workspace/presentation/settings/widgets/emoji_picker/emoji_picker.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
const _kBannerActionHeight = 40.0;
@ -287,27 +289,36 @@ class _TitleSkin extends IEditableTextCellSkin {
FocusNode focusNode,
TextEditingController textEditingController,
) {
return TextField(
controller: textEditingController,
focusNode: focusNode,
autofocus: true,
style: Theme.of(context).textTheme.bodyMedium?.copyWith(fontSize: 28),
decoration: InputDecoration(
contentPadding: EdgeInsets.zero,
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
errorBorder: InputBorder.none,
disabledBorder: InputBorder.none,
hintText: LocaleKeys.grid_row_titlePlaceholder.tr(),
isDense: true,
isCollapsed: true,
),
onChanged: (text) {
if (textEditingController.value.composing.isCollapsed) {
bloc.add(TextCellEvent.updateText(text));
}
return CallbackShortcuts(
bindings: {
const SingleActivator(LogicalKeyboardKey.escape): () =>
focusNode.unfocus(),
const SimpleActivator(LogicalKeyboardKey.enter): () =>
focusNode.unfocus(),
},
child: TextField(
controller: textEditingController,
focusNode: focusNode,
autofocus: true,
style: Theme.of(context).textTheme.bodyMedium?.copyWith(fontSize: 28),
maxLines: null,
decoration: InputDecoration(
contentPadding: EdgeInsets.zero,
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
errorBorder: InputBorder.none,
disabledBorder: InputBorder.none,
hintText: LocaleKeys.grid_row_titlePlaceholder.tr(),
isDense: true,
isCollapsed: true,
),
onChanged: (text) {
if (textEditingController.value.composing.isCollapsed) {
bloc.add(TextCellEvent.updateText(text));
}
},
),
);
}
}