board_toolbar.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import 'package:app_flowy/plugins/grid/application/field/field_controller.dart';
  2. import 'package:appflowy_popover/popover.dart';
  3. import 'package:flowy_infra/image.dart';
  4. import 'package:flowy_infra/theme.dart';
  5. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  6. import 'package:flowy_infra_ui/style_widget/icon_button.dart';
  7. import 'package:flutter/widgets.dart';
  8. import 'package:provider/provider.dart';
  9. import 'board_setting.dart';
  10. class BoardToolbarContext {
  11. final String viewId;
  12. final GridFieldController fieldController;
  13. BoardToolbarContext({
  14. required this.viewId,
  15. required this.fieldController,
  16. });
  17. }
  18. class BoardToolbar extends StatelessWidget {
  19. final BoardToolbarContext toolbarContext;
  20. const BoardToolbar({
  21. required this.toolbarContext,
  22. Key? key,
  23. }) : super(key: key);
  24. @override
  25. Widget build(BuildContext context) {
  26. return SizedBox(
  27. height: 40,
  28. child: Row(
  29. children: [
  30. _SettingButton(
  31. settingContext: BoardSettingContext.from(toolbarContext),
  32. ),
  33. ],
  34. ),
  35. );
  36. }
  37. }
  38. class _SettingButton extends StatefulWidget {
  39. final BoardSettingContext settingContext;
  40. const _SettingButton({required this.settingContext, Key? key})
  41. : super(key: key);
  42. @override
  43. State<_SettingButton> createState() => _SettingButtonState();
  44. }
  45. class _SettingButtonState extends State<_SettingButton> {
  46. late PopoverController popoverController;
  47. @override
  48. void initState() {
  49. popoverController = PopoverController();
  50. super.initState();
  51. }
  52. @override
  53. Widget build(BuildContext context) {
  54. final theme = context.read<AppTheme>();
  55. return AppFlowyPopover(
  56. controller: popoverController,
  57. constraints: BoxConstraints.loose(const Size(260, 400)),
  58. triggerActions: PopoverTriggerActionFlags.click,
  59. child: FlowyIconButton(
  60. hoverColor: theme.hover,
  61. width: 22,
  62. onPressed: () {},
  63. icon: Padding(
  64. padding: const EdgeInsets.symmetric(vertical: 3.0, horizontal: 3.0),
  65. child: svgWidget("grid/setting/setting", color: theme.iconColor),
  66. ),
  67. ),
  68. popupBuilder: (BuildContext popoverContext) {
  69. return BoardSettingListPopover(
  70. settingContext: widget.settingContext,
  71. popoverController: popoverController,
  72. );
  73. },
  74. );
  75. }
  76. }