feat: replace forceAppUpdate with customed reloadWindow

This commit is contained in:
Kingtous
2022-10-26 14:39:13 +08:00
parent ee796b7a06
commit 2301d09303
13 changed files with 214 additions and 117 deletions

View File

@@ -0,0 +1,41 @@
import 'package:flutter/material.dart';
import 'package:flutter_hbb/main.dart';
import 'package:get/get.dart';
class RefreshWrapper extends StatefulWidget {
final Widget Function(BuildContext context) builder;
const RefreshWrapper({super.key, required this.builder});
@override
State<RefreshWrapper> createState() => RefreshWrapperState();
static RefreshWrapperState? of(BuildContext context) {
final state = context.findAncestorStateOfType<RefreshWrapperState>();
if (state == null) {
debugPrint(
"RefreshWrapperState not exists in this context, perhaps RefreshWrapper is not exists?");
}
return state;
}
}
class RefreshWrapperState extends State<RefreshWrapper> {
@override
Widget build(BuildContext context) {
return widget.builder(context);
}
rebuild() {
debugPrint("=====Global State Rebuild (win-${windowId ?? 'main'})=====");
if (Get.context != null) {
(context as Element).visitChildren(_rebuildElement);
}
setState(() {});
}
/// set root tree dirty to trigger global rebuild
void _rebuildElement(Element el) {
el.markNeedsBuild();
el.visitChildren(_rebuildElement);
}
}