refresh_wrapper.dart 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_hbb/common.dart';
  3. import 'package:flutter_hbb/main.dart';
  4. import 'package:get/get.dart';
  5. class RefreshWrapper extends StatefulWidget {
  6. final Widget Function(BuildContext context) builder;
  7. const RefreshWrapper({super.key, required this.builder});
  8. @override
  9. State<RefreshWrapper> createState() => RefreshWrapperState();
  10. static RefreshWrapperState? of(BuildContext context) {
  11. final state = context.findAncestorStateOfType<RefreshWrapperState>();
  12. if (state == null) {
  13. debugPrint(
  14. "RefreshWrapperState not exists in this context, perhaps RefreshWrapper is not exists?");
  15. }
  16. return state;
  17. }
  18. }
  19. class RefreshWrapperState extends State<RefreshWrapper> {
  20. @override
  21. Widget build(BuildContext context) {
  22. return widget.builder(context);
  23. }
  24. rebuild() {
  25. debugPrint("=====Global State Rebuild (win-${kWindowId ?? 'main'})=====");
  26. if (Get.context != null) {
  27. (context as Element).visitChildren(_rebuildElement);
  28. }
  29. // Synchronize the window theme of the system.
  30. updateSystemWindowTheme();
  31. setState(() {});
  32. }
  33. /// set root tree dirty to trigger global rebuild
  34. void _rebuildElement(Element el) {
  35. el.markNeedsBuild();
  36. el.visitChildren(_rebuildElement);
  37. }
  38. }