当前位置: 首页 > news >正文

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

  • 建立通道

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.mrgr.cn/news/40608.html

相关文章:

  • 用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画
  • 【C++ 前缀和 数论】1590. 使数组和能被 P 整除|2038
  • 【数据结构初阶】排序算法(下)冒泡排序与归并排序
  • 【C++】二叉搜索树
  • 浅谈UBS—TTL
  • Express内置的中间件(express.json和express.urlencoded)格式的请求体数据
  • 【SpringCloud】 统⼀服务⼊⼝-Gateway
  • CTMO时代下的营销新力量:2+1链动模式AI智能名片商城小程序
  • 常用快捷键整理
  • 文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
  • QT combox 前缀匹配
  • linux如何与网络时间对齐(雪花算法ID重复)
  • 使用PyTorch实现自然语言处理:从基础到实践
  • 【高频SQL基础50题】16-20
  • 【空中计算】Over-the-air Computing in OFDM Systems
  • sadTalker本地编译
  • 【GESP】C++一级练习BCQM3020,输入-计算-输出
  • 计算两点结构的斜率
  • 深度学习--------------------长短期记忆网络(LSTM)
  • C++11智能智能指针解析