fix: provider issue in row document (#6289)

* fix: provider issue in row document

* fix: use bloc consumer
This commit is contained in:
Mathias Mogensen 2024-09-15 22:33:00 +02:00 committed by GitHub
parent 4df59ca421
commit f44fb02e4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 59 additions and 42 deletions

View File

@ -1252,7 +1252,7 @@ extension AppFlowyDatabaseTest on WidgetTester {
matching: find.byType(EventCard), matching: find.byType(EventCard),
); );
await tapButton(cards.at(index)); await tapButton(cards.at(index), milliseconds: 1000);
} }
void assertEventEditorOpen() => void assertEventEditorOpen() =>

View File

@ -1,6 +1,9 @@
import 'package:flutter/material.dart';
import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/database/grid/application/row/row_document_bloc.dart'; import 'package:appflowy/plugins/database/grid/application/row/row_document_bloc.dart';
import 'package:appflowy/plugins/document/application/document_bloc.dart'; import 'package:appflowy/plugins/document/application/document_bloc.dart';
import 'package:appflowy/plugins/document/presentation/editor_drop_manager.dart';
import 'package:appflowy/plugins/document/presentation/editor_page.dart'; import 'package:appflowy/plugins/document/presentation/editor_page.dart';
import 'package:appflowy/plugins/document/presentation/editor_style.dart'; import 'package:appflowy/plugins/document/presentation/editor_style.dart';
import 'package:appflowy/shared/flowy_error_page.dart'; import 'package:appflowy/shared/flowy_error_page.dart';
@ -8,8 +11,8 @@ import 'package:appflowy/workspace/application/view_info/view_info_bloc.dart';
import 'package:appflowy_backend/log.dart'; import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:provider/provider.dart';
class RowDocument extends StatelessWidget { class RowDocument extends StatelessWidget {
const RowDocument({ const RowDocument({
@ -65,56 +68,69 @@ class _RowEditor extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider( return ChangeNotifierProvider(
create: (context) => DocumentBloc(documentId: viewPB.id) // Due to how DropTarget works, there is no way to differentiate if an overlay is
..add(const DocumentEvent.initial()), // blocking the target visibly, so when we have an overlay with a drop target,
child: BlocListener<DocumentBloc, DocumentState>( // we should disable the drop target for the Editor, until it is closed.
listenWhen: (previous, current) => //
previous.isDocumentEmpty != current.isDocumentEmpty, // See FileBlockComponent for sample use.
listener: (_, state) { //
if (state.isDocumentEmpty != null) { // Relates to:
onIsEmptyChanged?.call(state.isDocumentEmpty!); // - https://github.com/MixinNetwork/flutter-plugins/issues/2
} // - https://github.com/MixinNetwork/flutter-plugins/issues/331
if (state.error != null) { //
Log.error('RowEditor error: ${state.error}'); create: (_) => EditorDropManagerState(),
} child: BlocProvider(
if (state.editorState == null) { create: (context) => DocumentBloc(documentId: viewPB.id)
Log.error('RowEditor unable to get editorState'); ..add(const DocumentEvent.initial()),
} child: BlocConsumer<DocumentBloc, DocumentState>(
}, listenWhen: (previous, current) =>
child: BlocBuilder<DocumentBloc, DocumentState>( previous.isDocumentEmpty != current.isDocumentEmpty,
listener: (_, state) {
if (state.isDocumentEmpty != null) {
onIsEmptyChanged?.call(state.isDocumentEmpty!);
}
if (state.error != null) {
Log.error('RowEditor error: ${state.error}');
}
if (state.editorState == null) {
Log.error('RowEditor unable to get editorState');
}
},
builder: (context, state) { builder: (context, state) {
if (state.isLoading) { if (state.isLoading) {
return const Center(child: CircularProgressIndicator.adaptive()); return const Center(
child: CircularProgressIndicator.adaptive(),
);
} }
final editorState = state.editorState; final editorState = state.editorState;
final error = state.error; final error = state.error;
if (error != null || editorState == null) { if (error != null || editorState == null) {
return Center( return Center(
child: AppFlowyErrorPage( child: AppFlowyErrorPage(error: error),
error: error,
),
); );
} }
return BlocProvider<ViewInfoBloc>( return Consumer<EditorDropManagerState>(
create: (context) => ViewInfoBloc(view: viewPB), builder: (_, dropState, __) => BlocProvider<ViewInfoBloc>(
child: IntrinsicHeight( create: (context) => ViewInfoBloc(view: viewPB),
child: Container( child: IntrinsicHeight(
constraints: const BoxConstraints(minHeight: 300), child: Container(
child: AppFlowyEditorPage( constraints: const BoxConstraints(minHeight: 300),
shrinkWrap: true, child: AppFlowyEditorPage(
autoFocus: false, shrinkWrap: true,
editorState: editorState, autoFocus: false,
styleCustomizer: EditorStyleCustomizer( editorState: editorState,
context: context, styleCustomizer: EditorStyleCustomizer(
padding: const EdgeInsets.only(left: 16, right: 54), context: context,
padding: const EdgeInsets.only(left: 16, right: 54),
),
showParagraphPlaceholder: (editorState, node) =>
editorState.document.isEmpty,
placeholderText: (node) =>
LocaleKeys.cardDetails_notesPlaceholder.tr(),
), ),
showParagraphPlaceholder: (editorState, node) =>
editorState.document.isEmpty,
placeholderText: (node) =>
LocaleKeys.cardDetails_notesPlaceholder.tr(),
), ),
), ),
), ),

View File

@ -1,5 +1,8 @@
import 'dart:ui' as ui; import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/document/application/document_bloc.dart'; import 'package:appflowy/plugins/document/application/document_bloc.dart';
import 'package:appflowy/plugins/document/presentation/editor_configuration.dart'; import 'package:appflowy/plugins/document/presentation/editor_configuration.dart';
@ -27,8 +30,6 @@ import 'package:collection/collection.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/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:universal_platform/universal_platform.dart'; import 'package:universal_platform/universal_platform.dart';