鸿蒙harmonyos next flutter通信之EventChannel获取ohos系统时间

server/2024/10/5 20:02:46/
  • 建立通道

flutter代码:

EventChannel eventChannel = EventChannel("com.xmg.eventChannel");

ohos代码:

  //定义eventChannelprivate eventChannel: EventChannel | null = null//定义eventSinkprivate eventSink: EventSink | null = null//建立通道this.eventChannel = new EventChannel(flutterEngine.dartExecutor.getBinaryMessenger(),"com.xmg.eventChannel");this.eventChannel.setStreamHandler({onListen(args: Any, events: EventSink) {that.eventSink = events;//设置定时器setInterval(()=>{console.log("that.eventSink is "+that.eventSink)console.log("that.eventSink is "+new Date())let dateTime = dayjs(Date.now()).format('YYYY-MM-DD HH:mm:ss')that.eventSink?.success(dateTime)},1000)},onCancel(args: Any) {that.eventSink = null}})
  • ohos消息发送,这里使用定时器通过eventSink每隔一秒传送当前时间给flutter,代码如下:
        //设置定时器setInterval(()=>{console.log("that.eventSink is "+that.eventSink)console.log("that.eventSink is "+new Date())let dateTime = dayjs(Date.now()).format('YYYY-MM-DD HH:mm:ss')that.eventSink?.success(dateTime)},1000)
  • flutter接收消息并展示当前时间
@overridevoid initState() {eventChannel.receiveBroadcastStream().listen((event){print("eventChannel.receiveBroadcastStream().listen");print(event);returnMessageFromOhos = event;setState(() {});});super.initState();}
  • 完整代码

flutter代码:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: const MyHomePage(title: 'EventChannel获取ohos系统时间'),);}
}class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;@overrideState<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {EventChannel eventChannel = EventChannel("com.xmg.eventChannel");String returnMessageFromOhos = "";@overridevoid initState() {eventChannel.receiveBroadcastStream().listen((event){print("eventChannel.receiveBroadcastStream().listen");print(event);returnMessageFromOhos = event;setState(() {});});super.initState();}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Text(returnMessageFromOhos,),],),),);}
}

ohos代码:

import {Any,BasicMessageChannel,EventChannel,FlutterAbility, FlutterEngine, MethodCall, MethodChannel, MethodResult,StringCodec} from '@ohos/flutter_ohos';
import { GeneratedPluginRegistrant } from '../plugins/GeneratedPluginRegistrant';
import deviceInfo from '@ohos.deviceInfo'
import { bundleManager } from '@kit.AbilityKit'
import { EventSink } from '@ohos/flutter_ohos/src/main/ets/plugin/common/EventChannel'
import dayjs from 'dayjs'export default class EntryAbility extends FlutterAbility {private channel: MethodChannel | null = null//定义BasicMessageChannelprivate basicMessageChannel: BasicMessageChannel<String> | null = null//eventChannelprivate eventChannel: EventChannel | null = nullprivate eventSink: EventSink | null = nullconfigureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)GeneratedPluginRegistrant.registerWith(flutterEngine)let that = this;this.channel = new MethodChannel(flutterEngine.dartExecutor.getBinaryMessenger(), 'com.xmg.test')this.channel.setMethodCallHandler({onMethodCall(call: MethodCall, result: MethodResult): void {switch (call.method) {case 'getDeviceInfo':result.success(deviceInfo.displayVersion);break;default:result.notImplementedbreak;}}});//建立通道this.basicMessageChannel = new BasicMessageChannel(flutterEngine.dartExecutor.getBinaryMessenger(), "com.xmg.basicMessageChannel", StringCodec.INSTANCE)//消息处理,接收来自flutter的消息this.basicMessageChannel.setMessageHandler({onMessage(message,reply) {console.log("收到来自Flutter的消息: " + message)let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;bundleManager.getBundleInfoForSelf(bundleFlags, (err, data) => {// 获取应用的版本名(versionName)const versionName = data.versionName;reply.reply(versionName);})}})//建立通道this.eventChannel = new EventChannel(flutterEngine.dartExecutor.getBinaryMessenger(),"com.xmg.eventChannel");this.eventChannel.setStreamHandler({onListen(args: Any, events: EventSink) {that.eventSink = events;//设置定时器setInterval(()=>{console.log("that.eventSink is "+that.eventSink)console.log("that.eventSink is "+new Date())let dateTime = dayjs(Date.now()).format('YYYY-MM-DD HH:mm:ss')that.eventSink?.success(dateTime)},1000)},onCancel(args: Any) {that.eventSink = null}})}
}
  • 效果展示

鸿蒙harmonyos next flutter通信


http://www.ppmy.cn/server/127612.html

相关文章

AI不可尽信

看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport "fmt"func main() {leaves : make([]int, 1…

HTB:Explosion[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What does the 3-letter acronym RDP stand for? 2.What is a 3-letter acronym that refers to interaction with the host through a command line interface? 3.What about graphical user interface interactions? 4.What is the…

闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨

上图为执行语义搜索前的聚类演示 &#xff0c;嵌入技术是自然语言处理的核心组成部分。虽然嵌入技术的应用范围广泛&#xff0c;但在检索应用中的语义搜索仍是其最常见的用途之一。 尽管知识图谱等可以提升检索的准确率和效率&#xff0c;但标准向量检索技术仍然具有其实用价值…

HTML+CSS表单控件(11个案例+代码+效果图)

目录 单行文本框 (text) 案例:制作一个单行文本框 1.代码 2.效果 密码输入框 (password) 案例:制作密码输入框 1.代码 2.效果 单选按钮 (radio) 案例:制作单选按钮 1.代码 2.效果 复选框 (checkbox) 案例:制作一个复选框 1.代码 2.效果 普通按钮 (button) 案例:制作一个普通按钮…

二叉树深度学习——将二叉搜索树转化为排序的双向链表

1.题目解析 题目来源&#xff1a;LCR 155.将二叉搜索树转化为排序的双向链表 测试用例 2.算法原理 首先题目要求原地进行修改并且要求左指针代表前驱指针&#xff0c;右指针代表后继指针&#xff0c;所以思路就是 1.使用前序遍历创建两个指针cur、prev代表当前节点与前一个节点…

计算机网络各层有哪些协议?计算机网络协议解析:从拟定到实现,全面了解各层协议的作用与区别

在数字化时代&#xff0c;计算机网络无处不在&#xff0c;已经成为不可或缺的一部分。为了让不同设备能够有效地进行通信&#xff0c;网络协议作为一种约定和规则&#xff0c;确保了数据在网络中的可靠传输。今天&#xff0c;我们将深入探讨计算机网络的各层协议&#xff0c;详…

深入浅出Vue.js组件开发:从基础到高级技巧

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Vue.js 是一个轻量级且功能强大的 JavaScript 框架,专注于构建用户界面。它的核心优势之一是组件系统,它允许开发者通过模块化、可复用的方式构建复杂的应用程序。在这篇文章中,我们将详细探讨如何开发 Vue.js…

【JVM】基础篇

1 初识JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 1、编写Java源代码文件。 …