board_toolbar.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import 'package:app_flowy/plugins/grid/application/field/field_controller.dart';
  2. import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart';
  3. import 'package:appflowy_popover/appflowy_popover.dart';
  4. import 'package:easy_localization/easy_localization.dart';
  5. import 'package:flowy_infra/theme_extension.dart';
  6. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  7. import 'package:flowy_infra_ui/style_widget/button.dart';
  8. import 'package:flutter/material.dart';
  9. import '../../../../generated/locale_keys.g.dart';
  10. import 'board_setting.dart';
  11. class BoardToolbarContext {
  12. final String viewId;
  13. final GridFieldController fieldController;
  14. BoardToolbarContext({
  15. required this.viewId,
  16. required this.fieldController,
  17. });
  18. }
  19. class BoardToolbar extends StatelessWidget {
  20. final BoardToolbarContext toolbarContext;
  21. const BoardToolbar({
  22. required this.toolbarContext,
  23. Key? key,
  24. }) : super(key: key);
  25. @override
  26. Widget build(BuildContext context) {
  27. return SizedBox(
  28. height: 40,
  29. child: Row(
  30. children: [
  31. const Spacer(),
  32. _SettingButton(
  33. settingContext: BoardSettingContext.from(toolbarContext),
  34. ),
  35. ],
  36. ),
  37. );
  38. }
  39. }
  40. class _SettingButton extends StatefulWidget {
  41. final BoardSettingContext settingContext;
  42. const _SettingButton({required this.settingContext, Key? key})
  43. : super(key: key);
  44. @override
  45. State<_SettingButton> createState() => _SettingButtonState();
  46. }
  47. class _SettingButtonState extends State<_SettingButton> {
  48. late PopoverController popoverController;
  49. @override
  50. void initState() {
  51. popoverController = PopoverController();
  52. super.initState();
  53. }
  54. @override
  55. Widget build(BuildContext context) {
  56. return AppFlowyPopover(
  57. controller: popoverController,
  58. direction: PopoverDirection.leftWithTopAligned,
  59. triggerActions: PopoverTriggerFlags.none,
  60. constraints: BoxConstraints.loose(const Size(260, 400)),
  61. margin: EdgeInsets.zero,
  62. child: FlowyTextButton(
  63. LocaleKeys.settings_title.tr(),
  64. fillColor: Colors.transparent,
  65. hoverColor: AFThemeExtension.of(context).lightGreyHover,
  66. padding: GridSize.typeOptionContentInsets,
  67. onPressed: () {
  68. popoverController.show();
  69. },
  70. ),
  71. popupBuilder: (BuildContext popoverContext) {
  72. return BoardSettingListPopover(
  73. settingContext: widget.settingContext,
  74. popoverController: popoverController,
  75. );
  76. },
  77. );
  78. }
  79. }