(flutter) add zero size check in TextureWidget

This commit is contained in:
Nick Fisher
2025-06-02 12:58:53 +08:00
parent 1c500fe925
commit 32b6b1c227

View File

@@ -94,25 +94,29 @@ class _ThermionTextureWidgetState extends State<ThermionTextureWidget> {
var width = (size.width * dpr).ceil();
var height = (size.height * dpr).ceil();
_logger.info(
"Target texture dimensions ${width}x${height} (pixel ratio : $dpr)");
if (width > 0 && height > 0) {
_logger.info(
"Target texture dimensions ${width}x${height} (pixel ratio : $dpr)");
_texture = await ThermionFlutterPlatform.instance
.createTextureAndBindToView(widget.viewer.view, width, height);
_texture = await ThermionFlutterPlatform.instance
.createTextureAndBindToView(widget.viewer.view, width, height);
_logger.info(
"Actual texture dimensions ${_texture!.width}x${_texture!.height} (pixel ratio : $dpr)");
_logger.info(
"Actual texture dimensions ${_texture!.width}x${_texture!.height} (pixel ratio : $dpr)");
await widget.viewer.view.setViewport(_texture!.width, _texture!.height);
await widget.viewer.view.setViewport(_texture!.width, _texture!.height);
try {
await widget.onResize?.call(
Size(_texture!.width.toDouble(), _texture!.height.toDouble()),
widget.viewer.view,
dpr);
} catch (err, st) {
_logger.severe(err);
_logger.severe(st);
try {
await widget.onResize?.call(
Size(_texture!.width.toDouble(), _texture!.height.toDouble()),
widget.viewer.view,
dpr);
} catch (err, st) {
_logger.severe(err);
_logger.severe(st);
}
} else {
_logger.warning("Widget has zero width or height");
}
if (mounted) {
@@ -168,10 +172,10 @@ class _ThermionTextureWidgetState extends State<ThermionTextureWidget> {
_frameCompleter = Completer();
var headroom = _deadline.difference(DateTime.now());
if (headroom.inMilliseconds > 5) {
var waitForNs = headroom.inMicroseconds - 5000;
await Future.delayed(Duration(microseconds: waitForNs));
await Future.delayed(Duration(microseconds: waitForNs));
}
if (widget.viewer.rendering && _resizing.isEmpty) {
@@ -191,7 +195,7 @@ class _ThermionTextureWidgetState extends State<ThermionTextureWidget> {
}
_frameCompleter?.complete();
});
var deadlineInMicros = (widget.viewer.msPerFrame * 1000).toInt();
_deadline = DateTime.now().add(Duration(microseconds: deadlineInMicros));