clean up initialization listener in FilamentWidget

This commit is contained in:
Nick Fisher
2022-09-01 15:19:51 +10:00
parent d9470912ed
commit e07ffe8a75

View File

@@ -1,5 +1,6 @@
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'dart:async';
import 'filament_controller.dart';
typedef ResizeCallback = void Function(Size oldSize, Size newSize);
@@ -52,11 +53,14 @@ class FilamentWidget extends StatefulWidget {
class _FilamentWidgetState extends State<FilamentWidget> {
bool _ready = false;
StreamSubscription? _listener;
@override
void initState() {
widget.controller.onInitializationRequested.listen((_) {
_listener = widget.controller.onInitializationRequested.listen((_) {
if(_ready) {
return;
}
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
var size = ((context.findRenderObject()) as RenderBox).size;
print("Requesting texture creation for Filament of size $size");
@@ -66,12 +70,23 @@ class _FilamentWidgetState extends State<FilamentWidget> {
setState(() {
_ready = true;
});
_listener!.cancel();
_listener = null;
});
// we need to make sure a new frame is requested, otherwise the callback may not run
setState(() {
});
});
super.initState();
}
void dispose() {
_listener?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!_ready) {