Flutter:调用原生方法,并获取返回值

首先第一步是在android的代码中,使用 MethodChannel 进行注册

import android.os.Bundle;
import android.os.StrictMode;

import androidx.annotation.Nullable;

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;


/**
 * Created by malei on 2021/2/23
 * Describe:
 * https://blog.youkuaiyun.com/xeon_cc/article/details/107922295
 */
public class MainFlutterActivity extends FlutterActivity {

    private static final String channel = "toJava";

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        new MethodChannel(getFlutterEngine().getDartExecutor().getBinaryMessenger(),channel).setMethodCallHandler(
                new MethodChannel.MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
                        if (methodCall.method!=null) {
                            result.success(toJava(methodCall.method));
                        } else {
                            result.notImplemented();
                        }
                    }
                }
        );
    }

    public String toJava(String name){
        System.out.println("传递的参数是"+name);
        return "您好"+name;
    }
}

第二步:我们可以通过MainActivity进入到MainFlutterActivity类,打开这个类,就直接进入到了flutter的首页。

第三步:我们在main.dart中添加调用原生方法的功能

import 'dart:core';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_module/FindPage.dart';
import 'package:flutter_module/MinePage.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      routes: {
        'FindPage': (context) {
          return FindPage();
        },
        'MinePage': (context) {
          return MinePage();
        },
      },
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHome(),
    );
  }
}

class MyHome extends StatefulWidget {
  @override
  _MyHomeState createState() => _MyHomeState();
}

class _MyHomeState extends State<MyHome> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("测试"),
      ),
      body: Container(
        child: Column(
          children: <Widget>[
            InkWell(
              child: Container(
                width: 100,
                height: 60,
                color: Colors.amber,
                child: Text("点击"),
              ),
              onTap: () async {
                //调用原生的toJava方法
                const platform = const MethodChannel("toJava");
                var returnValue = await platform.invokeMethod("刘德华");
                print("从原生Android的java方法返回的值是:" + returnValue);
              },
            )
          ],
        ),
      ),
    );
  }
}

结果如下:

I/System.out: 传递的参数是刘德华
I/flutter: 从原生Android的java方法返回的值是:您好刘德华

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值