app_header.dart 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:app_flowy/workspace/application/app/app_bloc.dart';
  2. import 'package:expandable/expandable.dart';
  3. import 'package:flowy_infra_ui/style_widget/icon_button.dart';
  4. import 'package:flowy_infra_ui/widget/spacing.dart';
  5. import 'package:flowy_infra_ui/style_widget/text_button.dart';
  6. import 'package:flowy_sdk/protobuf/flowy-workspace/app_create.pb.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 'app_page.dart';
  11. class AppHeader extends StatelessWidget {
  12. final App app;
  13. const AppHeader(
  14. this.app, {
  15. Key? key,
  16. }) : super(key: key);
  17. @override
  18. Widget build(BuildContext context) {
  19. return Row(
  20. mainAxisAlignment: MainAxisAlignment.center,
  21. crossAxisAlignment: CrossAxisAlignment.center,
  22. children: [
  23. InkWell(
  24. onTap: () {
  25. ExpandableController.of(context,
  26. rebuildOnChange: false, required: true)
  27. ?.toggle();
  28. },
  29. child: ExpandableIcon(
  30. theme: ExpandableThemeData(
  31. expandIcon: Icons.arrow_drop_up,
  32. collapseIcon: Icons.arrow_drop_down,
  33. iconColor: Colors.black,
  34. iconSize: AppPageSize.expandedIconSize,
  35. iconPadding: EdgeInsets.zero,
  36. hasIcon: false,
  37. ),
  38. ),
  39. ),
  40. HSpace(AppPageSize.expandedIconRightSpace),
  41. Expanded(
  42. child: FlowyTextButton(
  43. app.name,
  44. onPressed: () {
  45. debugPrint('show app document');
  46. },
  47. ),
  48. ),
  49. // FlowyIconButton(
  50. // icon: const Icon(Icons.add),
  51. // onPressed: () {
  52. // debugPrint('add view');
  53. // },
  54. // ),
  55. PopupMenuButton(
  56. iconSize: 20,
  57. tooltip: 'create new view',
  58. icon: const Icon(Icons.add),
  59. padding: EdgeInsets.zero,
  60. onSelected: (viewType) =>
  61. _createView(viewType as ViewType, context),
  62. itemBuilder: (context) => menuItemBuilder())
  63. ],
  64. );
  65. }
  66. List<PopupMenuEntry> menuItemBuilder() {
  67. return ViewType.values
  68. .where((element) => element != ViewType.Blank)
  69. .map((ty) {
  70. return PopupMenuItem<ViewType>(
  71. value: ty,
  72. child: Row(
  73. children: <Widget>[Text(ty.name)],
  74. ));
  75. }).toList();
  76. }
  77. void _createView(ViewType viewType, BuildContext context) {
  78. context.read<AppBloc>().add(AppEvent.createView("New view", "", viewType));
  79. }
  80. }