Commit a3a0c7ad6e72abf99b893c8ae6f4f72807222a71

Authored by 权海
1 parent 1e2747f2

feat(ui):修改pigeon api中间层

(cherry picked from commit ffa69d85)

# Conflicts:
#	lib/core/platform/pigeon_api_facade.dart
#	ohos/entry/src/main/ets/pigeon/HealthKitApi.ets
#	pubspec.lock
... ... @@ -135,8 +135,6 @@ private open class HealthKitApiPigeonCodec : StandardMessageCodec() {
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
interface HealthKitHostApi {
fun getHealthServerAuthUrl(callback: (Result<String>) -> Unit)
fun cancelHealthAppAuthorization(): Boolean
/** Opens Huawei Health client authorization UI. Returns whether user granted. */
fun checkHealthAppAuthorization(callback: (Result<HealthAuthorization>) -> Unit)
fun requestHealthClientAuthorization(callback: (Result<Boolean>) -> Unit)
... ... @@ -151,39 +149,6 @@ interface HealthKitHostApi {
fun setUp(binaryMessenger: BinaryMessenger, api: HealthKitHostApi?, messageChannelSuffix: String = "") {
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.getHealthServerAuthUrl$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
api.getHealthServerAuthUrl{ result: Result<String> ->
val error = result.exceptionOrNull()
if (error != null) {
reply.reply(HealthKitApiPigeonUtils.wrapError(error))
} else {
val data = result.getOrNull()
reply.reply(HealthKitApiPigeonUtils.wrapResult(data))
}
}
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.cancelHealthAppAuthorization$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
listOf(api.cancelHealthAppAuthorization())
} catch (exception: Throwable) {
HealthKitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.checkHealthAppAuthorization$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
... ...
... ... @@ -181,8 +181,6 @@ class HealthKitApiPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable
/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
protocol HealthKitHostApi {
func getHealthServerAuthUrl(completion: @escaping (Result<String, Error>) -> Void)
func cancelHealthAppAuthorization() throws -> Bool
/// Opens Huawei Health client authorization UI. Returns whether user granted.
func checkHealthAppAuthorization(completion: @escaping (Result<HealthAuthorization, Error>) -> Void)
func requestHealthClientAuthorization(completion: @escaping (Result<Bool, Error>) -> Void)
... ... @@ -194,34 +192,6 @@ class HealthKitHostApiSetup {
/// Sets up an instance of `HealthKitHostApi` to handle messages through the `binaryMessenger`.
static func setUp(binaryMessenger: FlutterBinaryMessenger, api: HealthKitHostApi?, messageChannelSuffix: String = "") {
let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : ""
let getHealthServerAuthUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.getHealthServerAuthUrl\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
getHealthServerAuthUrlChannel.setMessageHandler { _, reply in
api.getHealthServerAuthUrl { result in
switch result {
case .success(let res):
reply(wrapResult(res))
case .failure(let error):
reply(wrapError(error))
}
}
}
} else {
getHealthServerAuthUrlChannel.setMessageHandler(nil)
}
let cancelHealthAppAuthorizationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.cancelHealthAppAuthorization\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
cancelHealthAppAuthorizationChannel.setMessageHandler { _, reply in
do {
let result = try api.cancelHealthAppAuthorization()
reply(wrapResult(result))
} catch {
reply(wrapError(error))
}
}
} else {
cancelHealthAppAuthorizationChannel.setMessageHandler(nil)
}
/// Opens Huawei Health client authorization UI. Returns whether user granted.
let checkHealthAppAuthorizationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.checkHealthAppAuthorization\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
... ...
... ... @@ -8,16 +8,6 @@ final class HealthKitHostApiImpl: HealthKitHostApi {
self.service = service
}
func getHealthServerAuthUrl(completion: @escaping (Result<String, Error>) -> Void) {
// Apple Health authorization is system-managed, not URL based.
completion(.success(""))
}
func cancelHealthAppAuthorization() throws -> Bool {
// iOS does not let apps revoke HealthKit permission programmatically.
false
}
func checkHealthAppAuthorization(completion: @escaping (Result<HealthAuthorization, Error>) -> Void) {
Task {
let authorization: HealthAuthorization
... ...
import 'package:flutter/foundation.dart';
import 'package:doublefeel_flutter/pigeon/alipay_api.g.dart' as alipay;
import 'package:doublefeel_flutter/pigeon/health_kit_api.g.dart' as health_kit;
import 'package:doublefeel_flutter/pigeon/health_kit_raw_data_api.g.dart'
as health_raw;
import 'package:doublefeel_flutter/pigeon/platform_api.g.dart' as platform;
import 'package:doublefeel_flutter/pigeon/wear_engine_api.g.dart' as wear;
export 'package:doublefeel_flutter/pigeon/alipay_api.g.dart';
export 'package:doublefeel_flutter/pigeon/health_kit_api.g.dart';
export 'package:doublefeel_flutter/pigeon/health_kit_raw_data_api.g.dart';
export 'package:doublefeel_flutter/pigeon/platform_api.g.dart';
export 'package:doublefeel_flutter/pigeon/wear_engine_api.g.dart';
enum AppPigeonPlatform { ios, android, ohos }
typedef AppPigeonPlatformProvider = AppPigeonPlatform Function();
AppPigeonPlatform resolveAppPigeonPlatform({TargetPlatform? targetPlatform}) {
final platform = targetPlatform ?? defaultTargetPlatform;
if (platform.name == 'ohos') {
return AppPigeonPlatform.ohos;
}
if (platform == TargetPlatform.iOS) {
return AppPigeonPlatform.ios;
}
return AppPigeonPlatform.android;
}
abstract class _AppPigeonApiFacade {
_AppPigeonApiFacade({
AppPigeonPlatform? appPlatform,
AppPigeonPlatformProvider? platformProvider,
}) : _platformProvider = platformProvider ??
(() => appPlatform ?? resolveAppPigeonPlatform());
final AppPigeonPlatformProvider _platformProvider;
AppPigeonPlatform get appPigeonPlatform => _platformProvider();
Future<T> dispatch<T>({
required Future<T> Function() ios,
Future<T> Function()? android,
Future<T> Function()? ohos,
}) {
return switch (appPigeonPlatform) {
AppPigeonPlatform.ios => ios(),
AppPigeonPlatform.android => (android ?? ios)(),
AppPigeonPlatform.ohos => (ohos ?? android ?? ios)(),
};
}
}
class AppPlatformHostApi extends _AppPigeonApiFacade {
AppPlatformHostApi({
platform.PlatformHostApi? api,
super.appPlatform,
super.platformProvider,
}) : _api = api ?? platform.PlatformHostApi();
final platform.PlatformHostApi _api;
Future<String> getFullUserAgent() => dispatch(
ios: () => _api.getFullUserAgent(),
ohos: () async {
//TODO: - 组装agent
return "";
},
);
Future<bool> isChinaRegion() => dispatch(
ios: () => _api.isChinaRegion(),
ohos: () async {
return true;
});
Future<int> getApnsAuthStatus() => dispatch(
ios: () => _api.getApnsAuthStatus(),
ohos: () async {
//TODO: - 检查通知权限
return 0;
},
);
Future<bool> requestNotificationAuth() => dispatch(
ios: () => _api.requestNotificationAuth(),
ohos: () async {
//TODO: - 请求通知权限
return false;
},
);
Future<bool> isDebugEnvoriment() => dispatch(
ios: () => _api.isDebugEnvoriment(),
ohos: () async {
return false;
});
Future<bool> shareText(String text) => dispatch(
ios: () => _api.shareText(text),
ohos: () async {
//TODO: - 分享文本(配对信息)
return false;
});
Future<bool> shareFileData(Uint8List databytes) => dispatch(
ios: () => _api.shareFileData(databytes),
ohos: () async {
return false;
});
Future<void> updateLoginInfo(String jsonString, String baseUrl) => dispatch(
ios: () => _api.updateLoginInfo(jsonString, baseUrl),
ohos: () async {
return;
});
Future<void> logout() => dispatch(
ios: () => _api.logout(),
ohos: () async {
return;
});
Future<void> refreshVip() => dispatch(
ios: () => _api.refreshVip(),
ohos: () async {
return;
});
Future<void> refreshWatchAppAndWidgets() => dispatch(
ios: () => _api.refreshWatchAppAndWidgets(),
ohos: () async {
return;
});
Future<bool> requestAppReview() => dispatch(
ios: () => _api.requestAppReview(),
ohos: () async {
return false;
});
Future<bool> jumpAppSetting() => dispatch(
ios: () => _api.jumpAppSetting(),
ohos: () async {
return false;
});
Future<bool> nativeHandleUrl(String urlString) => dispatch(
ios: () => _api.nativeHandleUrl(urlString),
ohos: () async {
//TODO: - 处理url跳转
return false;
});
Future<String?> requestUnhandedUrl() => dispatch(
ios: () => _api.requestUnhandedUrl(),
ohos: () async {
//TODO: - 请求未处理的url(通知点击启动app后,启动flutter引擎交给flutter处理url)
return null;
});
Future<platform.AppleSignInModel?> requestAppleSignIn() => dispatch(
ios: () => _api.requestAppleSignIn(),
ohos: () async {
return null;
});
Future<platform.GoogleSignInModel?> requestGoogleSignIn() => dispatch(
ios: () => _api.requestGoogleSignIn(),
ohos: () async {
return null;
});
Future<bool> sendEmail(String mailTo, String title, String content) =>
dispatch(
ios: () => _api.sendEmail(mailTo, title, content),
ohos: () async {
//TODO: - 发送邮件
return false;
});
Future<platform.AppleProductInfo?> requestAppleProductInfo(
String productId,
int baseUnit,
) =>
dispatch(
ios: () => _api.requestAppleProductInfo(productId, baseUnit),
ohos: () async {
return null;
});
Future<platform.AppleProductPaymentResult?> performApplePayment(
String productId,
String uuid,
) =>
dispatch(
ios: () => _api.performApplePayment(productId, uuid),
ohos: () async {
return null;
});
Future<bool> performRestore() => dispatch(
ios: () => _api.performRestore(),
ohos: () async {
return false;
});
Future<String?> uploadFile(
String filePath,
platform.HResourceType resourceType,
) =>
dispatch(
ios: () => _api.uploadFile(filePath, resourceType),
ohos: () async {
//TODO: - 上传文件(头像)
return null;
});
Future<String?> performCropImage(
String imageUrl,
int? maxKB,
int? width,
int? height,
) =>
dispatch(
ios: () => _api.performCropImage(imageUrl, maxKB, width, height),
ohos: () async {
return null;
});
Future<bool> sendLocalNotification(
int dataType,
int dateTime,
String title,
String content,
String link,
) =>
dispatch(
ios: () => _api.sendLocalNotification(
dataType, dateTime, title, content, link),
ohos: () async {
//TODO: - 发送本地通知
return false;
});
}
class AppHealthKitHostApi extends _AppPigeonApiFacade {
AppHealthKitHostApi({
health_kit.HealthKitHostApi? api,
super.appPlatform,
super.platformProvider,
}) : _api = api ?? health_kit.HealthKitHostApi();
final health_kit.HealthKitHostApi _api;
Future<health_kit.HealthAuthorization> checkHealthAppAuthorization() =>
dispatch(
ios: () => _api.checkHealthAppAuthorization(),
ohos: () async {
//TODO: - 检查华为健康授权状态
return health_kit.HealthAuthorization(status: -1, hasData: false);
});
Future<bool> requestHealthClientAuthorization() => dispatch(
ios: () => _api.requestHealthClientAuthorization(),
ohos: () async {
//TODO: - 请求华为健康授权
return false;
});
}
class AppHealthKitRawDataHostApi extends _AppPigeonApiFacade {
AppHealthKitRawDataHostApi({
health_raw.HealthKitRawDataHostApi? api,
super.appPlatform,
super.platformProvider,
}) : _api = api ?? health_raw.HealthKitRawDataHostApi();
final health_raw.HealthKitRawDataHostApi _api;
Future<bool> hasHealthData() => dispatch(ios: () => _api.hasHealthData());
Future<List<health_raw.HealthKitRawDataPoint>> getHealthKitRawData(
int dataType,
int startTime,
int endTime,
) =>
dispatch(
ios: () => _api.getHealthKitRawData(dataType, startTime, endTime),
ohos: () async {
//TODO: - 获取华为健康原始数据
return [];
},
);
Future<bool> performHealthDataUpload() => dispatch(
ios: () => _api.performHealthDataUpload(),
ohos: () async {
return false;
});
Future<bool> syncDatabase({
required String hrDataPath,
required String hrvDataPath,
required String sleepDataPath,
required String avgRealtimeStressDataPath,
}) =>
dispatch(
ios: () => _api.syncDatabase(
hrDataPath: hrDataPath,
hrvDataPath: hrvDataPath,
sleepDataPath: sleepDataPath,
avgRealtimeStressDataPath: avgRealtimeStressDataPath,
),
ohos: () async {
return false;
});
Future<int> performHRDataUpload({required String sqliteFilePath}) => dispatch(
ios: () => _api.performHRDataUpload(sqliteFilePath: sqliteFilePath),
ohos: () async {
//TODO: - 上传HR数据
return 0;
});
Future<int> performHRVDataUpload({required String sqliteFilePath}) =>
dispatch(
ios: () => _api.performHRVDataUpload(sqliteFilePath: sqliteFilePath),
ohos: () async {
//TODO: - 上传HRV数据
return 0;
});
Future<int> performSleepAnalysisDataUpload(
{required String sqliteFilePath}) =>
dispatch(
ios: () => _api.performSleepAnalysisDataUpload(
sqliteFilePath: sqliteFilePath,
),
ohos: () async {
//TODO: - 上传睡眠数据
return 0;
});
Future<int> performAvgRealtimeStressDataUpload({
required String sqliteFilePath,
}) =>
dispatch(
ios: () => _api.performAvgRealtimeStressDataUpload(
sqliteFilePath: sqliteFilePath,
),
ohos: () async {
//TODO: - 上传平均实时压力数据
return 0;
});
Future<List<health_raw.HealthKitRawSleepDataPoint>> getHealthKitRawSleepData(
int startTime,
int endTime,
) =>
dispatch(
ios: () => _api.getHealthKitRawSleepData(startTime, endTime),
ohos: () async {
//TODO: - 获取华为健康原始睡眠数据
return [];
});
Future<List<health_raw.HealthKitRawActivityDataPoint>>
getHealthKitRawActivityData(
int startTime,
int endTime,
) =>
dispatch(
ios: () => _api.getHealthKitRawActivityData(startTime, endTime),
ohos: () async {
//TODO: - 获取华为健康原始活动数据
return [];
});
Future<List<health_raw.HealthKitRawWorkoutDataPoint>>
getHealthKitRawWorkoutData(
int startTime,
int endTime,
) =>
dispatch(
ios: () => _api.getHealthKitRawWorkoutData(startTime, endTime),
ohos: () async {
//TODO: - 获取华为健康原始锻炼数据
return [];
});
Future<bool> saveNativeCallFlutterChange({
required List<int> relativeDataTypes,
}) =>
dispatch(
ios: () => _api.saveNativeCallFlutterChange(
relativeDataTypes: relativeDataTypes,
),
ohos: () => Future.value(false),
);
Future<bool> saveFlutterCaculateFinished({
required List<int> relativeDataTypes,
}) =>
dispatch(
ios: () => _api.saveFlutterCaculateFinished(
relativeDataTypes: relativeDataTypes,
),
ohos: () => Future.value(false),
);
Future<bool> saveLocalNotificationRecord({
required String notificationType,
required int timestamp,
}) =>
dispatch(
ios: () => _api.saveLocalNotificationRecord(
notificationType: notificationType,
timestamp: timestamp,
),
ohos: () => Future.value(false),
);
Future<bool> shareNativeAppleHealthObserverRecord() => dispatch(
ios: () => _api.shareNativeAppleHealthObserverRecord(),
ohos: () => Future.value(false));
Future<bool> saveLocalNotificationDebugEvent({
required Map<String, Object?> event,
}) =>
dispatch(
ios: () => _api.saveLocalNotificationDebugEvent(event: event),
ohos: () => Future.value(false));
Future<bool> shareFlutterObserverRecord() => dispatch(
ios: () => _api.shareFlutterObserverRecord(),
ohos: () => Future.value(false));
Future<bool> shareLocalNotificationDebugRecord() => dispatch(
ios: () => _api.shareLocalNotificationDebugRecord(),
ohos: () => Future.value(false));
Future<bool> shareUploadTaskRecord() => dispatch(
ios: () => _api.shareUploadTaskRecord(), ohos: () => Future.value(false));
}
class AppWearEngineHostApi extends _AppPigeonApiFacade {
AppWearEngineHostApi({
wear.WearEngineHostApi? api,
super.appPlatform,
super.platformProvider,
}) : _api = api ?? wear.WearEngineHostApi();
final wear.WearEngineHostApi _api;
Future<bool> hasAvailableDevices() => dispatch(
ios: () => _api.hasAvailableDevices(), ohos: () => Future.value(false));
Future<wear.WearDeviceInfo?> checkConnectedDevice() => dispatch(
ios: () => _api.checkConnectedDevice(), ohos: () => Future.value(null));
Future<bool> registerMessageReceiver() => dispatch(
ios: () => _api.registerMessageReceiver(),
ohos: () => Future.value(false));
Future<bool> sendTextMessage(String message) => dispatch(
ios: () => _api.sendTextMessage(message),
ohos: () => Future.value(false));
Future<bool> addWatchSurface() => dispatch(
ios: () => _api.addWatchSurface(), ohos: () => Future.value(false));
Future<bool> syncWatchTheme(wear.WatchTransformTheme? theme) => dispatch(
ios: () => _api.syncWatchTheme(theme), ohos: () => Future.value(false));
Future<String?> removeBackground(String originImagePath) => dispatch(
ios: () => _api.removeBackground(originImagePath),
ohos: () => Future.value(null));
Future<bool> hasInstalledWatchSurface() => dispatch(
ios: () => _api.hasInstalledWatchSurface(),
ohos: () => Future.value(false));
}
... ...
... ... @@ -117,62 +117,6 @@ class HealthKitHostApi {
final String pigeonVar_messageChannelSuffix;
Future<String> getHealthServerAuthUrl() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.getHealthServerAuthUrl$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
throw _createConnectionError(pigeonVar_channelName);
} else if (pigeonVar_replyList.length > 1) {
throw PlatformException(
code: pigeonVar_replyList[0]! as String,
message: pigeonVar_replyList[1] as String?,
details: pigeonVar_replyList[2],
);
} else if (pigeonVar_replyList[0] == null) {
throw PlatformException(
code: 'null-error',
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as String?)!;
}
}
Future<bool> cancelHealthAppAuthorization() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.cancelHealthAppAuthorization$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
throw _createConnectionError(pigeonVar_channelName);
} else if (pigeonVar_replyList.length > 1) {
throw PlatformException(
code: pigeonVar_replyList[0]! as String,
message: pigeonVar_replyList[1] as String?,
details: pigeonVar_replyList[2],
);
} else if (pigeonVar_replyList[0] == null) {
throw PlatformException(
code: 'null-error',
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as bool?)!;
}
}
/// Opens Huawei Health client authorization UI. Returns whether user granted.
Future<HealthAuthorization> checkHealthAppAuthorization() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.checkHealthAppAuthorization$pigeonVar_messageChannelSuffix';
... ...
/*
* // Copyright 2013 The Flutter Authors. All rights reserved.
*/
import StandardMessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/StandardMessageCodec';
import BasicMessageChannel, { Reply } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BasicMessageChannel';
import { BinaryMessenger } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BinaryMessenger';
import MessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/MessageCodec';
import { ByteBuffer } from '@ohos/flutter_ohos/src/main/ets/util/ByteBuffer';
/** Error class for passing custom error details to Flutter via a thrown PlatformException. */
export class FlutterError implements Error {
/** The error code. */
public code: string;
/** The error name. */
public name: string;
/** The error message. */
public message: string;
/** The error stack. */
public stack?: string;
constructor(code: string, name: string, message: string, stack?: string) {
this.code = code;
this.name = name;
this.message = message;
this.stack = stack;
}
}
function wrapError(error: Error): Array<Object | null> {
let errorList: Array<Object | null> = new Array<Object | null>(3);
if (error instanceof FlutterError) {
let err: FlutterError = error as FlutterError;
errorList[0] = err.code;
errorList[1] = err.name;
errorList[2] = err.message;
} else {
errorList[0] = error.toString();
errorList[1] = error.name;
errorList[2] = "Cause: " + error.message + ", Stacktrace: " + error.stack;
}
return errorList;
}
/* Generated class from Pigeon that represents data sent in messages.*/
export class HealthAuthorization {
private status: number;
public setStatus(status: number): void {
this.status = status;
}
getStatus(): number {
return this.status;
}
private hasData: boolean;
public setHasData(hasData: boolean): void {
this.hasData = hasData;
}
getHasData(): boolean {
return this.hasData;
}
constructor(status: number, hasData: boolean) {
this.status = status;
this.hasData = hasData;
}
toList(): Array<Object | null> {
let arr: Array<Object | null> = new Array<Object | null>();
if (this.status === undefined || this.status === null) {
arr.push(null);
} else {
arr.push(this.status);
}
if (this.hasData === undefined || this.hasData === null) {
arr.push(null);
} else {
arr.push(this.hasData);
}
return arr;
}
static fromList(arr: Object[]): HealthAuthorization {
let statusObject: Object = arr[0];
const status: number = statusObject as number;
let hasDataObject: Object = arr[1];
const hasData: boolean = hasDataObject as boolean;
return new HealthAuthorization(status, hasData);
}
}
export class PigeonCodec extends StandardMessageCodec {
static readonly INSTANCE: PigeonCodec = new PigeonCodec();
getByte(n: number): number {
let byteArray = new Uint8Array(1);
byteArray[0] = n;
return byteArray[0] as number;
}
private constructor() {
super();
}
readValueOfType(type: number, buffer: ByteBuffer): ESObject {
switch (type) {
case this.getByte(129):
return HealthAuthorization.fromList(super.readValue(buffer) as Object[]);
default:
return super.readValueOfType(type, buffer);
}
}
writeValue(stream: ByteBuffer, value: ESObject): ESObject {
if (value instanceof HealthAuthorization) {
stream.writeUint8(this.getByte(129));
this.writeValue(stream, (value as HealthAuthorization).toList());
} else {
super.writeValue(stream, value);
}
}
}
export interface Result<T> {
success(result: T): void;
error(error: Error): void;
}
/* Generated abstract class from Pigeon that represents a handler of messages from Flutter.*/
export abstract class HealthKitHostApi {
/* Opens Huawei Health client authorization UI. Returns whether user granted.*/
abstract checkHealthAppAuthorization(result: Result<HealthAuthorization>): void;
abstract requestHealthClientAuthorization(result: Result<boolean>): void;
/** The codec used by HealthKitHostApi. */
static getCodec(): MessageCodec<Object> {
return PigeonCodec.INSTANCE;
}
/*Sets up an instance of `HealthKitHostApi` to handle messages through the `binaryMessenger`.*/
static setup(binaryMessenger: BinaryMessenger, api: HealthKitHostApi | null, messageChannelSuffix: string = ''): void {
const separatedMessageChannelSuffix: string = messageChannelSuffix !== '' ? '.' + messageChannelSuffix : '';
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, 'dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.checkHealthAppAuthorization' + separatedMessageChannelSuffix, HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object, reply: Reply<Object>) {
class ResultImp implements Result<HealthAuthorization>{
success(result: HealthAuthorization): void {
let res: Array<Object | null> = [];
res.push(result);
reply.reply(res);
}
error(error: Error): void {
let wrappedError: Array<Object | null> = wrapError(error);
reply.reply(wrappedError);
}
}
let resultCallback: Result<HealthAuthorization> = new ResultImp();
api!.checkHealthAppAuthorization(resultCallback);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, 'dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.requestHealthClientAuthorization' + separatedMessageChannelSuffix, HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object, reply: Reply<Object>) {
class ResultImp implements Result<boolean>{
success(result: boolean): void {
let res: Array<Object | null> = [];
res.push(result);
reply.reply(res);
}
error(error: Error): void {
let wrappedError: Array<Object | null> = wrapError(error);
reply.reply(wrappedError);
}
}
let resultCallback: Result<boolean> = new ResultImp();
api!.requestHealthClientAuthorization(resultCallback);
} });
} else {
channel.setMessageHandler(null);
}
}
}
}
... ...
... ... @@ -27,15 +27,6 @@ class HealthAuthorization {
)
@HostApi()
abstract class HealthKitHostApi {
// @optional
@async
String getHealthServerAuthUrl();
bool cancelHealthAppAuthorization();
// @required
/// Opens Huawei Health client authorization UI. Returns whether user granted.
@async
... ... @@ -43,87 +34,4 @@ abstract class HealthKitHostApi {
@async
bool requestHealthClientAuthorization();
/*
///测试使用- 导出本地存储的observer日志
@async
bool exportHealthObserverRecord();
/// Runs native health read and server upload pipeline.
@async
HealthUploadResult performHealthUpload();
@async
List<HealthUploadDataPoint> fetchHrvData(int startTime, int endTime);
@async
List<HealthUploadDataPoint> fetchHeartRateData(int startTime, int endTime);
@async
List<HealthUploadDataPoint> fetchWalkingHeartRateData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchRestingHeartRateData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchSleepingHeartRateData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchOxygenSaturationData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchActiveEnergyData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchExerciseData(int startTime, int endTime);
@async
List<HealthUploadDataPoint> fetchStandData(int startTime, int endTime);
@async
List<HealthUploadDataPoint> fetchStepCountData(int startTime, int endTime);
@async
List<HealthSleepUploadDataPoint> fetchSleepData(int startTime, int endTime);
@async
List<HealthUploadDataPoint> fetchSleepingWristTemperatureData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchRespiratoryRateData(
int startTime,
int endTime,
);
@async
List<HealthUploadDataPoint> fetchIrregularHeartRhythmData(
int startTime,
int endTime,
);
@async
HealthActivityTargetData? fetchActivityTargetData(
int startTime,
int endTime,
);
*/
}
... ...