热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter安卓Logplugin开发

基于FlutterVersion:1.22.3,DartVersion:2.10.3FlutterPlugin提供了Android和ios的底层封装,在Flutte

基于Flutter Version:1.22.3, Dart Version:2.10.3

FlutterPlugin提供了Android和ios的底层封装,在Flutter层提供组件功能,使得Flutter可以比较方便得调用Native得模块,对于Flutter实现比较复杂或者基于平台不能完成得部分,都可以封装成Plugin。
本文都是android得样例。

Flutter调用android原生实现,封装成Plugin

基本流程

  • Flutter端声明MethodChannel,并通过invokeMethod函数调用native的函数
  • Android声明Plugin,创建与Flutter端对应的MethodChannel,对Flutter端声明的函数进行监听,并进行相应的处理
  • 在Plugin机制中绑定两者的关系。
    此处以调用Android原生的日志为例进行讲解

1.Flutter端声明一个log_util.dart文件

 

import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';class LogUtils {///声明的通道名称static const String _channelName = 'flutter.io/system/log';///判断是否是debug环境static bool get _isDebug => !bool.fromEnvironment("dart.vm.product");///创建渠道对象static const _channel = const MethodChannel(_channelName);///通过命名函数来实现类似java中重载机制static void v({@required String message, String tag}) {if (_isDebug) {///调用函数来执行,///invokeMethod参数///[String method]:指定方法名,Android端需要监听并做处理的///[dynamic arguments]:需要传递给Android端的参数_channel.invokeMethod('logV', {'tag': tag ?? '', 'message': message ?? ''});}}static void d({@required String message, String tag}) {if (_isDebug) {_channel.invokeMethod('logD', {'tag': tag ?? '', 'message': message ?? ''});}}static void i({@required String message, String tag}) {if (_isDebug) {_channel.invokeMethod('logI', {'tag': tag ?? '', 'message': message ?? ''});}}static void w({@required String message, String tag}) {if (_isDebug) {_channel.invokeMethod('logW', {'tag': tag ?? '', 'message': message ?? ''});}}static void e({@required String message, String tag}) {if (_isDebug) {_channel.invokeMethod('logE', {'tag': tag ?? '', 'message': message ?? ''});}}
}

2.Android端plugin的编写

在android端的项目中有一个目录如下,

 

}

3.在FlutterEngine的plugin中添加LogPlugin建立关联

 

package com.example.flutter_first;import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.LogPlugin;public class MainActivity extends FlutterActivity {@Overridepublic void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {super.configureFlutterEngine(flutterEngine);flutterEngine.getPlugins().add(new LogPlugin());}}

调用如下:

 

 


推荐阅读
author-avatar
用户r8l5835vd6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有