andrew_im_sdk 0.1.22 copy "andrew_im_sdk: ^0.1.22" to clipboard
andrew_im_sdk: ^0.1.22 copied to clipboard

Andrew IM SDK for Flutter — HTTP + WebSocket client for real-time messaging, conversations, groups, audio/video calls and more.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:andrew_im_sdk/andrew_im_sdk.dart' as im;

/// andrew_im_sdk 最小使用示例:初始化 → 连接 → 发消息 → 监听事件。
///
/// 运行前请替换下方 baseUrl / token / tenantId / userId / peerId 为真实值。
void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'IM SDK Demo',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final _client = im.AndrewIMClient(autoReconnect: true);
  final List<String> _logs = [];
  String _connState = 'disconnected';

  void _log(String s) {
    setState(() {
      _logs.insert(0, '${DateTime.now().toIso8601String().substring(11, 19)}  $s');
    });
  }

  Future<void> _connect() async {
    _client.addListener(_DemoListener(_log, (s) => setState(() => _connState = s.name)));
    _log('init...');
    await _client.init(
      baseUrl: 'https://your-im-gateway.example.com',
      token: 'YOUR_TOKEN',
      tenantId: 'YOUR_TENANT',
      userId: 'YOUR_USER_ID',
      deviceId: 'demo-device',
      platform: 'flutter',
    );
    _log('connect...');
    await _client.connect();
  }

  Future<void> _send() async {
    try {
      await _client.messageManager!.sendMessage(im.SendMessageRequest(
        targetId: 'peer-user-id',
        targetType: im.MessageTargetType.user,
        type: im.MessageType.text,
        content: 'Hello from example!',
      ));
      _log('message sent');
    } catch (e) {
      _log('send error: $e');
    }
  }

  @override
  void dispose() {
    _client.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('IM SDK Demo'),
        actions: [
          Padding(
            padding: const EdgeInsets.all(16),
            child: Center(child: Text(_connState, style: const TextStyle(fontSize: 12))),
          ),
        ],
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8),
            child: Row(
              children: [
                ElevatedButton(onPressed: _connect, child: const Text('Connect')),
                const SizedBox(width: 8),
                ElevatedButton(onPressed: _send, child: const Text('Send')),
              ],
            ),
          ),
          const Divider(),
          Expanded(
            child: ListView.builder(
              itemCount: _logs.length,
              itemBuilder: (_, i) => ListTile(
                dense: true,
                title: Text(_logs[i], style: const TextStyle(fontSize: 12)),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

class _DemoListener extends im.IMEventListener {
  _DemoListener(this.log, this.onState);
  final void Function(String) log;
  final void Function(im.ConnectionState) onState;

  @override
  void onNewMessage(im.IMMessage m) => log('new message: ${m.id}');

  @override
  void onConnectionStateChanged(im.ConnectionState s) {
    onState(s);
    log('state: ${s.name}');
  }

  @override
  void onKicked(im.KickedEvent e) => log('kicked: ${e.reason}');
}
1
likes
145
points
143
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Andrew IM SDK for Flutter — HTTP + WebSocket client for real-time messaging, conversations, groups, audio/video calls and more.

Homepage

Topics

#im #chat #websocket #webrtc #messaging

License

MIT (license)

Dependencies

dio, flutter, flutter_webrtc, http, path, path_provider, web_socket_channel

More

Packages that depend on andrew_im_sdk