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

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

  • 建立通道

flutter代码:

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

ohos代码:

  //定义eventChannel
  private eventChannel: EventChannel | null = null
  //定义eventSink
  private 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接收消息并展示当前时间
@override
  void 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});
  @override
  Widget 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;

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

class _MyHomePageState extends State<MyHomePage> {
  EventChannel eventChannel = EventChannel("com.xmg.eventChannel");
  String returnMessageFromOhos = "";

  @override
  void initState() {
    eventChannel.receiveBroadcastStream().listen((event){
      print("eventChannel.receiveBroadcastStream().listen");
      print(event);
      returnMessageFromOhos = event;
      setState(() {

      });
    });
    super.initState();
  }

  @override
  Widget 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

  //定义BasicMessageChannel
  private basicMessageChannel: BasicMessageChannel<String> | null = null

  //eventChannel
  private eventChannel: EventChannel | null = null
  private eventSink: EventSink | null = null

  configureFlutterEngine(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.notImplemented
            break;
        }
      }
    });

    //建立通道
    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通信

相关文章:

  • 掌握RocketMQ4.X消息中间件(一)-RocketMQ基本概念与系统架构
  • MySQL 日志 - Binlog
  • 精益驱动的敏捷开发
  • c++11新特性
  • 【C#生态园】突破异步编程难题:深度解析.NET平台下的异步工具与库
  • 如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具
  • 深度学习:基于MindSpore实现CycleGAN壁画修复
  • (11)MATLAB莱斯(Rician)衰落信道仿真2
  • ASP.NET Core 创建使用异步队列
  • Python并发编程挑战与解决方案
  • Git介绍--github/gitee/gitlab使用
  • Elasticsearch实战应用:构建高效搜索引擎
  • Python技巧:如何避免数据输入类型错误
  • Java毕业设计实战项目之基于SSM框架的民宿预定系统
  • 基于Hive和Hadoop的电信流量分析系统
  • ubuntu图形界面右上角网络图标找回解决办法
  • mysql设置表的某一个字段每天定时清零
  • vue3学习记录-computed
  • 第八章 中间件:SpringBoot 集成 Redis
  • 【微服务】springboot 实现动态修改接口返回值
  • 深圳建站公司优化/软文营销的特点
  • 甘肃 网站建设/怎样做自己的网站
  • 做公司网站怎么做/百度问答首页
  • 山东手机版建站系统信息/seo专家是什么意思
  • wordpress后台地址打开空白/深圳龙岗区优化防控措施
  • 做视频网站需要什么职位工作/东莞百度快速排名