这篇博客主要记录自己如何通过Flutter去与Android原生进行交换的记录!

Demo下载地址:https://download.csdn.net/download/hzqit520/13025644

下面截图主要标注交互的重点注意事项:

未交互的界面:

 

交互后的界面:

 

Flutter代码:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter与Android交互',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter与Android交互'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  //方法渠道(唯一 一般包名与获取的什么用处来组合)需要与Android原生对应上
  var methodChannel = const MethodChannel("/com.hzq.flutter_and_android/getData");

  String result ="点击获取";

  /*
   * 获取数据
   */
  void _getData() async {
    try {
      //getData 方法名
      //传参 {"name": "小强", "age": 17}
      String invokeMethod = await methodChannel.invokeMethod("getData", {"name": "小强", "age": 17});
      setState(() {
        result = invokeMethod;
      });
    } catch (e) {
      result = e.toString();
      print(e);
    }
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            InkWell(
              child: Text("获取数据:$result"),
              onTap: _getData,
            ),
          ],
        ),
      ),
    );
  }
}

Android代码:

package com.hzq.flutter_and_android

import android.content.Intent
import android.util.Log
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugins.GeneratedPluginRegistrant.registerWith

class MainActivity : FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine : FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        //渠道
        val methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger,
                "/com.hzq.flutter_and_android/getData")
        methodChannel.setMethodCallHandler { call, result ->

            when (call.method) {
                //判断方法名
                "getData" -> {
                    //判断是否传参
                    if (call.arguments != null) {
                        val name = call.argument<String>("name")
                        val age = call.argument<Int>("age")
                        Log.e("hzq", "name-->$name")
                        Log.e("hzq", "age-->$age")
                    }
                    //回到到Flutter
                    result.success("Android -> Flutter 接收回调后返回值:小强")
                }
                //默认空回调
                else -> result.notImplemented()
            }
        }
    }

}

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐