保存图片
Future<void> _takePhoto() async {
print("[拍照] 开始拍照并保存");
if (_cameraController == null || !_cameraController!.value.isInitialized) {
print('[拍照] 相机未初始化,无法拍照');
return;
}
try {
print("[拍照] 正在拍摄...");
final XFile photo = await _cameraController!.takePicture();
print("[拍照] 拍摄成功: ${photo.path}");
final directory = await getApplicationDocumentsDirectory();
final String fileName = path.basename(photo.path);
final String filePath = path.join(directory.path, fileName);
await photo.saveTo(filePath);
print('[拍照] 照片保存到应用目录成功: $filePath');
try {
print("[拍照] 开始保存到相册...");
final result = await ImageGallerySaver.saveFile(filePath);
final bool success = result['isSuccess'] ?? false;
print("[拍照] 保存到相册结果: $success, 详情: $result");
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(success ? '照片已保存到相册' : '照片已保存到应用目录'),
duration: const Duration(seconds: 2),
),
);
}
} catch (e) {
print('[拍照] 保存照片到相册失败: $e');
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('照片已保存到应用,但未能保存到相册: $e')),
);
}
}
} catch (e) {
print('[拍照] 拍照错误: $e');
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('拍照失败: $e')),
);
}
}
}
_saveLocalImage() async {
print("[本地图像] 开始保存本地图像")
try {
RenderRepaintBoundary boundary = _globalKey.currentContext!
.findRenderObject() as RenderRepaintBoundary
print("[本地图像] 获取到 RenderRepaintBoundary 对象")
ui.Image image = await boundary.toImage()
print("[本地图像] 转换为 Image 对象成功")
ByteData? byteData =
await (image.toByteData(format: ui.ImageByteFormat.png))
print("[本地图像] 获取 ByteData 成功,大小: ${byteData?.lengthInBytes ?? 0} 字节")
if (byteData != null) {
print("[本地图像] 准备调用 ImageGallerySaver.saveImage")
final result =
await ImageGallerySaver.saveImage(byteData.buffer.asUint8List())
print("[本地图像] 保存结果: $result")
Utils.toast(result.toString())
} else {
print("[本地图像] 错误: ByteData 为空")
Utils.toast("保存失败: 无法获取图像数据")
}
} catch (e) {
print("[本地图像] 保存过程中发生错误: $e")
Utils.toast("保存失败: $e")
}
}
bool isHarmonyOS() {
try {
const String os = String.fromEnvironment('OPERATING_SYSTEM');
if (os.toLowerCase().contains('harmony') || os.toLowerCase() == 'ohos') {
return true;
}
if (Platform.isAndroid) {
const bool isHarmony = bool.fromEnvironment('IS_HARMONY_OS');
return isHarmony;
}
return false;
} catch (e) {
print('平台检测错误: $e');
return false;
}
}
bool isHarmonyOS() {
const String isHarmony = TargetPlatform.ohos;
if (os.toLowerCase().contains('harmony') || os.toLowerCase() == 'ohos') {
return true;
}
}