Full Flutter App Sample
A fully operational widget tree for virtual try-on using the low-level client API.
example.dart
import 'package:flutter/material.dart';
import 'package:snapit_sdk/snapit_sdk.dart';
class VtonScreen extends StatefulWidget {
const VtonScreen({Key? key}) : super(key: key);
@override
State<VtonScreen> createState() => _VtonScreenState();
}
class _VtonScreenState extends State<VtonScreen> {
String? _outputUrl;
bool _isLoading = false;
late final SnapITClient _client;
@override
void initState() {
super.initState();
_client = SnapITClient(
apiKey: "smd_live_your_key_here",
userId: "user_abc123",
);
}
void _runGeneration() async {
setState(() => _isLoading = true);
try {
final resultUrl = await _client.generateTryOn(
garmentImageUrl: "https://apisdk.snapmydesign.com/sample/tshirt.png",
personImageUrl: "https://apisdk.snapmydesign.com/sample/model.png",
modelName: "medium",
);
setState(() => _outputUrl = resultUrl);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Try-On failed: $e")),
);
} finally {
setState(() => _isLoading = false);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("SnapIt VTON")),
body: Center(
child: _isLoading
? const CircularProgressIndicator()
: _outputUrl != null
? Image.network(
_outputUrl!,
fit: BoxFit.contain,
)
: ElevatedButton(
onPressed: _runGeneration,
child: const Text("Generate Try-On"),
),
),
);
}
}