Flutter设计资源整合插件designhubz的使用
Flutter设计资源整合插件designhubz的使用
在设计hubz中,我们通过全球领先的AR技术帮助品牌以沉浸式的方式与消费者建立联系。
我们正在通过下一代电子商务界面来改变在线购物体验,该技术已被一些全球最大的品牌和零售商采用。
Designhubz | 眼镜虚拟试戴 Flutter 插件
本插件可将Designhubz眼镜虚拟试戴AR功能集成到您的Flutter应用中。
Android | iOS | |
---|---|---|
支持 | SDK 21+ | iOS 10+ |
使用
要使用此插件,请在您的pubspec.yaml
文件中添加designhubz
作为依赖项。
入门指南
Android
- 在
android/app/build.gradle
中将minSdkVersion
设置为21,并将compileSdkVersion
设置为至少34:
android {
compileSdkVersion 34
...
defaultConfig {
minSdkVersion 21
}
}
iOS
无需进行额外步骤。
Flutter
您必须在Android和iOS上授予相机权限。您可以选择任何适合您的包来完成此操作。例如,在使用任何试戴小部件之前,可以使用permission_handler
。
您可以在您的小部件树中添加EyewearTryOnWidget
用于眼镜试戴,添加CCLTryOnWidget
用于隐形眼镜试戴。
该小部件可以通过传递给小部件的onTryOnReady
回调的相应TryOnController
进行控制。
请参阅示例以获取完整的示例应用。检查example/lib/eyewear_tryon_demo_page.dart
以获取眼镜小部件的详细用法,以及example/lib/ccl_tryon_demo_page.dart
以获取隐形眼镜小部件的用法。
片段
- 添加
EyewearTryOnWidget
import 'package:designhubz/designhubz.dart';
import 'package:flutter/material.dart';
class DesignHubzDemo extends StatefulWidget {
const DesignHubzDemo({super.key});
@override
State<DesignHubzDemo> createState() => _DesignHubzDemoState();
}
class _DesignHubzDemoState extends State<DesignHubzDemo> {
late TryOnController _tryOnController;
@override
Widget build(BuildContext context) {
return Scaffold(
body: EyewearTryOnWidget(
organizationId: "your_organization_id",
onTryOnReady: (controller) {
_tryOnController = controller;
},
),
);
}
}
- 一旦从
onTryOnReady
回调接收到EyewearTryOnController
,您就可以在其上调用各种方法。
相同的操作也可以对CCLTryOnWidget
及其控制器CCLTryOnController
进行。
TryOnControllers通用方法
许多方法在EyewearTryOnController
和CCLTryOnController
中都是通用的。首先讨论这些通用的方法。
所有方法都可能抛出TryOnError
,如果由于网络或其他错误导致TryOn小部件与应用程序之间的通信失败,则会抛出此异常。更多关于抛出错误的详细信息在TryOnError
的message
参数中。
setUserId()
您需要在加载任何产品之前调用setUserId
函数。
请求
参数名 | 类型 | 描述 |
---|---|---|
userId | string | 必填。您的用户ID |
示例
_tryOnController.setUserId('user_id');
响应
此函数没有返回值。
loadProduct()
它将加载提供的productId
关联的产品。您可以传递一个可选的progressHandler
回调以获取产品的加载进度。
请求
参数名 | 类型 | 描述 |
---|---|---|
productId | string | 必填。产品ID |
progressHandler | ProductLoadingProgressCallback | 可选。接收产品加载进度的回调 |
响应
如果成功,它将返回VTOProduct
。
VTOProduct {
String productKey;
List<String> variations;
}
如果productId
无效或无法找到产品,它可能会抛出TryOnError
。
takeSnapshot()
它将捕获TryOn小部件内显示内容的快照图像。
请求
此函数没有必需的参数。
响应
它将以Uint8List
形式返回图像数据,该数据可以用于Image
小部件以显示图像。
FutureBuilder(
future: _tryOnController.takeSnapshot(),
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.hasError) {
return Text("Error:${snapshot.error}");
}
final image = snapshot.data;
if (image == null) {
return const Text("No image captured");
}
return Image.memory(image);
} else {
return const Text(
"Loading...",
textAlign: TextAlign.center,
);
}
},
);
EyewearTryOnController
特定方法
这些方法仅在EyewearTryOnController
中可用。
switchMode()
它将在3d
模式和tryon
模式之间切换。
请求
此函数没有必需的参数。
响应
此函数没有返回值。
fetchRecommendations()
它将获取一定数量的推荐。
请求
参数名 | 类型 | 描述 |
---|---|---|
count | number | 必填。推荐数量 |
响应
如果成功,它将返回ScoredRecommendation
列表,其中包括产品数据(包括变体)。
class ScoredRecommendation {
final String productKey;
final num score;
}
示例响应:
[
ScoredRecommendation(
productKey: "000209-0107",
score: 10,
),
ScoredRecommendation(
productKey: "000838-0118",
score: 10,
),
ScoredRecommendation(
productKey: "000241-2906",
score: 10,
),
];
事件处理程序
EyewearTryOnWidget
和CCLTryOnWidget
都提供了以下事件处理回调:
onUpdateTryonStatus
当小部件的状态发生变化时将被调用。
参数
参数名 | 类型 | 描述 |
---|---|---|
status | TryOnStatus | 小部件状态(idle ,loading ,read ) |
onError
当发生错误时将被调用。
参数
参数名 | 类型 | 描述 |
---|---|---|
error | string | 交互时的错误信息 |
onTryOnRecovering
TryOn小部件在内存压力下崩溃后可以自动恢复。这在低端Android设备上很少发生。
恢复过程会重新加载用户、已加载的产品和正在使用的模式。当TryOn小部件恢复时,您可以检查isInRecoveryProcess
标志以显示加载指示器。
参数
参数名 | 类型 | 描述 |
---|---|---|
isInRecoveryProcess | bool | 指示TryOn是否在恢复过程中 |
EyewearTryOnWidget
特定事件处理程序
这些事件处理程序仅在EyewearTryOnWidget
中可用。
onUpdateTrackingStatus
当面部跟踪状态发生变化时将被调用。
参数
参数名 | 类型 | 描述 |
---|---|---|
trackingStatus | TryOnTrackingStatus | 跟踪状态 |
trackingStatus
将是以下值之一:
idle
cameraNotFound
faceNotFound
analyzing
tracking
onUpdateUserInfo
当用户信息更新时将被调用。
参数
参数名 | 类型 | 描述 |
---|---|---|
userInfo | TryOnUserInfo | 详细的用户信息 |
TryOnUserInfo
类型如下所示:
class TryOnUserInfo {
/// 可以为以下之一:"Small","Medium","Large"
String size;
/// 眼睛之间的距离
num eyeSize;
/// 瞳孔间距
num ipd;
}
更多关于Flutter设计资源整合插件designhubz的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter设计资源整合插件designhubz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
designhubz
是一个用于 Flutter 的设计资源整合插件,旨在帮助开发者更高效地管理和使用设计资源,如颜色、字体、图标、间距等。通过 designhubz
,开发者可以轻松地将设计系统与 Flutter 应用集成,确保 UI 的一致性和可维护性。
以下是如何使用 designhubz
插件的简要指南:
1. 安装 designhubz
插件
首先,你需要在 pubspec.yaml
文件中添加 designhubz
依赖:
dependencies:
flutter:
sdk: flutter
designhubz: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
以安装依赖。
2. 初始化 designhubz
在你的 Flutter 应用中,初始化 designhubz
插件。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:designhubz/designhubz.dart';
void main() {
Designhubz.initialize(
theme: DesignhubzTheme(
colors: DesignhubzColors(
primary: Colors.blue,
secondary: Colors.green,
// 其他颜色
),
typography: DesignhubzTypography(
headline1: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
bodyText1: TextStyle(fontSize: 16),
// 其他文本样式
),
spacing: DesignhubzSpacing(
small: 8.0,
medium: 16.0,
large: 24.0,
// 其他间距
),
// 其他设计资源
),
);
runApp(MyApp());
}
3. 使用 designhubz
资源
在应用的任何地方,你都可以通过 Designhubz
类访问设计资源。例如,使用颜色、字体和间距:
import 'package:flutter/material.dart';
import 'package:designhubz/designhubz.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Designhubz Example'),
backgroundColor: Designhubz.colors.primary,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Hello, Designhubz!',
style: Designhubz.typography.headline1,
),
SizedBox(height: Designhubz.spacing.medium),
Text(
'This is a sample text using Designhubz typography.',
style: Designhubz.typography.bodyText1,
),
],
),
),
);
}
}
4. 自定义和扩展
designhubz
允许你根据需要自定义和扩展设计资源。你可以通过修改 DesignhubzTheme
中的属性来调整颜色、字体、间距等。此外,你还可以添加自定义的设计资源来满足特定的项目需求。
5. 动态切换主题
designhubz
支持动态切换主题。你可以通过调用 Designhubz.updateTheme
方法来更新应用的主题:
Designhubz.updateTheme(
DesignhubzTheme(
colors: DesignhubzColors(
primary: Colors.red,
secondary: Colors.orange,
// 其他颜色
),
// 其他设计资源
),
);