优化录制页性能
This commit is contained in:
@@ -68,7 +68,6 @@ class _ApiVideoCameraPreviewState extends State<ApiVideoCameraPreview> {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
widget.controller.stopPreview();
|
||||
widget.controller.removeWidgetListener(_widgetListener);
|
||||
widget.controller.removeEventsListener(_eventsListener);
|
||||
super.dispose();
|
||||
|
||||
@@ -26,6 +26,8 @@ class ApiVideoLiveStreamController {
|
||||
int get textureId => _textureId;
|
||||
|
||||
bool _isInitialized = false;
|
||||
Future<void>? _initializeFuture;
|
||||
Future<void>? _disposeFuture;
|
||||
|
||||
/// Gets the current state of the video player.
|
||||
bool get isInitialized => _isInitialized;
|
||||
@@ -68,7 +70,14 @@ class ApiVideoLiveStreamController {
|
||||
}
|
||||
|
||||
/// Creates a new live stream instance with initial audio and video configurations.
|
||||
Future<void> initialize() async {
|
||||
Future<void> initialize() {
|
||||
if (_disposeFuture != null) {
|
||||
throw StateError('Cannot initialize a disposed controller');
|
||||
}
|
||||
return _initializeFuture ??= _initialize();
|
||||
}
|
||||
|
||||
Future<void> _initialize() async {
|
||||
_textureId = await _platform.initialize() ?? kUninitializedTextureId;
|
||||
|
||||
_eventSubscription = _platform
|
||||
@@ -91,12 +100,23 @@ class ApiVideoLiveStreamController {
|
||||
}
|
||||
|
||||
/// Disposes the live stream instance.
|
||||
Future<void> dispose() async {
|
||||
Future<void> dispose() {
|
||||
return _disposeFuture ??= _dispose();
|
||||
}
|
||||
|
||||
Future<void> _dispose() async {
|
||||
try {
|
||||
await _initializeFuture;
|
||||
} catch (_) {
|
||||
// A partially initialized native view still needs to be disposed.
|
||||
}
|
||||
await _eventSubscription?.cancel();
|
||||
_eventSubscription = null;
|
||||
_eventsListeners.clear();
|
||||
_widgetListeners.clear();
|
||||
await _platform.dispose();
|
||||
return;
|
||||
_isInitialized = false;
|
||||
_textureId = kUninitializedTextureId;
|
||||
}
|
||||
|
||||
/// Sets new video parameters.
|
||||
|
||||
Reference in New Issue
Block a user