用Android的textview为例
一、创建提供出去的View
public class SDKView implements PlatformView {
private TextView textView;
public SDKView(Context context,String text) {
textView = new TextView(context);
textView.setText(text);
}
@Override
public View getView() {
return textView;
}
@Override
public void dispose() {
}
}
二、创建 PlatformViewFactory、其实类似RN的ViewManager
public class SDKViewFactory extends PlatformViewFactory {
private static final String TAG = "PlatformViewFactory";
public SDKViewFactory(MessageCodec<Object> createArgsCodec) {
super(createArgsCodec);
}
@Override
public PlatformView create(Context context, int i, Object o) {
Map<String,Object> param = (Map<String,Object>)o;
String text = (String)param.get("text");
Log.d(TAG, "create: "+text);
return new SDKView(context,text);
}
}
三、View注册方法。个人理解类似RNPackage。
public class SDKViewRegistrant {
public static void registerWith(PluginRegistry registry) {
final String key = "NLayout";
if (registry.hasPlugin(key)) return;
PluginRegistry.Registrar registrar = registry.registrarFor(key);
registrar.platformViewRegistry().registerViewFactory("widget.name", new SDKViewFactory(new StandardMessageCodec()));
}
}
四、在Activity初始化
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
FlutterMain.startInitialization(this);
super.onCreate(savedInstanceState);
SDKViewRegistrant.registerWith(this);
}
}
五、在Flutter 中调用
AndroidView(
viewType: 'widget.name',
creationParams: {'text': 'Flutter传给AndroidTextView 的参数'},
creationParamsCodec: StandardMessageCodec(),
)
自此 TextView已经成功在Flutter中显示。