shaped_plugin 0.1.6
shaped_plugin: ^0.1.6 copied to clipboard
ShapedSdkCamera is a Flutter component that captures body images in the correct pattern to submit for Shaped IA API in order predict body measurements and body fat percentage.
ShapedSdkCamera #
Descrição #
O ShapedSdkCamera é um componente Flutter para captura de imagens e detecção de poses corporais. Ele permite capturar imagens de um usuário enquanto valida a postura e fornece feedback baseado na posição do corpo.
Instalação #
Para utilizar o ShapedSdkCamera, adicione o plugin ao seu projeto Flutter. No seu pubspec.yaml, adicione:
dependencies:
shaped_plugin: ^0.1.6
Dentro do seu projeto no arquivo local.properties, adicione suas credenciais disponibilizadas pelo administrador para garantir que as dependências privadas sejam resolvidas corretamente:
GITHUB_USER=seu_usuario
GITHUB_TOKEN=seu_token
Outro passo é a configuração para utilizar o ShapedSdkCamera no IOS, para isso vá até seu PodFile e cole o trecho a seguir, pode ser logo após platform :ios, 'xx.x':
use_simulator = ENV["USE_SIMULATOR"] == "true"
cocoapods_source = "https://cdn.cocoapods.org/"
shaped_source = use_simulator ?
"https://github.com/shapeddev/shaped-sdk-ios-specs-emulator.git" :
"https://github.com/shapeddev/shaped-sdk-ios-specs.git"
source cocoapods_source
source shaped_source
Em seguida, execute:
flutter pub get
Permissões Necessárias #
Para utilizar a câmera, adicione as seguintes permissões nos arquivos de configuração do seu projeto:
Android #
No arquivo AndroidManifest.xml, adicione:
<uses-permission android:name="android.permission.CAMERA"/>
iOS #
No arquivo Info.plist (localizado em ios/Runner/Info.plist), adicione:
<key>NSCameraUsageDescription</key>
<string>Este aplicativo precisa acessar a câmera para capturar imagens.</string>
Uso #
Importação #
No seu arquivo Dart, importe o pacote:
import 'package:shaped_plugin/shaped_plugin.dart';
Exemplo de Implementação #
Abaixo, um exemplo de como utilizar o ShapedSdkCamera dentro de um StatefulWidget:
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:shaped_plugin/shaped_plugin.dart';
class CameraPage extends StatefulWidget {
@override
_CameraPageState createState() => _CameraPageState();
}
class _CameraPageState extends State<CameraPage> {
bool _frontalValidation = true;
List<Uint8List> _capturedImages = [];
void _handleImages(List<Uint8List> capturedImages, bool frontalValidation) {
setState(() {
_capturedImages = capturedImages;
_frontalValidation = frontalValidation;
});
}
Future<void> _changeFrontalValidation(bool frontalValidation) async {
setState(() {
_frontalValidation = frontalValidation;
});
}
void _handleErrors(List<String> errors, int? countdown) {
print("Erros detectados: $errors");
}
void _onValidateDeviceLevel(bool validLevel) {
if (!validLevel) {
print("Dispositivo não está nivelado corretamente.");
}
}
Future<dynamic> showDialogCustom(
String description,
String labelButton,
void Function() clickButton,
bool barrierDismissible,
bool buttonWide,
) async {
return showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(description),
actions: [
TextButton(onPressed: clickButton, child: Text(labelButton)),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Detecção Corporal")),
body: Center(
child: ShapedSdkCamera(
frontalValidation: _frontalValidation,
capturedImages: _capturedImages,
onImagesCaptured: _handleImages,
onChangeFrontalValidation: _changeFrontalValidation,
onDeviceLevel: _onValidateDeviceLevel,
onErrorsImage: _handleErrors,
showDialog: showDialogCustom,
),
),
);
}
}
Parâmetros do ShapedSdkCamera #
| Parâmetro | Tipo | Descrição |
|---|---|---|
frontalValidation |
bool |
Define se a validação frontal está ativada. |
capturedImages |
List<Uint8List> |
Lista de imagens capturadas. |
onImagesCaptured |
Function(List<Uint8List>, bool) |
Callback acionado ao capturar imagens. |
onChangeFrontalValidation |
Future<void> Function(bool) |
Callback acionado quando há mudança na validação frontal. |
onDeviceLevel |
Function(bool) |
Callback para informar se o dispositivo está nivelado. |
onErrorsImage |
Function(List<String>, int?) |
Callback acionado ao detectar erros na captura. |
showDialog |
Future<dynamic> Function(String, String, void Function(), bool, bool) |
Função para exibir diálogos personalizados. |
currentLocale |
String? |
Idioma a ser usado pelo módulo nativo (ex: "pt-BR", "pt", "en-US", "en", "es-ES", "es", "pt-PT"). Te como default "pt-BR" |
Configuração para utilizar o ShapedSdkCamera em ambiente de desenvolvimento mockado #
Durante o desenvolvimento, é possível utilizar uma versão mockada da SDK, que simula a captura de imagens e a detecção de pose corporal sem precisar da câmera real ou de um dispositivo físico.
Esse modo é ideal para testes em simuladores iOS e para desenvolvimento de interface sem dependência do hardware.
O comportamento é controlado pela variável de ambiente USE_SIMULATOR.
🍎 iOS
No arquivo ios/Podfile, adicione o seguinte trecho logo após platform :ios, 'xx.x':
use_simulator = ENV["USE_SIMULATOR"] == "true"
cocoapods_source = "https://cdn.cocoapods.org/"
shaped_source = use_simulator ?
"https://github.com/shapeddev/shaped-sdk-ios-specs-emulator.git" :
"https://github.com/shapeddev/shaped-sdk-ios-specs.git"
source cocoapods_source
source shaped_source
Em seguida, execute um dos comandos abaixo:
# ✅ Para modo mockado (simulador)
USE_SIMULATOR=true cd ios && pod install
# 🚀 Para modo real (produção)
unset USE_SIMULATOR && cd ios && pod install
🤖 Android
No Android, a variável USE_SIMULATOR também pode ser usada para indicar o ambiente.
Ela pode ser definida em qualquer um dos seguintes locais:
-
Nas variáveis de ambiente do Flutter:
USE_SIMULATOR=true flutter run -
Ou no arquivo
android/local.properties:USE_SIMULATOR=true
Considerações Finais #
O ShapedSdkCamera fornece uma interface robusta para captura e validação de imagens corporais, podendo ser facilmente integrado a qualquer projeto Flutter. Certifique-se de conceder as permissões necessárias para a câmera antes de usá-lo.