doc_stack_page.dart 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/workspace/application/doc/doc_bloc.dart';
  3. import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart';
  4. import 'package:app_flowy/workspace/presentation/doc/doc_page.dart';
  5. import 'package:flowy_log/flowy_log.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 DocStackPage extends HomeStackWidget {
  12. const DocStackPage({Key? key, required DocPageStackView stackView})
  13. : super(key: key, stackView: stackView);
  14. @override
  15. _DocStackPageState createState() => _DocStackPageState();
  16. }
  17. class _DocStackPageState extends State<DocStackPage> {
  18. @override
  19. Widget build(BuildContext context) {
  20. final stackView = widget.stackView as DocPageStackView;
  21. return MultiBlocProvider(
  22. providers: [
  23. BlocProvider<DocBloc>(
  24. create: (context) => getIt<DocBloc>(param1: stackView.view.id)
  25. ..add(const DocEvent.loadDoc())),
  26. ],
  27. child: BlocBuilder<DocBloc, DocState>(builder: (context, state) {
  28. assert(widget.stackView is DocPageStackView);
  29. return state.map(
  30. loading: (_) => const FlowyProgressIndicator(),
  31. loadDoc: (s) => DocPage(doc: s.doc),
  32. loadFail: (s) {
  33. Log.error("$s");
  34. return FlowyErrorPage(s.error.toString());
  35. },
  36. );
  37. }),
  38. );
  39. }
  40. @override
  41. void dispose() {
  42. super.dispose();
  43. }
  44. @override
  45. void deactivate() {
  46. super.deactivate();
  47. }
  48. @override
  49. void didUpdateWidget(covariant DocStackPage oldWidget) {
  50. super.didUpdateWidget(oldWidget);
  51. }
  52. }
  53. class DocPageStackView extends HomeStackView {
  54. final View view;
  55. DocPageStackView(this.view)
  56. : super(
  57. type: view.viewType,
  58. title: view.name,
  59. identifier: view.id,
  60. );
  61. @override
  62. List<Object> get props => [view.id, type];
  63. }