Flutter调用原生Android开发!

一个小demo搞懂Flutter调用Android.

背景:一些操作如:文件存储、数据库操作等单纯的Flutter是不能实现的.

Flutter使用了一个灵活的系统,允许您调用特定平台的API,无论在Android上的Java或Kotlin代码中,还是iOS上的ObjectiveC或Swift代码中均可用。应用的Flutter部分通过平台通道(platform channel)将消息发送到其应用程序的所在的宿主(iOS或Android).

平台通道在客户端(Flutter UI)和宿主(平台)之间传递消息,如下图所示:

Android平台我们需要借助于MethodChannel来与Android平台代码交互 代码如下:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(MaterialApp(
    home: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
//   在dart代码中调用所需要的通道.可以自己定义但必须要和MainActivity中的使用保持一致.
  static const platform = const MethodChannel("com.flyou.test/android");
  showToast(String msg) async {
    try {
      //调用Android平台的方法.
      await platform.invokeMethod("showToast",{"msg":msg});
    } on PlatformException catch (e) {
      print(e.toString());
    }

  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(appBar: AppBar(title: Text("platformChannels"),),body:  Center(
      child: RaisedButton(
        child: Text("点我提示"),
        onPressed: () {
          showToast("我是android系统的toast");
        },
      ),
    ),);
  }
}

这里使用platform.invokeMethod(“showToast”,{“msg”:msg})

来调用我们在Android平台定义的“showToast”方法

然后响应的在Android平台MainActivity中操作.

package com.example.flutter_android2;

import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Toast;

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
      //与dart文件中定义通道保持一致
    private static final String CHANNEL = "com.flyou.test/android";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
        new MethodChannel(getFlutterEngine().getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(
                (call, result) -> {
                    System.out.println(call.method);
                    if (call.method.equals("showToast")) {
                        if (call.hasArgument("msg") && !TextUtils.isEmpty(call.argument("msg").toString())) {
                            Toast.makeText(MainActivity.this, call.argument("msg").toString(), Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(MainActivity.this, "toast text must not null", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}

效果如果:

至此完成一个简单的Flutter调用Android原生代码的操作!

猜你喜欢

转载自blog.csdn.net/qq_39792615/article/details/107566057