美文网首页
Flutter iOS混编: image_picker 相机和相

Flutter iOS混编: image_picker 相机和相

作者: nevermore_子高 | 来源:发表于2020-07-24 15:04 被阅读0次

    Unhandled Exception: MissingPluginException(No implementation found for method pickImage on channelplugins.flutter.io/image_picker)

    当我们在flutter页面调取相机或者相册时失败,无任何反应.查看控制台日志发现报了上面的错误,很明显是因为找不到相关的方法,也就说pickImage这个方法注入失败了.

    那么为什么会失败呢?经过多次猜测和尝试,终于解决了问题! 我们在初始化FlutterViewController的时候不能直接 [FlutterViewController new]  而是使用[[FlutterViewController alloc] initWithEngine:engine nibName:nil bundle:nil] 来初始化或者使用[[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil]的方式.在使用后者时同时可以解决setInitialRoute路由失效的问题,此时FlutterDartProject是可以传nil的,那么FlutterDartProject这个类做了什么具体的工作目前我也不是很清楚,当然可以肯定的是默认创建了一个engine,因为flutter页面必然要FlutterEngine支撑的. 这其中的engine是我们需要重新初始化的engine.笔者猜测使用直接new的方式系统为我们创建一个engine,但是这个engine会在pickImage之后初始化,然后覆盖了pickImage的注入.这里只是猜测,如果知道具体机制的烦请告知!

    因此,在此可以得出结论[[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil] 方式初始化可以同时解决这两个问题. 但是FlutterDartProject有何作用或者弊端还请知道的同学指点一二.

    附engine初始化代码:

    - (FlutterEngine *)flutterEngine
    {
        if (_flutterEngine == nil) {
            _flutterEngine = [[FlutterEngine alloc] initWithName:@"io.flutter"];//name名字可以自定义
            [_flutterEngine run];
            [GeneratedPluginRegistrant registerWithRegistry:_flutterEngine];
        }
        return _flutterEngine;
    }

    相关文章

      网友评论

          本文标题:Flutter iOS混编: image_picker 相机和相

          本文链接:https://www.haomeiwen.com/subject/hbbjlktx.html