原生通信系列
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 开发之路越走越宽