splive 2.0.1 copy "splive: ^2.0.1" to clipboard
splive: ^2.0.1 copied to clipboard

Official Flutter SDK for Specular.Live voice, video, chat and realtime communication.

example/main.dart

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const SpliveExampleApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SPLive SDK Example',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorSchemeSeed: Colors.blue,
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

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

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

class _HomePageState extends State<HomePage> {
  late final SpliveSdk sdk;

  String status = 'Ready';

  // Replace with your own values.
  static const username = 'demo';
  static const userid = 'asdadcadqweq';
  static const password = '12345678';
  static const groupId = 'YOUR_GROUP_ID';

  String? roomId;

  @override
  void initState() {
    super.initState();

    sdk = SpliveSdk(
      baseUrl: SpliveEndpoints.serverUrl,
    );
  }

  Future<void> login() async {
    try {
      final auth = await sdk.auth.login(
        usernameOrEmail: username,
        password: password,
      );

      setState(() {
        status = 'Logged in\n'
            'User: ${auth.user.username}\n'
            'Token: ${auth.token.substring(0, 20)}...';
      });
    } catch (e) {
      setState(() {
        status = e.toString();
      });
    }
  }

  Future<void> loadRooms() async {
    try {
      final rooms = await sdk.rooms.loadrooms(
        groupid: groupId,
      );

      setState(() {
        status = 'Found ${rooms.length} room(s)';
      });
    } catch (e) {
      setState(() {
        status = e.toString();
      });
    }
  }

  Future<void> createRoom() async {
    try {
      final room = await sdk.rooms.createRoom(
        groupId: groupId,
        name: 'SDK Demo Room',
        roomType: 'voice',
      );

      roomId = room.id;

      setState(() {
        status = 'Created room\nID: ${room.id}';
      });
    } catch (e) {
      setState(() {
        status = e.toString();
      });
    }
  }

  Future<void> joinRoom() async {
    if (roomId == null) {
      setState(() {
        status = 'Create a room first.';
      });
      return;
    }

    try {
      await sdk.rooms.joinRoom(
        roomId: roomId!,
        userId: userid,
      );

      setState(() {
        status = 'Joined room';
      });
    } catch (e) {
      setState(() {
        status = e.toString();
      });
    }
  }

  Future<void> leaveRoom() async {
    if (roomId == null) return;

    try {
      await sdk.rooms.leaveroom(
        roomid: roomId!,
      );

      setState(() {
        status = 'Left room';
      });
    } catch (e) {
      setState(() {
        status = e.toString();
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SPLive SDK Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(20),
        child: ListView(
          children: [
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16),
                child: Text(status),
              ),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: login,
              child: const Text('1. Login'),
            ),
            const SizedBox(height: 10),
            ElevatedButton(
              onPressed: loadRooms,
              child: const Text('2. Load Rooms'),
            ),
            const SizedBox(height: 10),
            ElevatedButton(
              onPressed: createRoom,
              child: const Text('3. Create Room'),
            ),
            const SizedBox(height: 10),
            ElevatedButton(
              onPressed: joinRoom,
              child: const Text('4. Join Room'),
            ),
            const SizedBox(height: 10),
            ElevatedButton(
              onPressed: leaveRoom,
              child: const Text('5. Leave Room'),
            ),
          ],
        ),
      ),
    );
  }
}
0
likes
130
points
27
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Official Flutter SDK for Specular.Live voice, video, chat and realtime communication.

Homepage
Repository (GitHub)

License

MIT (license)

Dependencies

flutter, http, livekit_client, web_socket_channel

More

Packages that depend on splive