鸿蒙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通信

相关推荐
行者9620 小时前
Flutter与OpenHarmony深度集成:数据导出组件的实战优化与性能提升
flutter·harmonyos·鸿蒙
小雨下雨的雨20 小时前
Flutter 框架跨平台鸿蒙开发 —— Row & Column 布局之轴线控制艺术
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨21 小时前
Flutter 框架跨平台鸿蒙开发 —— Center 控件之完美居中之道
flutter·ui·华为·harmonyos·鸿蒙
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Icon 控件之图标交互美学
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Placeholder 控件之布局雏形美学
flutter·ui·华为·harmonyos·鸿蒙系统
行者961 天前
OpenHarmony Flutter弹出菜单组件深度实践:从基础到高级的完整指南
flutter·harmonyos·鸿蒙
前端不太难1 天前
Flutter / RN / iOS,在长期维护下的性能差异本质
flutter·ios
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Padding 控件之空间呼吸艺术
flutter·ui·华为·harmonyos·鸿蒙系统
行者961 天前
Flutter到OpenHarmony:横竖屏自适应布局深度实践
flutter·harmonyos·鸿蒙
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Align 控件之精准定位美学
flutter·ui·华为·harmonyos·鸿蒙