Flutter 原生通信 (四) - iOS 通知 Flutter

原生通信系列

1. Flutter 调用 Android
2. Android 通知 Flutter
3. Flutter 调用 iOS
4. iOS 通知 Flutter

项目地址


本篇主要介绍如何在 iOS 中发布广播,然后在 dart 端进行订阅

oc

先来查看 OC 篇

#import "BattlePowerPlugin.h"
#import <Foundation/NSTimer.h>

@implementation BattlePowerPlugin

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
    //  ...

    [self registerPostTimerWithRegistrar:registrar];
}

+(void) registerPostTimerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar{
    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel messageChannelWithName:@"run_time" binaryMessenger:[registrar messenger]];

    long start = [self getNow];

    [NSTimer scheduledTimerWithTimeInterval:5 repeats:true block:^(NSTimer * _Nonnull timer) {
        long run = [self getNow] - start;
        [channel sendMessage:[NSNumber numberWithLong:run]];

        if (run > 100){
            [timer invalidate];
        }
    }];
}

+(long)getNow{
    NSDate *date = [NSDate date];
    long timeStamp = [date timeIntervalSince1970];
    return timeStamp;
}

//...

@end

间隔 5 秒通过 sendMessage 发送一条消息

dart

再来看 dart 代码,这里和系列文章第二篇一致

import 'dart:async';

import 'package:flutter/services.dart';

class BattlePower {
  // ...

  static const BasicMessageChannel<dynamic> runTimer = const BasicMessageChannel("run_time", StandardMessageCodec());

  static void initMessageHandler() {
    print("initMessageHandler");
    runTimer.setMessageHandler((dynamic value) {
      // 接收到的时间
      int time = value;
      print("value = $time");
    });
  }
}

这里使用BasicMessageChannel 接收回调

看看 运行结果,这里和 android 不一样, ios 的时间戳是 double 形式, 小数点左边是秒, 我这里进行了强转,所以获取到的时间就只有秒

图片


好了 插件入门篇到这里就结束了,希望大家多多为开源做出贡献,也希望大家的 flutter 开发之路越走越宽

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值