mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-11-02 02:53:59 +00:00
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:
parent
0fd0483302
commit
1c6e709c82
@ -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),
|
||||
],
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
@ -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];
|
||||
}
|
||||
|
||||
@ -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));
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user