Flutter调用原生Android代码的最简单方式

针对Flutter 1.1.2以上版本,整理了调用原生Android代码的3步流程:1) 绑定方法于MainActivity;2) 创建实现类TestPlugin;3) 在Flutter dart文件中调用。通过实例演示生成随机号码,提供关键代码片段。

网上写的好多的代码都是flutter 1.1.2 以下的,1.1.2以上的代码不多,而且很乱。本人整理了很长一段时间才把问题整理出来。总体来说,分为3个步骤:

  1. 绑定方法 (MainActivity.kt)

  2. 创建实现类 (TestPlugin.java)

  3. 调用 (xxx.dart)

========================下面是一个生成随机号码的例子,直接上代码======

MainActivity.kt

package com.xxx

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        print("##configureFlutterEngine start")
        super.configureFlutterEngine(flutterEngine)
        print("##configureFlutterEngine end")
        var mc:MethodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "leejinx_plugin")

        mc.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result -> run{
            print("##开始进入自定义原生")
            var size = call.argument<Int>("size")
            var maxnum = call.argument<Int>("maxNumber")
            var randomNumbers:String = TestPlugin().createRandomNumber(size!!.toInt(),maxnum!!.toInt())
            result?.success(randomNumbers)
        }}
    }
}

 

TestPlugin.java

package com.xxx;

import java.util.Arrays;
import java.util.Random;

public class TestPlugin {
    public String createRandomNumber(int count,int maxNumber){
        System.out.println("##进入createRandomNumber");
        String numStr = null;
        Random random = new Random();
        Integer[] numArr = new Integer[count];
        for(int i = 0;i < count;i++){
            numArr[i] = random.nextInt(maxNumber) + 1;
        }
        numStr = Arrays.toString(numArr);
        return numStr;
    }
}

 

xxx.dart

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

class TestPlugin extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return TestPluginState();
  }
}

class TestPluginState extends State<TestPlugin>{
  static const MethodChannel leejinx_plugin_mc = const MethodChannel("leejinx_plugin");
  String randomNumbers = "";
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(centerTitle: true,),
      body: Container( 
        child: ListView(
          shrinkWrap: true,
          children: <Widget>[
            Text("随机号码:$randomNumbers"),
            RaisedButton(
              child: Text("生成随机号码"),
              onPressed: (){
                print("##start press,${leejinx_plugin_mc.name}");
               // Future<String> str =  leejinx_plugin_mc.invokeMethod("mytest");
                Map paramMap = Map();
                paramMap['size'] = 5;
                paramMap["maxNumber"] = 30;
                Future<String> str =  leejinx_plugin_mc.invokeMethod("tet",paramMap);
                str.then((value)
                {
                  print("##value=$value");
                  // 更新数字
                  this.setState(() {
                    randomNumbers = value;
                  });
                }
                );
                print("##end press");
              },
            ),
          ],
        ),
      )
    );
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值