Как показать собственные представления iOS в приложении Flutter?

В настоящее время я работаю над проектом, в котором мне нужно реализовать графический фреймворк, написанный для Android и iOS; тем не менее, я пишу приложение, используя Flutter/Dart, и до сих пор не могу найти какой-либо способ для отображения собственных представлений iOS в приложении Flutter. Я нашел модуль, написанный для Android, который утверждает, что делает это ( сообщение в блоге), и мне любопытно, если кто-нибудь знает какие-либо модули или методы, которые могут достичь этого для iOS.

Я знаю, что Flutter имеет функцию ChannelMethod, но это не решение - по крайней мере, насколько я понимаю, ChannelMethods может передавать сообщения, относящиеся к платформе, но это не помогает мне показывать модуль для платформы в приложении Flutter.

Мне также пришло в голову жестко закодировать эквивалентный графический интерфейс во Flutter, а затем использовать ChannelMethods для передачи необходимых данных, но это не идеально, потому что кажется, что не все данные, которые мне понадобятся от плагина, легко доступны. Я действительно ищу способ показать UIView во Флаттере.

Есть ли способ показать родное представление iOS в приложении Flutter? В качестве альтернативы, есть ли способ перейти на iOS viewController из приложения Flutter?

0 ответов

Вы можете использовать представления платформы Flutter для отображения собственных виджетов платформы в приложении Flutter.

В образце, приведенном в документации, FLNativeViewFactory создает представление платформы и предоставляет ссылку на UIView. Представления iOS можно добавить, используя предоставленные UIView Справка.

Использование Swift

class FLNativeView: NSObject, FlutterPlatformView {
  init(
    frame: CGRect,
    viewIdentifier viewId: Int64,
    arguments args: Any?,
    binaryMessenger messenger: FlutterBinaryMessenger?
  ){
    _view = UIView()
    super.init()
    // iOS views can be added here
  }
}

Использование Objective-C

@implementation FLNativeView {
   UIView *_view;
}
- (instancetype)initWithFrame:(CGRect)frame
               viewIdentifier:(int64_t)viewId
                    arguments:(id _Nullable)args
              binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
  if (self = [super init]) {
    _view = [[UIView alloc] init];
  }
  // iOS views can be added here
  return self;
}

@end
Другие вопросы по тегам