waas_sdk 1.0.2
waas_sdk: ^1.0.2 copied to clipboard
Flutter WebView com bridge WaaS para integrar a experiência WaaS (Wealth as a Service) em aplicativos nativos iOS e Android.
waas_sdk #
SDK Flutter para integrar a experiência WaaS (Wealth as a Service) da Warren em aplicativos iOS e Android via WebView com bridge nativo.
Instalação #
dependencies:
waas_sdk: ^1.0.0
Quick Start #
import 'package:waas_sdk/waas_sdk.dart';
// Abra a experiência WaaS passando o token de acesso e o tenant
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SafeArea(
bottom: false,
child: WaasView(
token: accessToken, // JWT obtido via /authenticate
tenant: 'seu-tenant', // Identificador do tenant
),
),
),
);
Autenticação #
O SDK espera um access token JWT obtido via client_credentials no endpoint de autenticação WaaS. O token é injetado automaticamente na WebView — o app host é responsável apenas por obtê-lo e passá-lo ao WaasView.
// Exemplo simplificado de obtenção do token
final response = await http.post(
Uri.parse('https://api.waas.warren.com.br/authenticate'),
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'grant_type=client_credentials&client_id=$clientId&client_secret=$clientSecret',
);
final accessToken = jsonDecode(response.body)['access_token'];
API #
WaasView #
Widget principal do SDK. Renderiza a experiência WaaS dentro de uma WebView gerenciada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
token |
String |
Sim | JWT de acesso obtido via autenticação WaaS. |
tenant |
String |
Sim | Slug do tenant (ex: sample, plenapay). |
loadingPageBackgroundColor |
Color? |
Não | Cor de fundo do overlay de carregamento. |
loaderWidget |
Widget? |
Não | Widget customizado exibido durante o loading. |
WaaSChannel #
Bridge de comunicação entre a WebView e o app nativo.
injectToken(String token)— Injeta o token na WebView e dispara o eventotokenReady.injectBridgeScript()— Inicializa os listeners de mensagens na WebView.
WaaSMessageHandler #
Handler de mensagens recebidas da WebView via bridge. Processa comandos como closeWebView (fecha a tela e retorna ao app host).
extractFormattedClientId(String? token) #
Utilitário que extrai e formata o client_id do payload JWT (ex: banco-rendimento.zion → bancorendimento).
Bridge — Protocolo de Mensagens #
A comunicação entre a WebView e o app nativo segue o protocolo request/response:
// Request (WebView → App)
{
"id": "uuid",
"type": "request",
"method": "closeWebView",
"meta": { "tenantId": "sample", "bridgeVersion": "1.0.0" }
}
// Response (App → WebView)
{
"id": "uuid",
"origin": "sdk",
"type": "response",
"result": { "ok": true },
"meta": { "bridgeVersion": "1.0.0", "tenantId": "sample" }
}
Métodos suportados #
| Método | Descrição |
|---|---|
closeWebView |
Fecha a WebView e retorna ao app host via Navigator.pop(). |
Exemplo completo #
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:waas_sdk/waas_sdk.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(home: const HomePage());
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
Future<String> _fetchToken() async {
final uri = Uri.parse('https://api.waas.warren.com.br/authenticate');
final client = HttpClient();
final request = await client.postUrl(uri);
request.headers.set('Content-Type', 'application/x-www-form-urlencoded');
request.write('grant_type=client_credentials'
'&client_id=SEU_CLIENT_ID'
'&client_secret=SEU_CLIENT_SECRET');
final response = await request.close();
final body = await response.transform(utf8.decoder).join();
client.close(force: true);
return jsonDecode(body)['access_token'];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Meu App')),
floatingActionButton: FloatingActionButton(
onPressed: () async {
final token = await _fetchToken();
if (!context.mounted) return;
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => SafeArea(
bottom: false,
child: WaasView(
token: token,
tenant: 'seu-tenant',
loadingPageBackgroundColor: const Color(0xFF00463C),
),
),
),
);
},
child: const Icon(Icons.attach_money),
),
);
}
}
Para um exemplo com cache de token e
.env, veja o waas_playground no repositório.
Plataformas #
| Plataforma | Suporte |
|---|---|
| Android | ✅ |
| iOS | ✅ |
| Web | ❌ (usa dart:io) |
Requisitos #
- Flutter SDK
>=3.0.0 <4.0.0 webview_flutter: ^4.13.0
Licença #
MIT — Copyright (c) 2025 Warren Brasil