首页 > 其他分享 >flutter中调安卓的方法

flutter中调安卓的方法

时间:2024-04-25 10:55:23浏览次数:20  
标签:String 调安卓 call result param1 import 方法 flutter

安卓

package com.example.xcx_dashan_app;

import io.flutter.embedding.android.FlutterActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import io.flutter.embedding.engine.FlutterEngine;
import androidx.annotation.NonNull;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
import java.util.HashMap;
import java.util.Map; // 导入Map类
import android.util.Log;
public class MainActivity extends FlutterActivity {

    private static final String CHANNEL = "com.example.xcx_dashan_app/channel";

    /**
     * Flutter 引擎配置器,用于配置 Flutter 引擎并设置通信通道
     */
    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        // 注册 Flutter 插件
        GeneratedPluginRegistrant.registerWith(flutterEngine);
        // 创建一个新的方法通道,与 Dart 代码进行通信
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
                .setMethodCallHandler(
                        (call, result) -> {
                            // 处理方法调用
                            if (call.method.equals("launchApp")) { // 只调方法
                                launchApp();
                                result.success("App Launched");
                            } else if (call.method.equals("launchAppOne")) { // 传一个参数
                                String param1 = call.argument("param1");
                                launchApp1(param1);
                                result.success("App Launched 1");
                            } else if (call.method.equals("launchAppTwo")) { // 传多个

                                String param1 = call.argument("param1");
                                String param2 = call.argument("param2");
                                launchApp2(param1, param2);

                                result.success("App Launched 2");
                            } else if (call.method.equals("launchAppObject")) { // 传对象

                                launchApp3(call.arguments());
                                Map<String, Object> person = new HashMap<>(); // 返回一个对象
                                person.put("name", "John Doe");
                                person.put("age", 30);
                                result.success(person);

                            } else {
                                // 如果收到其他方法调用,则返回未实现的错误给 Dart 代码
                                result.notImplemented();
                            }
                        });
    }

    @SuppressLint("LongLogTag") // 用于告诉编译器忽略指定代码段的特定警告或lint检查
    private void launchApp() {
        System.out.println("--------------1访问成功--------------------");

        Log.d(CHANNEL, "The value of number is:是否 ");

        System.out.println("--------------访问成功--------------------");
    }

    private void launchApp1(String a) {
        System.out.println("--------访问成功----------一个参数----------" + a);

    }

    private void launchApp2(String a, String b) {
        System.out.println(b + "--------访问成功----------2个参数----------" + a);

    }

    private void launchApp3(Map<String, Object> arguments) {
        String name = (String) arguments.get("name");
        int age = (int) arguments.get("age");
        System.out.println(age + "---age--launchApp3---------1访问成功-------------------name-" + name);

    }

}

flutter

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future<void> launchAndroid() async {
    User user = new User("张三", 20);

    const platform = MethodChannel('com.example.xcx_dashan_app/channel');
    try {
      var result =  await platform.invokeMethod('launchAppObject', user.toJson());
     
      //  var result = await platform.invokeMethod('launchAppOne',{'param1': "这是一个参数"});
      // var result =  await platform.invokeMethod('launchAppOne',{'param1': "这是一个参数",'param2': "这是一个参数"});
       print("结果$result"); 
    } on PlatformException catch (e) {
      print("Failed to invoke method: '${e.message}'.");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Center(
        child: ElevatedButton(
          onPressed: () {
            launchAndroid();
          },
          child: const Text('Open Native App'),
        ),
      ),
    );
  }
}

 

标签:String,调安卓,call,result,param1,import,方法,flutter
From: https://www.cnblogs.com/xbinbin/p/18157107

相关文章

  • Appium控件交互策略:优化自动化测试效率的关键方法
    简介与Web元素操作一样(参考SeleniumWeb元素操作),定位到APP控件元素后,可以对控件进行一系列的操作,实现与APP交互,比如点击、文本输入、元素属性获取等。控件交互常用方法常见操作点击方法element.click()。输入操作element.send_keys('appium')。清除操作element......
  • C#实现单例模式的几种方法
    C#实现单例模式的几种方法    C#中readonly的理解与使用   Readonly(C#参考)介绍单例模式是软件工程学中最富盛名的设计模式之一。从本质上看,单例模式只允许被其自身实例化一次,且向外部提供了一个访问该实例的接口。通常来说,单例对象进行实例化时一般不带参数,因为......
  • 从 Uno Platform 4 更新 Uno Platform 5 的迁移方法
    本文记录我的一个小项目从UnoPlatform4更新UnoPlatform5的一些变更和迁移方法,由于项目太小,可能踩到的坑不多官方文档:MigratingtoUnoPlatform5.0表扬一下官方,文档写的很详细Directory.Packages.props所有的Uno相关包的版本更新:-<PackageVersionInclude="U......
  • WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来
    本文将告诉大家如何在WPF或者其他Win32应用里面,在收到鼠标消息时,通过GetMessageExtraInfo方法获取当前收到的鼠标消息是否由触摸消息提升而来大家都知道,在不开启WM_Pointer的情况下,无论是走WM_Touch或者是RealTimeStylus等方式,默认下触摸都会提升为鼠标消息从而更好......
  • 交点法公路计算的一些相关方法函数(Python)
    1#弧度归一化2@staticmethod3defnormalize_radian(radian):4returnradian%tau56#获取坐标差7@staticmethod8defget_coord_diff(start_x,start_y,end_x,end_y):9returnend_x-start_x,end_y-st......
  • lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(4)
    写在前面tips:点赞+收藏=学会!我们已经介绍了radash的相关信息和部分Array相关方法,详情可前往主页查看。本篇我们继续介绍radash中Array的相关方法的剩余方法。本期文章发布后,作者也会同步整理出Array方法的使用目录,包括文章说明和脑图说明。因为方法较多,后续将专门发布......
  • vr太阳光参数怎么设置,vr快速渲染方法
    ​VR场景中实现逼真的光照效果,太阳光参数的设置尤为关键。真实的太阳光可提升效果图的质感,论VR太阳光参数的设置技巧,包括光源类型选择、光照强度调整、阴影效果优化等多个方面,喜爱一起来看看vr太阳光真实感设置参数吧。vr太阳光高效设置参数1、拖动绘制太阳光(顶视图),在透视图......
  • 获取被注解的类和被注解的方法
    AopUtils.getTargetClass(bean).getMethods()这段代码用于获取一个对象(bean)的所有公共方法(publicmethods)。让我来解释一下这段代码:AopUtils.getTargetClass(bean):这个方法用于获取指定对象的目标类,即被代理的原始类。在SpringAOP中,当一个类被AOP代理后,可能会丢失原始类的一......
  • Mybatis Plus使用QueryWrapper、EntityWrapper配置Or的查询方法
    QueryWrapper↓↓↓↓构建代码QueryWrapper<UserPharmacy>wrapper=newQueryWrapper<UserPharmacy>();           wrapper.eq("a.delType",0)                   .and(StrUtil.isNotBlank(userPharmacyQueryDTO.getName()),wrapper1->wrapp......
  • jmeter查看测试片段的执行结果方法二:在添加【测试片段】后结合 模块控制器 查看获取的
    建议使用第一种方法:使用调试取样器查看变量值,再添加测试片段保存1.在测试计划下>添加测试片段2.在线程组下>添加模块控制器3.模块控制器指定运行当前测试片段:找到目标元素 备注:模块控制器添加步骤:线程组>鼠标右键,添加>逻辑控制器>模块控制器......