doc_stack_page.dart 2.1 KB

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