board_toolbar.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:app_flowy/plugins/grid/application/field/field_controller.dart';
  2. import 'package:appflowy_popover/appflowy_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. child: FlowyIconButton(
  59. hoverColor: theme.hover,
  60. width: 22,
  61. onPressed: () {},
  62. icon: Padding(
  63. padding: const EdgeInsets.symmetric(vertical: 3.0, horizontal: 3.0),
  64. child: svgWidget("grid/setting/setting", color: theme.iconColor),
  65. ),
  66. ),
  67. popupBuilder: (BuildContext popoverContext) {
  68. return BoardSettingListPopover(
  69. settingContext: widget.settingContext,
  70. popoverController: popoverController,
  71. );
  72. },
  73. );
  74. }
  75. }