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