Как обрабатывать поток платформы без плагина во Flutter из родной iOS? ⇐ IOS
-
Anonymous
Как обрабатывать поток платформы без плагина во Flutter из родной iOS?
Начиная с Flutter 3.13 вы могли заметить новые ошибки Flutter в зависимости от вызова метода канала вашей платформы (iOS):
[ОШИБКА: flutter/shell/common/shell.cc(1015)] Канал «CameraController» отправил сообщение из встроенного во Flutter в неплатформенный поток. Сообщения канала платформы должны отправляться в поток платформы. Невыполнение этого требования может привести к потере данных или сбоям и должно быть исправлено в коде плагина или приложения, создающего этот канал. См. https://docs.flutter.dev/platform-integ ... -threading для получения дополнительной информации. В документе единственный пример реализации TaskQueue для обработки многопоточности написан для концепции плагина:
публичный статический функциональный регистр (с регистратором: FlutterPluginRegistrar) { let TaskQueue = registrar.messenger.makeBackgroundTaskQueue() пусть канал = FlutterMethodChannel(name: "com.example.foo", двоичныйМессенджер: registrar.messenger(), кодек: FlutterStandardMethodCodec.sharedInstance, TaskQueue: TaskQueue) пусть экземпляр = MyPlugin() registrar.addMethodCallDelegate(экземпляр, канал: канал) } Однако я не использую плагины для своих каналов iOS, я инициализировал их все внутри AppDelegate следующим образом:
let flutterController : FlutterViewController = window?.rootViewController as! Флаттервиевконтроллер let cameraChannel = FlutterMethodChannel (имя: «CameraController»,binaryMessenger: flutterController.binaryMessenger) Затем я звоню со своего родного канала iOS при запуске приложения:
частная функция setupCameraConst() { DispatchQueue.main.async { канал!.invokeMethod("setAspectRatio", аргументы: аспектRatio) канал!.invokeMethod("setMinZoomLevel", аргументы: minZoom) канал!.invokeMethod("setMaxZoomLevel", аргументы: maxZoom) канал!.invokeMethod("setMinExposure", аргументы: minExposure) канал!.invokeMethod("setMaxExposure", аргументы: maxExposure) канал!.invokeMethod("setOnFrontCamera", аргументы: cameraPosition == .front) } } Итак, мой вопрос: как обрабатывать поток платформы без использования плагина?
Начиная с Flutter 3.13 вы могли заметить новые ошибки Flutter в зависимости от вызова метода канала вашей платформы (iOS):
[ОШИБКА: flutter/shell/common/shell.cc(1015)] Канал «CameraController» отправил сообщение из встроенного во Flutter в неплатформенный поток. Сообщения канала платформы должны отправляться в поток платформы. Невыполнение этого требования может привести к потере данных или сбоям и должно быть исправлено в коде плагина или приложения, создающего этот канал. См. https://docs.flutter.dev/platform-integ ... -threading для получения дополнительной информации. В документе единственный пример реализации TaskQueue для обработки многопоточности написан для концепции плагина:
публичный статический функциональный регистр (с регистратором: FlutterPluginRegistrar) { let TaskQueue = registrar.messenger.makeBackgroundTaskQueue() пусть канал = FlutterMethodChannel(name: "com.example.foo", двоичныйМессенджер: registrar.messenger(), кодек: FlutterStandardMethodCodec.sharedInstance, TaskQueue: TaskQueue) пусть экземпляр = MyPlugin() registrar.addMethodCallDelegate(экземпляр, канал: канал) } Однако я не использую плагины для своих каналов iOS, я инициализировал их все внутри AppDelegate следующим образом:
let flutterController : FlutterViewController = window?.rootViewController as! Флаттервиевконтроллер let cameraChannel = FlutterMethodChannel (имя: «CameraController»,binaryMessenger: flutterController.binaryMessenger) Затем я звоню со своего родного канала iOS при запуске приложения:
частная функция setupCameraConst() { DispatchQueue.main.async { канал!.invokeMethod("setAspectRatio", аргументы: аспектRatio) канал!.invokeMethod("setMinZoomLevel", аргументы: minZoom) канал!.invokeMethod("setMaxZoomLevel", аргументы: maxZoom) канал!.invokeMethod("setMinExposure", аргументы: minExposure) канал!.invokeMethod("setMaxExposure", аргументы: maxExposure) канал!.invokeMethod("setOnFrontCamera", аргументы: cameraPosition == .front) } } Итак, мой вопрос: как обрабатывать поток платформы без использования плагина?
Мобильная версия