doc_page.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. import 'package:flowy_infra_ui/style_widget/progress_indicator.dart';
  10. class DocPage extends HomeStackWidget {
  11. const DocPage({Key? key, required DocPageStackView stackView})
  12. : super(key: key, stackView: stackView);
  13. @override
  14. _DocPageState createState() => _DocPageState();
  15. }
  16. class _DocPageState extends State<DocPage> {
  17. @override
  18. Widget build(BuildContext context) {
  19. final stackView = widget.stackView as DocPageStackView;
  20. return MultiBlocProvider(
  21. providers: [
  22. BlocProvider<DocWatchBloc>(
  23. create: (context) => getIt<DocWatchBloc>(param1: stackView.view.id)
  24. ..add(const DocWatchEvent.started())),
  25. ],
  26. child:
  27. BlocBuilder<DocWatchBloc, DocWatchState>(builder: (context, state) {
  28. assert(widget.stackView is DocPageStackView);
  29. return state.map(
  30. loading: (_) => const FlowyProgressIndicator(),
  31. loadDoc: (s) => EditorWdiget(doc: s.doc),
  32. loadFail: (s) => FlowyErrorPage(s.error.toString()),
  33. );
  34. }),
  35. );
  36. }
  37. @override
  38. void dispose() {
  39. super.dispose();
  40. }
  41. @override
  42. void deactivate() {
  43. super.deactivate();
  44. }
  45. @override
  46. void didUpdateWidget(covariant DocPage oldWidget) {
  47. super.didUpdateWidget(oldWidget);
  48. }
  49. }
  50. class DocPageStackView extends HomeStackView {
  51. final View view;
  52. DocPageStackView(this.view)
  53. : super(
  54. type: view.viewType,
  55. title: view.name,
  56. );
  57. @override
  58. List<Object> get props => [view.id, type];
  59. }