clean up initialization listener in FilamentWidget
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/rendering.dart';
|
import 'package:flutter/rendering.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'dart:async';
|
||||||
import 'filament_controller.dart';
|
import 'filament_controller.dart';
|
||||||
|
|
||||||
typedef ResizeCallback = void Function(Size oldSize, Size newSize);
|
typedef ResizeCallback = void Function(Size oldSize, Size newSize);
|
||||||
@@ -52,11 +53,14 @@ class FilamentWidget extends StatefulWidget {
|
|||||||
|
|
||||||
class _FilamentWidgetState extends State<FilamentWidget> {
|
class _FilamentWidgetState extends State<FilamentWidget> {
|
||||||
bool _ready = false;
|
bool _ready = false;
|
||||||
|
StreamSubscription? _listener;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
_listener = widget.controller.onInitializationRequested.listen((_) {
|
||||||
widget.controller.onInitializationRequested.listen((_) {
|
if(_ready) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
|
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
|
||||||
var size = ((context.findRenderObject()) as RenderBox).size;
|
var size = ((context.findRenderObject()) as RenderBox).size;
|
||||||
print("Requesting texture creation for Filament of size $size");
|
print("Requesting texture creation for Filament of size $size");
|
||||||
@@ -66,12 +70,23 @@ class _FilamentWidgetState extends State<FilamentWidget> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
_ready = true;
|
_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();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dispose() {
|
||||||
|
_listener?.cancel();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (!_ready) {
|
if (!_ready) {
|
||||||
|
|||||||
Reference in New Issue
Block a user