日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Flutter中嵌入Android 原生TextView實例教程

瀏覽:17日期:2022-09-22 15:17:06

前言

本篇文章 中寫到的是 flutter 調用了Android 原生的 TextView 案例

添加原生組件的流程基本上可以描述為:

1 android 端實現原生組件PlatformView提供原生view

2 android 端創建PlatformViewFactory用于生成PlatformView

3 android 端創建FlutterPlugin用于注冊原生組件

4 flutter 平臺嵌入 原生view

1 創建原生組件

創建在fLutter工程時會生成幾個文件夾,lib是放flutter工程代碼,android和ios文件夾分別是對應的雙平臺的原生工程。

在這里直接打開Android工程目錄,項目默認生成了GeneratedPluginRegistrant和MainActivity兩個文件,GeneratedPluginRegistrant不要動,GeneratedPluginRegistrant是flutter中配制使用其他插件時,程序在編譯時自動進行插件注冊使用的類。

在MainActivity的包下新建自定義View,Flutter的原生View不能直接繼承自View,需要實現提供的PlatformView接口:

public class TestTextView implements PlatformView r{private final TextView mTestTextView;/** * * @param context * @param messenger * @param id * @param params 初始化時 flutter 傳遞過來的參數 */TestTextView(Context context, BinaryMessenger messenger, int id, Map<String, Object> params) {//創建 TextViewTextView lTextView = new TextView(context);lTextView.setText('Android的原生TextView');this.mTestTextView = lTextView;//flutter 傳遞過來的參數if (params!=null&&params.containsKey('content')) {String myContent = (String) params.get('content');lTextView.setText(myContent);}}@Overridepublic View getView() {return mTestTextView;}@Overridepublic void dispose() {}}

2 創建PlatformViewFactory

import android.content.Context;import java.util.Map;import io.flutter.plugin.common.BinaryMessenger;import io.flutter.plugin.common.StandardMessageCodec;import io.flutter.plugin.platform.PlatformView;import io.flutter.plugin.platform.PlatformViewFactory;public class TestViewFactory extends PlatformViewFactory {private final BinaryMessenger messenger;public TestViewFactory(BinaryMessenger messenger) {super(StandardMessageCodec.INSTANCE);this.messenger = messenger;}/** * * @param context * @param id * @param args args是由Flutter傳過來的自定義參數 * @return */@SuppressWarnings('unchecked')@Overridepublic PlatformView create(Context context, int id, Object args) {//flutter 傳遞過來的參數Map<String, Object> params = (Map<String, Object>) args;//創建 TestTextViewreturn new TestTextView(context, messenger, id, params);}

3 創建Plugin并在ManActivity中注冊插件

/** * flutter 調用 android 原生view * */public class TestFluttertoAndroidTextViewPlugin {public static void registerWith(PluginRegistry registry) {//防止多次注冊final String key = TestFluttertoAndroidTextViewPlugin.class.getCanonicalName();if (registry.hasPlugin(key)) return;//初始化 PluginRegistryPluginRegistry.Registrar registrar = registry.registrarFor(key);//設置標識registrar.platformViewRegistry().registerViewFactory('com.flutter_to_native_test_textview', new TestViewFactory(registrar.messenger()));}}

MainActivity 中注冊

import android.os.Bundleimport io.flutter.app.FlutterActivityimport io.flutter.plugins.FlutterToAndroidPluginsimport io.flutter.plugins.GeneratedPluginRegistrantclass MainActivity: FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //flutter 項目工程中默認生成的 GeneratedPluginRegistrant.registerWith(this) //這是我們新創建的插件 TestFluttertoAndroidTextViewPlugin.registerWith(this) } override fun onDestroy() { super.onDestroy() }}

4 flutter頁面中嵌入android 原生Textview

4.1 最簡單的調用

Flutter中嵌入Android 原生TextView實例教程

//這里設置的 viewType值與 android 中插件注冊的標識 一至//registrar.platformViewRegistry().registerViewFactory('com.flutter_to_native_test_textview', new TestViewFactory(registrar.messenger()));mTextWidget = Container( height: 200, child: AndroidView( //設置標識 viewType: 'com.flutter_to_native_test_textview', ), );@override Widget build(BuildContext context) { // TODO: implement build return Scaffold( appBar: appBar, //顯示的頁面 body: mTextWidget, ); }

4.2 flutter 調用 原生view并傳參數

Flutter中嵌入Android 原生TextView實例教程

mTextWidget = Container( height: 200, child: AndroidView( //標識 viewType: 'com.flutter_to_native_test_textview', creationParams: { 'content': 'flutter 傳入的文本內容', }, //參數的編碼方式 creationParamsCodec: const StandardMessageCodec(), ), );

android 原生中的接收(只會接收一次)

... ...TestTextView(Context context, BinaryMessenger messenger, int id, Map<String, Object> params) {... ..//flutter 傳遞過來的參數if (params!=null&&!params.isEmpty()&&params.containsKey('content')) {String myContent = (String) params.get('content');lTextView.setText(myContent);}... ...}

4.3 flutter 更新 原生view 中的數據

原生組件初始化的參數并不會隨著setState重復賦值,可以通過MethodCall來實現更新數據。

首先讓原生view組件實現MethodCallHandler接口:

public class TestTextView implements PlatformView , MethodChannel.MethodCallHandler{private final TextView mTestTextView;TestTextView(Context context, BinaryMessenger messenger, int id, Map<String, Object> params) {... ...//com.flutter_to_native_test_view_ 是更新數據的通信標識MethodChannel methodChannel = new MethodChannel(messenger, 'com.flutter_to_native_test_textview_' + id);methodChannel.setMethodCallHandler(this);}... ...@Overridepublic void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { //updateText 是flutter 中調用的方法名稱,可以隨意定義if ('updateText'.equals(methodCall.method)) {String text = (String) methodCall.arguments;this.mTestTextView .setText(text);//對flutter 的回調result.success(null);}}}

flutter 中調用 android 原生view

MethodChannel _channel; int viewId=0;

mTextWidget = Container( height: 200, child: AndroidView( //標識 viewType: 'com.flutter_to_native_test_textview', creationParams: { 'content': 'flutter 傳入的文本內容', }, //參數的編碼方式 creationParamsCodec: const StandardMessageCodec(), //view創建完成時的回調 onPlatformViewCreated: (id) { viewId = id; }, ), );

更新數據

//這里設置的標識 MethodChannel(’com.flutter_to_native_test_textview_$viewId’);// 與android MethodChannel methodChannel = new MethodChannel(messenger, 'com.flutter_to_native_test_textview_' + id); 中注冊的一至void clickUpdtae(){_channel = new MethodChannel(’com.flutter_to_native_test_textview_$viewId’); updateTextView();}//這里的標識 updateText//與android 中接收消息的方法中//if ('updateText'.equals(methodCall.method)) {...} 一至void updateTextView() async { return _channel.invokeMethod(’updateText’, '更新內容'); }

通過onPlatformViewCreated回調,監聽原始組件成功創建,并能夠在回調方法的參數中拿到當前組件的id,這個id是系統隨機分配的,然后通過這個分配的id加上我們的組件名稱最為前綴創建一個和組件通訊的MethodChannel,拿到channel對象之后就可以通過invokeMethod方法向原生組件發送消息了,這里這里調用的是‘updateText’這個方法,參數是一個String

總結

到此這篇關于Flutter中嵌入Android 原生TextView實例教程的文章就介紹到這了,更多相關Flutter嵌入Android 原生TextView內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产综合色区在线观看| 亚洲人妖在线| 亚洲特级毛片| 国产精选在线| 国产福利资源一区| 亚洲一区欧美| 国产一区二区精品| 激情婷婷亚洲| 色老板在线视频一区二区| 欧美激情aⅴ一区二区三区 | 丝袜a∨在线一区二区三区不卡| 欧美另类中文字幕| 亚洲国产不卡| 午夜国产一区二区| 青青久久av| 亚洲1234区| 日韩中文字幕高清在线观看| 国产日韩中文在线中文字幕| 国产精品一区二区精品视频观看| 国产精品免费精品自在线观看| 里番精品3d一二三区| 日本精品国产| 欧美激情麻豆| 日韩激情一区| 午夜在线播放视频欧美| 亚洲精品亚洲人成在线观看| 欧美午夜网站| 亚洲天堂av影院| 日韩精品免费一区二区在线观看| 久久久久久夜| 神马久久午夜| 久久成人精品| 四虎8848精品成人免费网站| 伊人久久婷婷| 精品视频97| 美国欧美日韩国产在线播放| 国产一区二区三区久久| 老司机精品久久| 中文在线免费视频| 热久久久久久| 日韩午夜免费| 九九色在线视频| 国产伦精品一区二区三区千人斩| 免费在线看一区| 国产一区三区在线播放| 一区二区国产精品| 欧美日韩第一| 日韩精品专区| 欧美国产专区| 国产精品任我爽爆在线播放| 久久人人99| 精品国产一区二区三区av片| 日本综合视频| 综合激情一区| 亚洲一区日韩在线| 午夜欧美视频| 亚洲91视频| 久久久久国产精品一区三寸 | 美女久久一区| 国产精品调教| 日韩av中文字幕一区| 久久性天堂网| 日韩视频久久| 欧美日韩国产精品一区二区亚洲| 亚洲精品国产嫩草在线观看| 国产精品亚洲片在线播放| 日韩精品一区二区三区免费视频 | 欧美亚洲国产日韩| 老色鬼久久亚洲一区二区| 欧美1区免费| 日韩网站中文字幕| 欧美一级精品| 亚洲福利久久| 欧美日韩国产高清电影| 好看不卡的中文字幕| 亚洲欧美日本视频在线观看| 免费视频最近日韩| 午夜天堂精品久久久久| 国产欧美激情| 日韩一区欧美| 亚洲一区日本| 久久国产三级| 色婷婷狠狠五月综合天色拍| 亚洲一区成人| 免费亚洲婷婷| 成人久久一区| 欧美一区不卡| 亚洲手机在线| 欧美成a人片免费观看久久五月天| 免费国产自线拍一欧美视频| 91综合久久爱com| av高清不卡| 久久国产免费看| 在线一区欧美| 日韩一区三区| 国产精品成人自拍| 国产精品美女久久久浪潮软件| 亚洲黄色中文字幕| 久久亚洲欧美| 卡一精品卡二卡三网站乱码| 欧美一区久久久| 首页国产欧美日韩丝袜| 国产+成+人+亚洲欧洲在线| 极品av在线| 在线观看亚洲精品福利片| 国产精品日韩精品中文字幕| 国产精品yjizz视频网| 蜜桃一区二区三区| 国产日产精品_国产精品毛片 | 亚洲激情av| 美女精品一区| 精品日本视频| 蜜桃视频一区二区三区| 国产精品www994| 午夜国产一区二区| 国产剧情在线观看一区| 香蕉精品视频在线观看| 国产美女久久| 亚洲激情av| 国内自拍视频一区二区三区| 国产精品视频一区视频二区| 亚洲二区精品| 亚洲字幕久久| 亚洲免费观看高清完整版在线观| 久久毛片亚洲| 蜜臀久久99精品久久久久久9 | 一区在线视频观看| 国产探花在线精品| 丝袜美腿一区二区三区| 久久毛片亚洲| 国产精品亚洲产品| 国产精品日韩久久久| 不卡一二三区| 日本美女一区| av在线最新| 精品黄色一级片| 天海翼亚洲一区二区三区| 尤物网精品视频| 欧美日韩国产在线观看网站| 麻豆久久一区| 久久久精品日韩| 久久九九国产| 欧美日中文字幕| 日韩av免费| 99久久精品国产亚洲精品| 精品国产aⅴ| 久久国产影院| 免费观看久久av| 一区久久精品| 亚洲日产av中文字幕| 亚洲a级精品| 久久国产66| 欧美激情综合| 在线看片国产福利你懂的| 日韩精品第一区| 欧洲激情综合| 亚洲精品看片| 欧美日韩国产一区二区在线观看| 亚洲福利国产| jiujiure精品视频播放| 欧美精品激情| 91精品国产自产精品男人的天堂 | 97久久中文字幕| 久久99久久人婷婷精品综合| 国产精品白丝一区二区三区| 国产精品**亚洲精品| 精品国产免费人成网站| 欧美+日本+国产+在线a∨观看| 天堂成人国产精品一区| 亚洲国产不卡| 亚洲精品视频一二三区| 精品免费视频| 在线一区免费| 久久国产欧美日韩精品| av一区在线| 欧美偷窥清纯综合图区| 999精品在线| 日韩欧美一区二区三区免费看| 欧美在线观看天堂一区二区三区| 国产精品麻豆成人av电影艾秋| 久久免费影院| 免费视频亚洲| 国产精品久久久久久久免费软件| 欧美不卡高清| 亚洲色图网站| 欧美国产三级| 精品捆绑调教一区二区三区| 美女久久久久久| 国产精品丝袜xxxxxxx| 精品中文字幕一区二区三区四区| 日韩高清电影一区| 成人精品动漫一区二区三区| 综合激情婷婷| 日产精品一区二区| 日本成人中文字幕在线视频| 精品欧美一区二区三区在线观看| а√天堂8资源在线| 亚洲涩涩av| 香蕉成人久久| 伊人精品在线|