Flutter网易云信房间管理插件netease_roomkit的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter网易云信房间管理插件netease_roomkit的使用

网易云信 NERoom SDK 以房间为基础,提供网易云信全系列能力,包括即时消息、音视频通话、直播、互动白板等,并提供易接入、强扩展、高效部署且覆盖多场景的服务。NERoom 通过组件与 UI kit,助力您快速搭建业务场景,例如多人语聊房、秀场直播、电商直播、在线教育、企业培训、活动直播等。

产品概述

NERoom 基于网易云信在 IM 即时通讯、音视频通话等领域多年的客户积累与业务沉淀,为您提供高效、低成本的能力接入。

NERoom 提供典型业务场景的模板。场景模板包括多人语聊房、秀场直播、电商直播、在线教育、企业培训、活动直播等。助您快速搭建业务场景,极速上线业务 App。

NERoom 提供即时消息、音视频通话、互动白板、麦位管理、角色管理等模块,您可根据模块按需选择业务能力,实现积木式的功能组装,让房间灵活可变形。通过可视化界面配置,快速开通相关能力,降低集成难度、提升接入效率。

NERoom 还开放各类标准接口和扩展能力,您可基于标准接口对接第三方厂商或自有业务系统,扩展自有业务所需功能,真正实现业务的全面发展。

产品架构

NERoom 的产品架构如下图所示。

NERoom架构.png

  • 能力层

    底层采用网易云信 PaaS 能力和通用能力。PaaS 能力包括 IM、RTC、直播、点播、互动白板等。通用能力包括日志、信令、抄送、长链接通道、透传等。

  • 框架层

    • 通过 room 框架和房间配套项的结合,生成业务组件,例如 PK 直播组件、直播连麦组件、语聊房麦位组件、KTV 组件、权限管理组件等。业务组件可以在代码中单独使用。
    • 根据不同业务场景,提供通用的场景模板,场景模板中包含了该场景用到的业务组件。根据场景模板可以直接生成该场景对应的 SDK。
    • 业务组件和场景模板包括业务逻辑和 UI kit。
  • 业务层

    您可以根据场景模板生成的 Demo,快速搭建业务 App。也可以通过修改逻辑、UI 和搭配的组件,进行个性化定制。

完整示例代码

// Copyright (c) 2022 NetEase, Inc. All rights reserved.
// Use of this source code is governed by a MIT license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:roomkit_example/create_room_page.dart';
import 'package:netease_roomkit/netease_roomkit.dart';

void main() {
  runApp(Builder(builder: (context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('RoomKit-Sample'),
        ),
        body: const MyApp(),
      ),
    );
  }));
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var _initializeResult = '未知';
  String account = '';
  String token = '';
  String anonymousArgs = '';
  late TextEditingController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    NERoomKit.instance
        .initialize(
      NERoomKitOptions(
        appKey: '您的App Key',
      ),
    )
        .then((value) {
      print("初始化结果: $value");
      setState(() {
        _initializeResult = value.toString();
      });
    });
    _controller = TextEditingController(text: anonymousArgs);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        theme: ThemeData(primarySwatch: Colors.blue),
        home: Scaffold(
            resizeToAvoidBottomInset: false,
            body: GestureDetector(
              onTap: () => FocusScope.of(context).requestFocus(FocusNode()),
              child: SingleChildScrollView(
                child: Container(
                  padding: const EdgeInsets.only(left: 16, right: 16),
                  child: Column(
                    children: [
                      Center(
                        child: Text(
                            '初始化结果: $_initializeResult\n'),
                      ),
                      TextField(
                        autofocus: true,
                        decoration: const InputDecoration(
                          labelText: "账号",
                        ),
                        onChanged: (value) {
                          account = value;
                        },
                      ),
                      const SizedBox(
                        height: 10,
                      ),
                      TextField(
                        autofocus: true,
                        decoration: const InputDecoration(
                          labelText: "Token",
                        ),
                        onChanged: (value) {
                          token = value;
                        },
                      ),
                      const SizedBox(
                        height: 10,
                      ),
                      ElevatedButton(
                        child: const Text('登录'),
                        onPressed: () {
                          if (account.isEmpty || token.isEmpty) {
                            ScaffoldMessenger.of(context).showSnackBar(
                              const SnackBar(
                                content: Text('请输入账号和Token'),
                              ),
                            );
                            return;
                          }
                          NERoomKit.instance.authService
                              .login(
                            account,
                            token,
                          )
                              .then((value) {
                            ScaffoldMessenger.of(context).showSnackBar(
                              SnackBar(
                                content: Text('登录结果: $value'),
                              ),
                            );
                            if (!value.isSuccess()) return;
                            Navigator.of(context)
                                .push(MaterialPageRoute(builder: (context) {
                              return const CreateRoomPage();
                            }));
                          });
                        },
                      ),
                      const SizedBox(
                        height: 10,
                      ),
                      const Text('下方输入框用于匿名登录'),
                      TextField(
                        decoration: const InputDecoration(
                          labelText: "Token",
                        ),
                        keyboardType: TextInputType.multiline,
                        maxLines: 4,
                        onChanged: (value) {
                          anonymousArgs = value;
                        },
                        controller: _controller,
                      ),
                      const SizedBox(
                        height: 10,
                      ),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          buildLogout(),
                          const SizedBox(
                            height: 10,
                          ),
                          buildLoginListener(),
                          const SizedBox(
                            height: 10,
                          ),
                        ],
                      ),
                      ElevatedButton(
                        child: const Text('进入创建房间页面'),
                        onPressed: () async {
                          if (await NERoomKit.instance.authService.isLoggedIn) {
                            Navigator.of(context)
                                .push(MaterialPageRoute(builder: (context) {
                              return const CreateRoomPage();
                            }));
                          } else {
                            ScaffoldMessenger.of(context).showSnackBar(
                              const SnackBar(
                                content: Text('请先登录'),
                              ),
                            );
                          }
                        },
                      )
                    ],
                  ),
                ),
              ),
            )));
  }

  /// 登出
  Widget buildLogout() {
    return ElevatedButton(
      child: const Text('登出'),
      onPressed: () {
        NERoomKit.instance.authService.logout().then((value) {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
              content: Text('登出结果: $value'),
            ),
          );
        });
      },
    );
  }

  /// 添加登录监听
  Widget buildLoginListener() {
    return ElevatedButton(
      child: const Text('添加登录监听'),
      onPressed: () {
        NERoomKit.instance.authService.onAuthEvent.listen((value) {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
              content: Text('状态 NEAuthEvent result: ${value.index}'),
            ),
          );
        });
      },
    );
  }
}

更多关于Flutter网易云信房间管理插件netease_roomkit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网易云信房间管理插件netease_roomkit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成和使用netease_roomkit插件进行网易云信房间管理的示例代码。netease_roomkit插件用于管理网易云信提供的实时音视频房间功能。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加netease_roomkit依赖:

dependencies:
  flutter:
    sdk: flutter
  netease_roomkit: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 初始化插件

在你的Flutter应用的入口文件(通常是main.dart)中,初始化netease_roomkit插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 初始化插件
    NeteaseRoomkit.init(
      appKey: '你的网易云信App Key',
      appId: '你的网易云信App ID',
    );

    return MaterialApp(
      title: 'Flutter Netease RoomKit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RoomManagementScreen(),
    );
  }
}

步骤 3: 创建房间

接下来,你可以创建一个房间管理屏幕,其中可以包含创建房间的功能:

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

class RoomManagementScreen extends StatefulWidget {
  @override
  _RoomManagementScreenState createState() => _RoomManagementScreenState();
}

class _RoomManagementScreenState extends State<RoomManagementScreen> {
  final TextEditingController _roomNameController = TextEditingController();
  final TextEditingController _roomPasswordController = TextEditingController();

  void _createRoom() async {
    try {
      // 创建房间
      Room room = await NeteaseRoomkit.createRoom(
        roomName: _roomNameController.text,
        roomPassword: _roomPasswordController.text.isEmpty ? null : _roomPasswordController.text,
      );
      print('Room created: ${room.roomId}');
      // 可以在这里导航到房间详情页或执行其他操作
    } catch (e) {
      print('Failed to create room: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Room Management'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _roomNameController,
              decoration: InputDecoration(
                labelText: 'Room Name',
              ),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _roomPasswordController,
              obscureText: true,
              decoration: InputDecoration(
                labelText: 'Room Password (optional)',
              ),
            ),
            SizedBox(height: 32),
            ElevatedButton(
              onPressed: _createRoom,
              child: Text('Create Room'),
            ),
          ],
        ),
      ),
    );
  }
}

步骤 4: 加入房间

同样地,你可以创建一个加入房间的功能:

void _joinRoom() async {
  try {
    // 加入房间
    await NeteaseRoomkit.joinRoom(
      roomId: '房间ID',
      roomPassword: '房间密码(如果有)',
    );
    print('Joined room successfully');
    // 可以在这里导航到房间聊天或视频通话界面
  } catch (e) {
    print('Failed to join room: $e');
  }
}

你可以在UI中添加一个按钮来触发_joinRoom函数:

ElevatedButton(
  onPressed: () {
    // 在这里添加房间ID和密码
    _joinRoom();
  },
  child: Text('Join Room'),
),

注意事项

  1. 权限:确保你的应用有必要的权限,比如网络权限。
  2. 错误处理:在实际应用中,需要更详细的错误处理逻辑。
  3. UI设计:以上代码仅提供了基本功能,UI设计可以根据实际需求进行定制。

通过上述步骤,你应该能够在Flutter应用中集成并使用netease_roomkit插件进行网易云信的房间管理。如果有更多复杂的需求,可以参考netease_roomkit的官方文档和示例代码。

回到顶部