diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor_bloc.dart index f60fa887b7..ed7f5dd10d 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor_bloc.dart @@ -41,6 +41,7 @@ class ChecklistCellEditorBloc _createOption(optionName); emit( state.copyWith( + createOption: Some(optionName), predicate: '', ), ); diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart index 55a7fc7a1a..52f84155ba 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart @@ -54,36 +54,7 @@ class _SliverChecklistProgressBarDelegate double shrinkOffset, bool overlapsContent, ) { - return BlocBuilder( - builder: (context, state) { - return Padding( - padding: GridSize.typeOptionContentInsets, - child: Column( - children: [ - FlowyTextField( - autoClearWhenDone: true, - submitOnLeave: true, - hintText: LocaleKeys.grid_checklist_panelTitle.tr(), - onChanged: (text) { - context - .read() - .add(ChecklistCellEditorEvent.filterOption(text)); - }, - onSubmitted: (text) { - context - .read() - .add(ChecklistCellEditorEvent.newOption(text)); - }, - ), - Padding( - padding: const EdgeInsets.only(top: 6.0), - child: ChecklistProgressBar(percent: state.percent), - ), - ], - ), - ); - }, - ); + return const _AutoFocusTextField(); } @override @@ -97,3 +68,62 @@ class _SliverChecklistProgressBarDelegate return true; } } + +class _AutoFocusTextField extends StatefulWidget { + const _AutoFocusTextField(); + + @override + State<_AutoFocusTextField> createState() => _AutoFocusTextFieldState(); +} + +class _AutoFocusTextFieldState extends State<_AutoFocusTextField> { + final _focusNode = FocusNode(); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return BlocListener( + listenWhen: (previous, current) => + previous.createOption != current.createOption, + listener: (context, state) { + if (_focusNode.canRequestFocus) { + _focusNode.requestFocus(); + } + }, + child: Container( + color: Theme.of(context).cardColor, + child: Padding( + padding: GridSize.typeOptionContentInsets, + child: Column( + children: [ + FlowyTextField( + autoFocus: true, + focusNode: _focusNode, + autoClearWhenDone: true, + submitOnLeave: true, + hintText: LocaleKeys.grid_checklist_panelTitle.tr(), + onChanged: (text) { + context + .read() + .add(ChecklistCellEditorEvent.filterOption(text)); + }, + onSubmitted: (text) { + context + .read() + .add(ChecklistCellEditorEvent.newOption(text)); + }, + ), + Padding( + padding: const EdgeInsets.only(top: 6.0), + child: ChecklistProgressBar(percent: state.percent), + ), + ], + ), + ), + ), + ); + }, + ); + } +}