doc_page.dart 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/workspace/application/view/doc_watch_bloc.dart';
  3. import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart';
  4. import 'package:app_flowy/workspace/presentation/doc/editor_widget.dart';
  5. import 'package:flowy_infra_ui/widget/error_page.dart';
  6. import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:flutter_bloc/flutter_bloc.dart';
  9. class DocPage extends HomeStackWidget {
  10. const DocPage({Key? key, required DocPageStackView stackView})
  11. : super(key: key, stackView: stackView);
  12. @override
  13. _DocPageState createState() => _DocPageState();
  14. }
  15. class _DocPageState extends State<DocPage> {
  16. @override
  17. Widget build(BuildContext context) {
  18. final stackView = widget.stackView as DocPageStackView;
  19. return MultiBlocProvider(
  20. providers: [
  21. BlocProvider<DocWatchBloc>(
  22. create: (context) => getIt<DocWatchBloc>(param1: stackView.view.id)
  23. ..add(const DocWatchEvent.started())),
  24. ],
  25. child:
  26. BlocBuilder<DocWatchBloc, DocWatchState>(builder: (context, state) {
  27. assert(widget.stackView is DocPageStackView);
  28. return state.map(
  29. loading: (_) => const CircularProgressIndicator.adaptive(),
  30. loadDoc: (s) => EditorWdiget(doc: s.doc),
  31. loadFail: (s) => FlowyErrorPage(s.error.toString()),
  32. );
  33. }),
  34. );
  35. }
  36. @override
  37. void dispose() {
  38. super.dispose();
  39. }
  40. @override
  41. void deactivate() {
  42. super.deactivate();
  43. }
  44. @override
  45. void didUpdateWidget(covariant DocPage oldWidget) {
  46. super.didUpdateWidget(oldWidget);
  47. }
  48. }
  49. class DocPageStackView extends HomeStackView {
  50. final View view;
  51. DocPageStackView(this.view)
  52. : super(
  53. type: view.viewType,
  54. title: view.name,
  55. );
  56. @override
  57. List<Object> get props => [view.id, type];
  58. }