lighthouse_north_client 0.2.3
lighthouse_north_client: ^0.2.3 copied to clipboard
SDK Flutter oficial para integrar o app do cliente à plataforma Lighthouse North de disparo push: registro de device token com evidência de consentimento (LGPD), heartbeat e opt-out fácil e gratuito. [...]
example/lib/main.dart
// Exemplo mínimo de integração com o SDK Lighthouse North.
//
// O SDK precisa de 3 coisas do seu app:
// 1. Inicialização com a app key (do painel, nunca hardcoded)
// 2. Registro de push a partir de uma ação do usuário
// 3. Um botão de descadastro sempre visível nas configurações
import 'package:lighthouse_north_client/lighthouse_north_client.dart';
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(home: PushSettingsPage());
}
}
class PushSettingsPage extends StatefulWidget {
const PushSettingsPage({super.key});
@override
State<PushSettingsPage> createState() => _PushSettingsPageState();
}
class _PushSettingsPageState extends State<PushSettingsPage> {
LighthouseNorthClient? _client;
String _status = 'Aguarde...';
@override
void initState() {
super.initState();
_init();
}
Future<void> _init() async {
// 1. INICIALIZAR — substitua pela sua app key do painel
// (Apps → Chaves → formato ak_...)
const appKey = String.fromEnvironment('LN_APP_KEY');
_client = await LighthouseNorthClient.init(
appKey,
apiBaseUrl: 'https://lighthousenorth.com.br',
);
setState(() => _status = 'SDK pronto');
}
Future<void> _registerForPush() async {
// 2. REGISTRAR — chame a partir de um botão "Ativar notificações"
// (NUNCA no initState — precisa de consentimento explícito)
try {
final result = await _client!.registerForPush(
contactRef: 'meu-user-id',
policyVersion: '2026-09',
);
await _client!.startHeartbeat();
setState(() => _status = 'Push ativo: ${result.tokenId}');
} catch (e) {
setState(() => _status = 'Erro: $e');
}
}
Future<void> _optOut() async {
// 3. DESCADASTRAR — sempre disponível, nunca lança exceção
await _client!.optOut();
setState(() => _status = 'Descadastrado');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Notificações')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_status),
const SizedBox(height: 24),
FilledButton(
onPressed: _registerForPush,
child: const Text('Ativar notificações'),
),
const SizedBox(height: 12),
TextButton(
onPressed: _optOut,
child: const Text('Descadastrar'),
),
],
),
),
);
}
}