问题
Unhandled Exception: MissingPluginException(No implementation found for method pickImage on channel plugins.flutter.io/image_picker)
在我们使用第三方提供的Flutter或dart库时(比方说错误信息中的image picker图片选择库)有可能会出现上述错误,错误信息中提示找不到plugin,在 channel(plugins.flutter.io/image_picker) 中找不到 pickImage 方法。
解决办法
Flutter 版本是 pre 1.12 之前的,在MainActivity的 onCreate 方法中加上
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}
GeneratedPluginRegistrant是一个SDK生成的类,registerWith方法就是用来注册plugin的。
Flutter 版本已经更新到 pre 1.12 以后的,直接把 MainActivity 的超类 FlutterActivity 替换为 io.flutter.embedding.android.FlutterActivity
,这样就无须在调用GeneratedPluginRegistrant.registerWith(flutterEngine)
方法了,因为新的 FlutterActivity 类有一个方法
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
public class MainActivity extends FlutterActivity {
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
}
}
configureFlutterEngine 通过反射完成了对GeneratedPluginRegistrant.registerWith(flutterEngine)
的调用。