Flutter虚拟试鞋插件deepar_shoe_try_on_flutter的使用
Flutter虚拟试鞋插件deepar_shoe_try_on_flutter的使用
DeepAR Shoe Try-On Flutter 插件
官方DeepAR插件用于在Flutter应用中集成AR虚拟试鞋功能。
![Shoe Try-On Gif]
开始使用
在你的Flutter项目的pubspec.yaml
文件中添加以下依赖:
dependencies:
...
deepar_shoe_try_on_flutter: ^1.0.1-beta
导入插件:
import 'package:deepar_shoe_try_on_flutter/deepar_shoe_try_on_flutter.dart';
为你的iOS和/或Android应用添加相机权限。
使用方法
将DeepARShoeTryOnPreview
小部件添加到你的应用中:
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Flutter Simple Example')),
body: DeepARShoeTryOnPreview(link: Uri.parse("https://demo.deepar.ai/flutter/shoe/nike-airforce1.deepar")),
);
}
Android平台视图
该插件使用了平台视图(Platform Views)。
你需要确保在android/app/build.gradle
文件中设置正确的minSdkVersion
。如果之前的版本低于19,则需要进行如下修改:
android {
defaultConfig {
minSdkVersion 19
}
}
完整示例代码
以下是完整的示例代码,展示了如何在Flutter应用中使用deepar_shoe_try_on_flutter
插件。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:deepar_shoe_try_on_flutter/deepar_shoe_try_on_flutter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'DeepAR Shoe Try-On Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
useMaterial3: true,
),
home: const TryOnList(tryOns: [
TryOn(link: "https://demo.deepar.ai/flutter/shoe/nike-airforce1.deepar", name: "Nike Air Force 1", image: AssetImage("assets/shoe_images/67ebf869-c136-4ac4-87f9-d65caeeda6a0.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/nike-airforce-1-lv8.deepar", name: "Nike Air Force 1 LV8", image: AssetImage("assets/shoe_images/71afbadb-9239-45a1-8b8c-30cb44a8fef8.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/nike-dunk.deepar", name: "Nike Dunk", image: AssetImage("assets/shoe_images/1265ac25-947e-4379-8961-7d3153960163.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/on-run-cloudmonster.deepar", name: "On Running Cloudmonster", image: AssetImage("assets/shoe_images/642fb761-6351-4d5e-a8ea-deea10c1aec5.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/on-run-cloudrock.deepar", name: "On Running Cloudrock", image: AssetImage("assets/shoe_images/3c4d3ff2-0cd8-43cf-9d4d-3bfc6822ddd8.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/puma-suede-classic.deepar", name: "Puma Suede Classic", image: AssetImage("assets/shoe_images/18c9bd15-4fb2-43ee-a078-8994ae2b9bd1.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/puma-voltaire.deepar", name: "Puma Voltaire", image: AssetImage("assets/shoe_images/0183c63b-b18b-445f-9158-deee55727e6a.png")),
TryOn(link: "https://demo.deepar.ai/flutter/shoe/new-balance-574.deepar", name: "New Balance 574", image: AssetImage("assets/shoe_images/1515d524-c04d-45a7-abe8-1ef79c4afaa3.png")),
])
);
}
}
class TryOn {
const TryOn({required this.link, required this.name, required this.image});
final String link;
final String name;
final AssetImage image;
}
class TryOnListItem extends StatelessWidget {
TryOnListItem({
required this.tryOn,
required this.onTryOnClicked
}) : super(key: ObjectKey(tryOn));
final TryOn tryOn;
final VoidCallback onTryOnClicked;
[@override](/user/override)
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTryOnClicked,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Image(image: tryOn.image),
Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
flex: 4,
child: Text(
tryOn.name,
style: const TextStyle(
color: Colors.white,
backgroundColor: Colors.black,
fontSize: 20.0,
decoration: TextDecoration.none,
overflow: TextOverflow.visible
),
)
),
Expanded(
flex: 2,
child: ElevatedButton(onPressed: onTryOnClicked, child: const Text("AR Try-On"))
)
],
)
],
),
),
);
}
}
class TryOnList extends StatelessWidget {
const TryOnList({required this.tryOns, super.key});
final List<TryOn> tryOns;
[@override](/user/override)
Widget build(BuildContext context) {
return ListView(
padding: const EdgeInsets.symmetric(vertical: 8.0),
children: tryOns.map((tryOn) {
return TryOnListItem(
tryOn: tryOn,
onTryOnClicked: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => TryOnPreview(tryOn: tryOn)));
}
);
}).toList(),
);
}
}
class TryOnPreview extends StatelessWidget {
const TryOnPreview({required this.tryOn, super.key});
final TryOn tryOn;
[@override](/user/override)
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: const CupertinoNavigationBar(),
child: DeepARShoeTryOnPreview(link: Uri.parse(tryOn.link))
);
}
}
更多关于Flutter虚拟试鞋插件deepar_shoe_try_on_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter虚拟试鞋插件deepar_shoe_try_on_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
deepar_shoe_try_on_flutter
是一个用于在 Flutter 应用中实现虚拟试鞋功能的插件。它基于 DeepAR 的 AR 技术,允许用户在应用中虚拟试穿鞋子。以下是如何使用 deepar_shoe_try_on_flutter
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 deepar_shoe_try_on_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
deepar_shoe_try_on_flutter: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 DeepAR
在应用的入口处初始化 DeepAR。通常,这是在 main.dart
文件中完成的。
import 'package:flutter/material.dart';
import 'package:deepar_shoe_try_on_flutter/deepar_shoe_try_on_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DeepARShoeTryOn.initialize(apiKey: 'YOUR_DEEPAR_API_KEY');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ShoeTryOnScreen(),
);
}
}
3. 实现虚拟试鞋界面
创建一个新的页面或组件来显示虚拟试鞋界面。在这个页面中,你可以使用 DeepARShoeTryOnView
来显示 AR 试鞋效果。
import 'package:flutter/material.dart';
import 'package:deepar_shoe_try_on_flutter/deepar_shoe_try_on_flutter.dart';
class ShoeTryOnScreen extends StatefulWidget {
[@override](/user/override)
_ShoeTryOnScreenState createState() => _ShoeTryOnScreenState();
}
class _ShoeTryOnScreenState extends State<ShoeTryOnScreen> {
DeepARShoeTryOnController? _deepARController;
[@override](/user/override)
void initState() {
super.initState();
_initializeDeepAR();
}
Future<void> _initializeDeepAR() async {
_deepARController = await DeepARShoeTryOnController.create();
setState(() {});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Virtual Shoe Try-On'),
),
body: _deepARController != null
? DeepARShoeTryOnView(
controller: _deepARController!,
)
: Center(
child: CircularProgressIndicator(),
),
);
}
[@override](/user/override)
void dispose() {
_deepARController?.dispose();
super.dispose();
}
}
4. 加载鞋子模型
你可以使用 DeepARShoeTryOnController
来加载和切换不同的鞋子模型。
void _loadShoeModel(String shoeModelPath) async {
await _deepARController?.loadShoeModel(shoeModelPath);
}
5. 处理用户交互
你可以在界面上添加按钮或其他交互元素,允许用户切换鞋子模型或调整 AR 效果。
class ShoeTryOnScreen extends StatefulWidget {
[@override](/user/override)
_ShoeTryOnScreenState createState() => _ShoeTryOnScreenState();
}
class _ShoeTryOnScreenState extends State<ShoeTryOnScreen> {
DeepARShoeTryOnController? _deepARController;
[@override](/user/override)
void initState() {
super.initState();
_initializeDeepAR();
}
Future<void> _initializeDeepAR() async {
_deepARController = await DeepARShoeTryOnController.create();
setState(() {});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Virtual Shoe Try-On'),
),
body: _deepARController != null
? Column(
children: [
Expanded(
child: DeepARShoeTryOnView(
controller: _deepARController!,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton(
onPressed: () => _loadShoeModel('assets/shoe_model_1.deepar'),
child: Text('Shoe 1'),
),
ElevatedButton(
onPressed: () => _loadShoeModel('assets/shoe_model_2.deepar'),
child: Text('Shoe 2'),
),
],
),
],
)
: Center(
child: CircularProgressIndicator(),
),
);
}
void _loadShoeModel(String shoeModelPath) async {
await _deepARController?.loadShoeModel(shoeModelPath);
}
[@override](/user/override)
void dispose() {
_deepARController?.dispose();
super.dispose();
}
}