温馨提示  2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。存档数据
知识 2024-01-14 27 次阅读

Flutter 如何导入安卓开发插件?有哪些疑问?

Flutter是一个流行的移动应用开发框架,它允许开发者使用Dart语言和Flutter SDK进行跨平台开发。为了更好地集成安卓开发,Flutter提供了多种插件,这些插件可以帮助开发者更轻松地导入安卓开发功能。
以下是一些常用的Flutter 安卓开发插件:
* 安卓 Support库:提供了一组用于安卓 4.1及以上版本的组件和API,以支持更广泛的跨平台开发。 * 安卓X库:这是安卓的新官方库,提供了更现代化和一致的API,可以与Flutter无缝集成。 * Flutter插件:提供了与原生代码交互的机制,以及在Flutter和安卓之间共享数据和状态的工具。
使用这些插件,开发者可以轻松地在Flutter应用中实现各种安卓开发功能,如网络请求、本地存储、图形渲染等。通过使用Flutter插件,开发者可以减少重复代码,提高开发效率,并确保应用在不同平台上的一致性。

Flutter是谷歌推出的一款全新的移动应用框架,它能够让开发者使用一套代码同时构建iOS和安卓应用程序。但是,如果我们需要与原生功能交互,就必须要导入安卓开发插件。本篇文章将介绍Flutter中如何导入安卓开发插件的原理和详细步骤。

一、插件原理

Flutter与原生交互是通过Platform Channel来实现的。Platform Channel是Flutter与原生之间通信的桥梁。在Flutter中,通过MethodChannel对象实现Flutter与原生之间的方法调用。

可是在安卓中,通过FlutterEngine的executeDartCode方法或通过FlutterActivity的实例方法getFlutterView()获取FlutterView对象之后,再通过FlutterView的getPluginRegistry方法获取到Flutter插件的注册表FlutterPluginRegistry,来注册和调用Flutter插件。

二、步骤

1. 新建Flutter插件库

我们可在Flutter项目中通过如下命令新建一个Flutter插件库

```

flutter create -t plugin flutter,plugin,demo

```

2. 编写插件代码

Flutter插件库默认提供了两个部分一个是Dart部分,一个是安卓部分。我们可在lib目录下编写Dart插件代码,在安卓/src/main目录下编写安卓插件代码。

3. 定义MethodChannel

在Dart文件中,可以借助MethodChannel来与安卓插件通信。在flutter,plugin,demo/lib/flutter,plugin,demo.dart文件中添加如下代码

```

import 'dart:async';

import 'package:flutter/services.dart';

class FlutterPluginDemo {

static const MethodChannel ,channel =

const MethodChannel('flutter,plugin,demo');

static Future showToast(String message) async {

try {

final Map params = {'message': message};

await ,channel.invokeMethod('showToast', params);

} on PlatformException catch (ex) {

print('${ex.message}');

}

}

}

```

其中,MethodChannel的构造函数需要传入一个uniqueName,它是我们后面在安卓中调用插件的标识符,所以需要与安卓中的标识符保持一致。这里我们用flutter,plugin,demo作为唯一名称。

4. 注册插件

在安卓中,我们需要注册Flutter插件。在flutter,plugin,demo/安卓/src/main/kotlin/com/plugin/flutter,plugin,demo/FlutterPluginDemoPlugin.kt文件中添加如下代码

```

package com.plugin.flutter,plugin,demo

import 安卓.content.Context

import 安卓x.annotation.NonNull

import io.flutter.embedding.engine.plugins.FlutterPlugin

import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding

import io.flutter.embedding.engine.plugins.activity.ActivityAware

import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding

import io.flutter.plugin.common.MethodCall

import io.flutter.plugin.common.MethodChannel

class FlutterPluginDemoPlugin : FlutterPlugin, ActivityAware {

private lateinit var channel: MethodChannel

private lateinit var context: Context

override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPluginBinding) {

channel = MethodChannel(flutterPluginBinding.binaryMessenger, flutter,plugin,demo)

channel.setMethodCallHandler(this)

context = flutterPluginBinding.applicationContext

}

override fun onDetachedFromEngine(@NonNull binding: FlutterPluginBinding) {

channel.setMethodCallHandler(null)

}

override fun onAttachedToActivity(binding: ActivityPluginBinding) {}

override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {}

override fun onDetachedFromActivity() {}

override fun onDetachedFromActivityForConfigChanges() {}

override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: MethodChannel.Result) {

when (call.method) {

showToast -> {

val message = call.argument(message)

Toast.makeText(context, message, Toast.LENGTH,SHORT).show()

result.success(null)

}

else -> result.notImplemented()

}

}

}

```

在onAttachedToEngine方法中,我们通过flutterPluginBinding获取一个MethodChannel实例,并设置该实例的MethodCallHandler为当前插件实例,即FlutterPluginDemoPlugin。在onMethodCall方法中,我们通过解析MethodCall对象来处理传递过来的方法调用,并使用Toast在屏幕上显示一条信息。

5. 配置FlutterActivity

我们需要在主程序中注册Flutter插件。在flutter,plugin,demo/example/安卓/app/src/main/安卓Manifest.xml文件中,我们需要在activity标签中配置meta-data

```

安卓:name=.MainActivity

安卓:launchMode=singleInstance

安卓:theme=@style/LaunchTheme

安卓:hardwareAccelerated=true

安卓:configChanges=orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode

安卓:windowSoftInputMode=adjustResize

>

安卓:name=flutterEmbedding

安卓:value=2 />

安卓:name=io.flutter.plugins.GeneratedPluginRegistrant

安卓:value=com.plugin.flutter,plugin,demo.FlutterPluginDemoPlugin />

```

在meta-data标签中,我们传递了两个参数名flutterEmbedding和io.flutter.plugins.GeneratedPluginRegistrant。其中,flutterEmbedding用于指定FlutterActivity的版本;而io.flutter.plugins.GeneratedPluginRegistrant则用于指定Flutter插件注册表。

6. 导入插件

最后在Dart文件中导入我们在安卓/src/main/kotlin/com/plugin/flutter,plugin,demo/FlutterPluginDemoPlugin.kt文件中定义的插件

```

import 'package:flutter,plugin,demo/flutter,plugin,demo.dart';

void main() {

runApp(MyApp());

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

title: 'Flutter Plugin Demo',

home: Scaffold(

appBar: AppBar(

title: const Text('Flutter Plugin Demo'),

),

body: Center(

child: RaisedButton(

onPressed: () {

FlutterPluginDemo.showToast(Hello Flutter Plugin Demo!);

},

child: Text('Click Here'),

),

),

),

);

}

}

```

通过import 'package:flutter,plugin,demo/flutter,plugin,demo.dart'将我们的插件导入到程序中。并在RaisedButton的onPressed事件中调用showToast方法,该方法即为在Dart插件中定义的。

现在,我们就可以借助运行main方法来验证我们的插件是否导入成功了。

以上就是如何在Flutter中导入安卓开发插件的详细步骤和原理,需要留意的是,由于插件不同,专为不同的安卓插件,需要做相应的修改。