push_service_client 0.1.1 copy "push_service_client: ^0.1.1" to clipboard
push_service_client: ^0.1.1 copied to clipboard

Cliente Flutter para o Push Service — regista devices e recebe push notifications (FCM/APNs).

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:push_service_client/push_service_client.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // TODO: substituir pelos valores da tua app no Push Service.
  final push = PushService(
    apiToken: 'SEU_TOKEN_DA_API',
    appId: 'slug-da-tua-app',
  );

  await push.initialize(
    country: 'PT',
    language: 'pt',
    tags: {'app': 'exemplo'},
    onOpened: (notification) {
      debugPrint('Push aberto: ${notification.title} — ${notification.data}');
    },
    onReceived: (notification) {
      debugPrint('Push recebido: ${notification.title}');
    },
  );

  runApp(PushServiceExampleApp(push: push));
}

class PushServiceExampleApp extends StatefulWidget {
  const PushServiceExampleApp({super.key, required this.push});

  final PushService push;

  @override
  State<PushServiceExampleApp> createState() => _PushServiceExampleAppState();
}

class _PushServiceExampleAppState extends State<PushServiceExampleApp> {
  String get _status => widget.push.device != null
      ? 'Device registado!'
      : 'A registar...';

  Future<void> _sendTestPush() async {
    setState(() {});

    try {
      final push = await widget.push.sendPush(
        title: 'Olá do exemplo!',
        body: 'Esta notificação foi enviada a partir da app Flutter.',
        segment: {'platforms': [widget.push.device!.platform]},
      );

      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Push enviado (status: ${push.status})')),
      );
    } catch (e) {
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Erro ao enviar: $e')),
      );
    }
  }

  Future<void> _unsubscribe() async {
    final device = widget.push.device;
    if (device == null) return;

    try {
      await widget.push.unsubscribe(device.id);
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Device desativado (não recebe pushes).')),
      );
    } catch (e) {
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Erro: $e')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    final device = widget.push.device;

    return MaterialApp(
      title: 'Push Service Exemplo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: const Color(0xFF576CDB),
          brightness: Brightness.light,
        ),
        useMaterial3: true,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Push Service — Exemplo'),
          backgroundColor: const Color(0xFF576CDB),
          foregroundColor: Colors.white,
        ),
        body: Padding(
          padding: const EdgeInsets.all(24),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(16),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      const Text('Estado',
                          style: TextStyle(fontWeight: FontWeight.bold)),
                      const SizedBox(height: 8),
                      Text(_status),
                      if (device != null) ...[
                        const SizedBox(height: 8),
                        Text('Player ID: ${device.playerId}'),
                        Text('Plataforma: ${device.platform}'),
                        Text('Subscrito: ${device.subscribed}'),
                      ],
                    ],
                  ),
                ),
              ),
              const SizedBox(height: 16),
              FilledButton.icon(
                onPressed: device == null ? null : _sendTestPush,
                icon: const Icon(Icons.send),
                label: const Text('Enviar push de teste'),
              ),
              const SizedBox(height: 8),
              OutlinedButton.icon(
                onPressed: device == null ? null : _unsubscribe,
                icon: const Icon(Icons.notifications_off),
                label: const Text('Desativar notificações'),
              ),
              const Spacer(),
              const Text(
                'Configura o token e o slug da app no ficheiro main.dart '
                'para ligar ao teu Push Service. Não te esqueças de adicionar '
                'o google-services.json (Android) ou GoogleService-Info.plist (iOS).',
                style: TextStyle(fontSize: 12, color: Colors.grey),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
0
points
315
downloads

Publisher

unverified uploader

Weekly Downloads

Cliente Flutter para o Push Service — regista devices e recebe push notifications (FCM/APNs).

Homepage

License

unknown (license)

Dependencies

firebase_core, firebase_messaging, flutter, http

More

Packages that depend on push_service_client