waas_sdk 1.0.2 copy "waas_sdk: ^1.0.2" to clipboard
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 evento tokenReady.
  • 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.zionbancorendimento).

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

0
likes
0
points
209
downloads

Publisher

verified publisherpubdev.warren.com.br

Weekly Downloads

Flutter WebView com bridge WaaS para integrar a experiência WaaS (Wealth as a Service) em aplicativos nativos iOS e Android.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, webview_flutter, webview_flutter_wkwebview

More

Packages that depend on waas_sdk