Commit ca0b4ce5d1f2f3035e7fa73fcc4fe0b5793332ee

Authored by 权海
1 parent b4e6d074

feat(ui):增加原生的图片裁剪

... ... @@ -382,6 +382,13 @@ interface PlatformHostApi {
* 注意catch flutter error
*/
fun uploadFile(filePath: String, resourceType: HResourceType, callback: (Result<String?>) -> Unit)
/**
* 原生切图片,
* imageUrl: 图片本地地址
* maxKB: 压缩大小
* width.height 切图后输出的大小
*/
fun performCropImage(imageUrl: String, maxKB: Long?, width: Long?, height: Long?, callback: (Result<String?>) -> Unit)
companion object {
/** The codec used by PlatformHostApi. */
... ... @@ -693,6 +700,29 @@ interface PlatformHostApi {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.PlatformHostApi.performCropImage$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val imageUrlArg = args[0] as String
val maxKBArg = args[1] as Long?
val widthArg = args[2] as Long?
val heightArg = args[3] as Long?
api.performCropImage(imageUrlArg, maxKBArg, widthArg, heightArg) { result: Result<String?> ->
val error = result.exceptionOrNull()
if (error != null) {
reply.reply(PlatformApiPigeonUtils.wrapError(error))
} else {
val data = result.getOrNull()
reply.reply(PlatformApiPigeonUtils.wrapResult(data))
}
}
}
} else {
channel.setMessageHandler(null)
}
}
}
}
}
... ...
... ... @@ -404,6 +404,11 @@ protocol PlatformHostApi {
/// 上传文件到云端
/// 注意catch flutter error
func uploadFile(filePath: String, resourceType: HResourceType, completion: @escaping (Result<String?, Error>) -> Void)
/// 原生切图片,
/// imageUrl: 图片本地地址
/// maxKB: 压缩大小
/// width.height 切图后输出的大小
func performCropImage(imageUrl: String, maxKB: Int64?, width: Int64?, height: Int64?, completion: @escaping (Result<String?, Error>) -> Void)
}
/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
... ... @@ -689,5 +694,29 @@ class PlatformHostApiSetup {
} else {
uploadFileChannel.setMessageHandler(nil)
}
/// 原生切图片,
/// imageUrl: 图片本地地址
/// maxKB: 压缩大小
/// width.height 切图后输出的大小
let performCropImageChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.doublefeel_flutter.PlatformHostApi.performCropImage\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec)
if let api = api {
performCropImageChannel.setMessageHandler { message, reply in
let args = message as! [Any?]
let imageUrlArg = args[0] as! String
let maxKBArg: Int64? = nilOrValue(args[1])
let widthArg: Int64? = nilOrValue(args[2])
let heightArg: Int64? = nilOrValue(args[3])
api.performCropImage(imageUrl: imageUrlArg, maxKB: maxKBArg, width: widthArg, height: heightArg) { result in
switch result {
case .success(let res):
reply(wrapResult(res))
case .failure(let error):
reply(wrapError(error))
}
}
}
} else {
performCropImageChannel.setMessageHandler(nil)
}
}
}
... ...
... ... @@ -141,6 +141,11 @@ final class PlatformHostApiImpl: PlatformHostApi {
}
}
}
func performCropImage(imageUrl: String, maxKB: Int64?, width: Int64?, height: Int64?, completion: @escaping (Result<String?, any Error>) -> Void) {
}
// 登录
func updateLoginInfo(jsonString: String, baseUrl: String) throws {
... ...
... ... @@ -77,6 +77,9 @@ class CreateWatchThemeController extends GetxController {
return;
}
final croppedImage =
await _platformHostApi.performCropImage(image.path, 100, 280, 280);
/*
final croppedImage = await ImageCropper().cropImage(
sourcePath: image.path,
aspectRatio: const CropAspectRatio(ratioX: 1, ratioY: 1),
... ... @@ -95,11 +98,12 @@ class CreateWatchThemeController extends GetxController {
),
],
);
*/
if (croppedImage == null) {
return;
}
final savedPath = await _saveCroppedImage(croppedImage.path, index);
final savedPath = await _saveCroppedImage(croppedImage, index);
await _deleteReplacedImage(customImagePaths[index], savedPath);
customImagePaths[index] = savedPath;
final taskVersion = ++_imageTaskVersions[index];
... ...
... ... @@ -15,22 +15,21 @@ PlatformException _createConnectionError(String channelName) {
message: 'Unable to establish connection on channel: "$channelName".',
);
}
bool _deepEquals(Object? a, Object? b) {
if (a is List && b is List) {
return a.length == b.length &&
a.indexed
.every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]));
.every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]));
}
if (a is Map && b is Map) {
return a.length == b.length &&
a.entries.every((MapEntry<Object?, Object?> entry) =>
(b as Map<Object?, Object?>).containsKey(entry.key) &&
_deepEquals(entry.value, b[entry.key]));
return a.length == b.length && a.entries.every((MapEntry<Object?, Object?> entry) =>
(b as Map<Object?, Object?>).containsKey(entry.key) &&
_deepEquals(entry.value, b[entry.key]));
}
return a == b;
}
class HealthKitRawDataPoint {
HealthKitRawDataPoint({
required this.dataType,
... ... @@ -61,8 +60,7 @@ class HealthKitRawDataPoint {
}
Object encode() {
return _toList();
}
return _toList(); }
static HealthKitRawDataPoint decode(Object result) {
result as List<Object?>;
... ... @@ -89,7 +87,8 @@ class HealthKitRawDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList());
int get hashCode => Object.hashAll(_toList())
;
}
class HealthKitRawSleepDataPoint {
... ... @@ -110,23 +109,20 @@ class HealthKitRawSleepDataPoint {
}
Object encode() {
return _toList();
}
return _toList(); }
static HealthKitRawSleepDataPoint decode(Object result) {
result as List<Object?>;
return HealthKitRawSleepDataPoint(
dataType: result[0]! as int,
sleepDataPoints:
(result[1] as List<Object?>?)!.cast<HealthKitRawDataPoint>(),
sleepDataPoints: (result[1] as List<Object?>?)!.cast<HealthKitRawDataPoint>(),
);
}
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
bool operator ==(Object other) {
if (other is! HealthKitRawSleepDataPoint ||
other.runtimeType != runtimeType) {
if (other is! HealthKitRawSleepDataPoint || other.runtimeType != runtimeType) {
return false;
}
if (identical(this, other)) {
... ... @@ -137,7 +133,8 @@ class HealthKitRawSleepDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList());
int get hashCode => Object.hashAll(_toList())
;
}
class HealthKitRawWorkoutDataPoint {
... ... @@ -162,8 +159,7 @@ class HealthKitRawWorkoutDataPoint {
}
Object encode() {
return _toList();
}
return _toList(); }
static HealthKitRawWorkoutDataPoint decode(Object result) {
result as List<Object?>;
... ... @@ -177,8 +173,7 @@ class HealthKitRawWorkoutDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
bool operator ==(Object other) {
if (other is! HealthKitRawWorkoutDataPoint ||
other.runtimeType != runtimeType) {
if (other is! HealthKitRawWorkoutDataPoint || other.runtimeType != runtimeType) {
return false;
}
if (identical(this, other)) {
... ... @@ -189,7 +184,8 @@ class HealthKitRawWorkoutDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList());
int get hashCode => Object.hashAll(_toList())
;
}
class HealthKitRawMotionDataPoint {
... ... @@ -214,8 +210,7 @@ class HealthKitRawMotionDataPoint {
}
Object encode() {
return _toList();
}
return _toList(); }
static HealthKitRawMotionDataPoint decode(Object result) {
result as List<Object?>;
... ... @@ -229,8 +224,7 @@ class HealthKitRawMotionDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
bool operator ==(Object other) {
if (other is! HealthKitRawMotionDataPoint ||
other.runtimeType != runtimeType) {
if (other is! HealthKitRawMotionDataPoint || other.runtimeType != runtimeType) {
return false;
}
if (identical(this, other)) {
... ... @@ -241,7 +235,8 @@ class HealthKitRawMotionDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList());
int get hashCode => Object.hashAll(_toList())
;
}
class HealthKitRawActivityDataPoint {
... ... @@ -294,8 +289,7 @@ class HealthKitRawActivityDataPoint {
}
Object encode() {
return _toList();
}
return _toList(); }
static HealthKitRawActivityDataPoint decode(Object result) {
result as List<Object?>;
... ... @@ -316,8 +310,7 @@ class HealthKitRawActivityDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
bool operator ==(Object other) {
if (other is! HealthKitRawActivityDataPoint ||
other.runtimeType != runtimeType) {
if (other is! HealthKitRawActivityDataPoint || other.runtimeType != runtimeType) {
return false;
}
if (identical(this, other)) {
... ... @@ -328,9 +321,11 @@ class HealthKitRawActivityDataPoint {
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList());
int get hashCode => Object.hashAll(_toList())
;
}
class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec();
@override
... ... @@ -338,19 +333,19 @@ class _PigeonCodec extends StandardMessageCodec {
if (value is int) {
buffer.putUint8(4);
buffer.putInt64(value);
} else if (value is HealthKitRawDataPoint) {
} else if (value is HealthKitRawDataPoint) {
buffer.putUint8(129);
writeValue(buffer, value.encode());
} else if (value is HealthKitRawSleepDataPoint) {
} else if (value is HealthKitRawSleepDataPoint) {
buffer.putUint8(130);
writeValue(buffer, value.encode());
} else if (value is HealthKitRawWorkoutDataPoint) {
} else if (value is HealthKitRawWorkoutDataPoint) {
buffer.putUint8(131);
writeValue(buffer, value.encode());
} else if (value is HealthKitRawMotionDataPoint) {
} else if (value is HealthKitRawMotionDataPoint) {
buffer.putUint8(132);
writeValue(buffer, value.encode());
} else if (value is HealthKitRawActivityDataPoint) {
} else if (value is HealthKitRawActivityDataPoint) {
buffer.putUint8(133);
writeValue(buffer, value.encode());
} else {
... ... @@ -361,15 +356,15 @@ class _PigeonCodec extends StandardMessageCodec {
@override
Object? readValueOfType(int type, ReadBuffer buffer) {
switch (type) {
case 129:
case 129:
return HealthKitRawDataPoint.decode(readValue(buffer)!);
case 130:
case 130:
return HealthKitRawSleepDataPoint.decode(readValue(buffer)!);
case 131:
case 131:
return HealthKitRawWorkoutDataPoint.decode(readValue(buffer)!);
case 132:
case 132:
return HealthKitRawMotionDataPoint.decode(readValue(buffer)!);
case 133:
case 133:
return HealthKitRawActivityDataPoint.decode(readValue(buffer)!);
default:
return super.readValueOfType(type, buffer);
... ... @@ -381,11 +376,9 @@ class HealthKitRawDataHostApi {
/// Constructor for [HealthKitRawDataHostApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform.
HealthKitRawDataHostApi(
{BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
HealthKitRawDataHostApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
: pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix =
messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
... ... @@ -394,10 +387,8 @@ class HealthKitRawDataHostApi {
/// 是否有AppleHealth数据
Future<bool> hasHealthData() async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.hasHealthData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.hasHealthData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
... ... @@ -424,18 +415,14 @@ class HealthKitRawDataHostApi {
}
/// 从AppleHealth 中读取原始数据
Future<List<HealthKitRawDataPoint>> getHealthKitRawData(
int dataType, int startTime, int endTime) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<List<HealthKitRawDataPoint>> getHealthKitRawData(int dataType, int startTime, int endTime) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[dataType, startTime, endTime]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[dataType, startTime, endTime]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -452,17 +439,14 @@ class HealthKitRawDataHostApi {
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as List<Object?>?)!
.cast<HealthKitRawDataPoint>();
return (pigeonVar_replyList[0] as List<Object?>?)!.cast<HealthKitRawDataPoint>();
}
}
/// 原生数据上传
Future<bool> performHealthDataUpload() async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performHealthDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performHealthDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
... ... @@ -489,27 +473,14 @@ class HealthKitRawDataHostApi {
}
/// 向原生同步数据库路径
Future<bool> syncDatabase({
required String hrDataPath,
required String hrvDataPath,
required String sleepDataPath,
required String avgRealtimeStressDataPath,
}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.syncDatabase$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<bool> syncDatabase({required String hrDataPath, required String hrvDataPath, required String sleepDataPath, required String avgRealtimeStressDataPath, }) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.syncDatabase$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel
.send(<Object?>[
hrDataPath,
hrvDataPath,
sleepDataPath,
avgRealtimeStressDataPath
]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[hrDataPath, hrvDataPath, sleepDataPath, avgRealtimeStressDataPath]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -532,16 +503,13 @@ class HealthKitRawDataHostApi {
/// 上传心率 - 实时压力数据, 返回上传截止的时间戳, 方便flutter修改数据库
Future<int> performHRDataUpload({required String sqliteFilePath}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performHRDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performHRDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -564,16 +532,13 @@ class HealthKitRawDataHostApi {
/// 上传HRV - HRV压力数据, 返回上传截止的时间戳,方便flutter 修改数据库
Future<int> performHRVDataUpload({required String sqliteFilePath}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performHRVDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performHRVDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -595,18 +560,14 @@ class HealthKitRawDataHostApi {
}
/// 上传睡眠统计数据
Future<int> performSleepAnalysisDataUpload(
{required String sqliteFilePath}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performSleepAnalysisDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<int> performSleepAnalysisDataUpload({required String sqliteFilePath}) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performSleepAnalysisDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -628,18 +589,14 @@ class HealthKitRawDataHostApi {
}
/// 上传当前实时压力(统计维度是当天)
Future<int> performAvgRealtimeStressDataUpload(
{required String sqliteFilePath}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performAvgRealtimeStressDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<int> performAvgRealtimeStressDataUpload({required String sqliteFilePath}) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.performAvgRealtimeStressDataUpload$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[sqliteFilePath]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -661,18 +618,14 @@ class HealthKitRawDataHostApi {
}
/// 从从AppleHealth中读取睡眠数据
Future<List<HealthKitRawSleepDataPoint>> getHealthKitRawSleepData(
int startTime, int endTime) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawSleepData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<List<HealthKitRawSleepDataPoint>> getHealthKitRawSleepData(int startTime, int endTime) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawSleepData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[startTime, endTime]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[startTime, endTime]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -689,24 +642,19 @@ class HealthKitRawDataHostApi {
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as List<Object?>?)!
.cast<HealthKitRawSleepDataPoint>();
return (pigeonVar_replyList[0] as List<Object?>?)!.cast<HealthKitRawSleepDataPoint>();
}
}
/// 从从AppleHealth中读取活动统计数据
Future<List<HealthKitRawActivityDataPoint>> getHealthKitRawActivityData(
int startTime, int endTime) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawActivityData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<List<HealthKitRawActivityDataPoint>> getHealthKitRawActivityData(int startTime, int endTime) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawActivityData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[startTime, endTime]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[startTime, endTime]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -723,24 +671,19 @@ class HealthKitRawDataHostApi {
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as List<Object?>?)!
.cast<HealthKitRawActivityDataPoint>();
return (pigeonVar_replyList[0] as List<Object?>?)!.cast<HealthKitRawActivityDataPoint>();
}
}
/// 从从AppleHealth中读取锻炼数据
Future<List<HealthKitRawWorkoutDataPoint>> getHealthKitRawWorkoutData(
int startTime, int endTime) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawWorkoutData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<List<HealthKitRawWorkoutDataPoint>> getHealthKitRawWorkoutData(int startTime, int endTime) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.getHealthKitRawWorkoutData$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[startTime, endTime]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[startTime, endTime]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -757,25 +700,20 @@ class HealthKitRawDataHostApi {
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (pigeonVar_replyList[0] as List<Object?>?)!
.cast<HealthKitRawWorkoutDataPoint>();
return (pigeonVar_replyList[0] as List<Object?>?)!.cast<HealthKitRawWorkoutDataPoint>();
}
}
/// 原生是否通知了flutter ,apple health数据变化,让native 记录这次调用记录
/// 需要保存引起此次计算的数据变化类型列表、当前时间
Future<bool> saveNativeCallFlutterChange(
{required List<int> relativeDataTypes}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.saveNativeCallFlutterChange$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<bool> saveNativeCallFlutterChange({required List<int> relativeDataTypes}) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.saveNativeCallFlutterChange$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[relativeDataTypes]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[relativeDataTypes]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -798,18 +736,14 @@ class HealthKitRawDataHostApi {
/// caculate 一旦完成,让native 存储这次的计算记录
/// 需要保存引起此次计算的数据变化类型列表、当前时间
Future<bool> saveFlutterCaculateFinished(
{required List<int> relativeDataTypes}) async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.saveFlutterCaculateFinished$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
Future<bool> saveFlutterCaculateFinished({required List<int> relativeDataTypes}) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.saveFlutterCaculateFinished$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[relativeDataTypes]);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[relativeDataTypes]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) {
... ... @@ -832,10 +766,8 @@ class HealthKitRawDataHostApi {
/// 让原生分享出来本地的记录文件
Future<bool> shareNativeAppleHealthObserverRecord() async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.shareNativeAppleHealthObserverRecord$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.shareNativeAppleHealthObserverRecord$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
... ... @@ -863,10 +795,8 @@ class HealthKitRawDataHostApi {
/// 让原生分享出来flutter的记录文件
Future<bool> shareFlutterObserverRecord() async {
final String pigeonVar_channelName =
'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.shareFlutterObserverRecord$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.HealthKitRawDataHostApi.shareFlutterObserverRecord$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
... ...
... ... @@ -815,4 +815,31 @@ class PlatformHostApi {
return (pigeonVar_replyList[0] as String?);
}
}
/// 原生切图片,
/// imageUrl: 图片本地地址
/// maxKB: 压缩大小
/// width.height 切图后输出的大小
Future<String?> performCropImage(String imageUrl, int? maxKB, int? width, int? height) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.doublefeel_flutter.PlatformHostApi.performCropImage$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[imageUrl, maxKB, width, height]);
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 {
return (pigeonVar_replyList[0] as String?);
}
}
}
... ...
... ... @@ -148,12 +148,12 @@ abstract class HealthKitRawDataHostApi {
/// 原生是否通知了flutter ,apple health数据变化,让native 记录这次调用记录
/// 需要保存引起此次计算的数据变化类型列表、当前时间
@async
bool saveNativeCallFlutterChange({List<int> relativeDataTypes});
bool saveNativeCallFlutterChange({required List<int> relativeDataTypes});
/// caculate 一旦完成,让native 存储这次的计算记录
/// 需要保存引起此次计算的数据变化类型列表、当前时间
@async
bool saveFlutterCaculateFinished({List<int> relativeDataTypes});
bool saveFlutterCaculateFinished({required List<int> relativeDataTypes});
/// 让原生分享出来本地的记录文件
@async
... ...
... ... @@ -174,4 +174,12 @@ abstract class PlatformHostApi {
/// 注意catch flutter error
@async
String? uploadFile(String filePath, HResourceType resourceType);
/// 原生切图片,
/// imageUrl: 图片本地地址
/// maxKB: 压缩大小
/// width.height 切图后输出的大小
@async
String? performCropImage(
String imageUrl, int? maxKB, int? width, int? height);
}
... ...