don't use postFrameCallback in FilamentWidget resize

This commit is contained in:
Nick Fisher
2023-10-16 15:08:23 +08:00
parent a0cdbde89f
commit 390b3d063b

View File

@@ -106,8 +106,7 @@ class _FilamentWidgetState extends State<FilamentWidget> {
print("Size after resuming : $size"); print("Size after resuming : $size");
_height = size.height.ceil(); _height = size.height.ceil();
_width = size.width.ceil(); _width = size.width.ceil();
await widget.controller await widget.controller.createViewer(_width!, _height!);
.createViewer(_width!, _height!);
print("Created viewer Size after resuming"); print("Created viewer Size after resuming");
} }
} }
@@ -133,9 +132,8 @@ class _FilamentWidgetState extends State<FilamentWidget> {
_width = size.width.ceil(); _width = size.width.ceil();
_height = size.height.ceil(); _height = size.height.ceil();
try { try {
_textureDetails = await widget.controller _textureDetails =
.createViewer(_width!, _height!); await widget.controller.createViewer(_width!, _height!);
} catch (err) { } catch (err) {
setState(() { setState(() {
_error = err.toString(); _error = err.toString();
@@ -169,7 +167,9 @@ class _FilamentWidgetState extends State<FilamentWidget> {
// if no texture ID is available, display the [initial] widget (solid red by default) // if no texture ID is available, display the [initial] widget (solid red by default)
late Widget content; late Widget content;
if ( _textureDetails == null || _textureDetails!.height != _height || _textureDetails!.width != _width) { if (_textureDetails == null ||
_textureDetails!.height != _height ||
_textureDetails!.width != _width) {
content = widget.initial ?? Container(color: Colors.red); content = widget.initial ?? Container(color: Colors.red);
} else { } else {
content = Texture( content = Texture(
@@ -183,22 +183,21 @@ class _FilamentWidgetState extends State<FilamentWidget> {
// see [FilamentControllerFFI.resize] for an explanation of how we deal with resizing // see [FilamentControllerFFI.resize] for an explanation of how we deal with resizing
return ResizeObserver( return ResizeObserver(
onResized: (Size oldSize, Size newSize) async { onResized: (Size oldSize, Size newSize) async {
_resizeTimer?.cancel(); _resizeTimer?.cancel();
WidgetsBinding.instance.addPostFrameCallback((_) { _resizeTimer = Timer(const Duration(milliseconds: 50), () async {
_resizeTimer = Timer(const Duration(milliseconds:50), () async { var newWidth = newSize.width.ceil();
var newWidth = newSize.width.ceil(); var newHeight = newSize.height.ceil();
var newHeight = newSize.height.ceil(); try {
_textureDetails = await widget.controller _textureDetails =
.resize(newWidth, newHeight); await widget.controller.resize(newWidth, newHeight);
WidgetsBinding.instance.addPostFrameCallback((_) { setState(() {
setState(() { _width = newWidth;
_width = newWidth; _height = newHeight;
_height = newHeight;
});
}); });
}); } catch (err) {
print(err);
}
}); });
}, },
child: Stack(children: [ child: Stack(children: [