example_button.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import 'package:flutter/material.dart';
  2. import 'package:appflowy_popover/appflowy_popover.dart';
  3. class PopoverMenu extends StatefulWidget {
  4. @override
  5. State<StatefulWidget> createState() => _PopoverMenuState();
  6. }
  7. class _PopoverMenuState extends State<PopoverMenu> {
  8. final AppFlowyPopoverController popover = AppFlowyPopoverController();
  9. final AppFlowyPopoverController hoverPopover = AppFlowyPopoverController();
  10. @override
  11. Widget build(BuildContext context) {
  12. return Container(
  13. width: 200,
  14. height: 200,
  15. decoration: const BoxDecoration(color: Colors.yellow),
  16. child: ListView(children: [
  17. const Text("App"),
  18. AppFlowyPopover(
  19. controller: popover,
  20. offset: const Offset(10, 0),
  21. targetAnchor: Alignment.topRight,
  22. followerAnchor: Alignment.topLeft,
  23. popupBuilder: (BuildContext context) {
  24. return PopoverMenu();
  25. },
  26. child: TextButton(
  27. onPressed: () {
  28. popover.show();
  29. },
  30. onHover: (value) {
  31. if (value) {
  32. popover.show();
  33. } else {
  34. popover.close();
  35. }
  36. },
  37. child: const Text("First"),
  38. ),
  39. ),
  40. AppFlowyPopover(
  41. controller: hoverPopover,
  42. offset: const Offset(10, 0),
  43. targetAnchor: Alignment.topRight,
  44. followerAnchor: Alignment.topLeft,
  45. popupBuilder: (BuildContext context) {
  46. return PopoverMenu();
  47. },
  48. child: TextButton(
  49. onPressed: () {
  50. hoverPopover.show();
  51. },
  52. onHover: (value) {
  53. if (value) {
  54. hoverPopover.show();
  55. } else {
  56. hoverPopover.close();
  57. }
  58. },
  59. child: const Text("Second"),
  60. ),
  61. ),
  62. ]),
  63. );
  64. }
  65. }
  66. class ExampleButton extends StatelessWidget {
  67. final AppFlowyPopoverController _popover = AppFlowyPopoverController();
  68. final String label;
  69. final Alignment targetAnchor;
  70. final Alignment followerAnchor;
  71. final Offset? offset;
  72. ExampleButton({
  73. Key? key,
  74. required this.label,
  75. this.targetAnchor = Alignment.topLeft,
  76. this.followerAnchor = Alignment.topLeft,
  77. this.offset = Offset.zero,
  78. }) : super(key: key);
  79. @override
  80. Widget build(BuildContext context) {
  81. return AppFlowyPopover(
  82. controller: _popover,
  83. targetAnchor: targetAnchor,
  84. followerAnchor: followerAnchor,
  85. offset: offset,
  86. child: TextButton(
  87. onPressed: (() {
  88. _popover.show();
  89. }),
  90. child: Text(label),
  91. ),
  92. popupBuilder: (BuildContext context) {
  93. return PopoverMenu();
  94. },
  95. );
  96. }
  97. }