app_header.dart 2.6 KB

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