Skip to main content

inverge_websocket 1.0.0 copy "inverge_websocket: ^1.0.0" to clipboard
inverge_websocket: ^1.0.0 copied to clipboard

Flutter client SDK for the Inverge WebSocket service. Room-based realtime messaging over Socket.IO with an app-wide provider, context.socket access, automatic reconnect + room re-join, and ack futures.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:inverge_websocket/inverge_websocket.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    // Wrap the app once. The connection is initialized here and reachable from
    // any page via `context.socket` (and from blocs via InvergeWebSocket.instance).
    return WebSocketInitializer(
      config: const WebSocketConfig(
        baseUrl: 'https://websocket.inverge.net',
        apiKey: 'your_api_key',
        enableLogging: true,
      ),
      child: MaterialApp(
        title: 'inverge_websocket example',
        theme: ThemeData(colorSchemeSeed: Colors.teal, useMaterial3: true),
        home: const OrderPage(orderId: 8821),
      ),
    );
  }
}

class OrderPage extends StatefulWidget {
  const OrderPage({super.key, required this.orderId});

  final int orderId;

  @override
  State<OrderPage> createState() => _OrderPageState();
}

class _OrderPageState extends State<OrderPage> {
  final List<String> _events = [];
  late final String _room = Room.scoped('order', widget.orderId);

  @override
  void initState() {
    super.initState();
    // Join the order's room and listen for its events.
    final socket = context.socket;
    socket.joinRoom(_room);
    socket.on('order.updated', _onOrderUpdated);
  }

  void _onOrderUpdated(dynamic data) {
    setState(() => _events.insert(0, data.toString()));
  }

  @override
  void dispose() {
    final socket = context.socket;
    socket.off('order.updated', _onOrderUpdated);
    socket.leaveRoom(_room);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Room $_room')),
      body: Column(
        children: [
          StreamBuilder<ConnectionStatus>(
            stream: context.socket.statusStream,
            initialData: context.socket.status,
            builder: (context, snapshot) => ListTile(
              leading: Icon(
                snapshot.data == ConnectionStatus.connected
                    ? Icons.cloud_done
                    : Icons.cloud_off,
              ),
              title: Text('Status: ${snapshot.data?.name}'),
            ),
          ),
          const Divider(),
          Expanded(
            child: ListView(
              children: [
                for (final e in _events) ListTile(title: Text(e)),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
0
likes
0
points
100
downloads

Publisher

verified publisherinverge.net

Weekly Downloads

Flutter client SDK for the Inverge WebSocket service. Room-based realtime messaging over Socket.IO with an app-wide provider, context.socket access, automatic reconnect + room re-join, and ack futures.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, socket_io_client

More

Packages that depend on inverge_websocket