Flutter页面调用管理插件pagecall_flutter的使用

本文将介绍如何在Flutter项目中使用pagecall_flutter插件来实现页面之间的通信和管理。请注意,该插件已被废弃,请改用官方推荐的flutter_pagecall插件。

插件pagecall_flutter使用步骤

1. 添加依赖

首先,在项目的pubspec.yaml文件中添加pagecall_flutter依赖:

dependencies:
  pagecall_flutter: ^版本号

然后运行以下命令以安装依赖:

flutter pub get

2. 创建第一个页面

创建一个名为FirstScreen的页面,用于输入房间ID、访问令牌和查询参数。

// example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:pagecall_flutter/pagecall_flutter.dart';
import 'package:fluttertoast/fluttertoast.dart';

void main() => runApp(const MyApp());

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Text Transfer',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const FirstScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<FirstScreen> createState() => _FirstScreenState();
}

class _FirstScreenState extends State<FirstScreen> {
  TextEditingController roomIdFieldController = TextEditingController();
  TextEditingController accessTokenFieldController = TextEditingController();
  TextEditingController queryParamsFieldController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Room Setting'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Column(children: [
            TextField(
              controller: roomIdFieldController,
              decoration: const InputDecoration(
                contentPadding: EdgeInsets.all(8.0),
                hintText: 'Enter Room Id',
              ),
            ),
            TextField(
              controller: accessTokenFieldController,
              decoration: const InputDecoration(
                contentPadding: EdgeInsets.all(8.0),
                hintText: 'Enter Access Token',
              ),
            ),
            TextField(
              controller: queryParamsFieldController,
              decoration: const InputDecoration(
                contentPadding: EdgeInsets.all(8.0),
                hintText: 'Enter Query Params (Optional, a=1&b=2&c=3)',
              ),
            ),
          ],),
          ElevatedButton(
            child: const Text('Enter Room'),
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => SecondScreen(
                    roomId: roomIdFieldController.text, 
                    accessToken: accessTokenFieldController.text, 
                    queryParams: queryParamsFieldController.text
                  ),
                ),
              );
            },
          ),
        ],
      ),
    );
  }
}

3. 创建第二个页面

创建一个名为SecondScreen的页面,用于展示PagecallView并处理消息传递。

class SecondScreen extends StatefulWidget {
  final String roomId;
  final String accessToken;
  final String queryParams;

  const SecondScreen({super.key, required this.roomId, this.accessToken = '', this.queryParams = ''});

  [@override](/user/override)
  State<SecondScreen> createState() => _SecondScreenState();
}

class _SecondScreenState extends State<SecondScreen> {
  final TextEditingController messageFieldController = TextEditingController();

  PagecallViewController? pagecallViewController;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Pagecall Room'),
      ),
      body: Column(
          children: [
            TextField(
              controller: messageFieldController,
              decoration: const InputDecoration(
                contentPadding: EdgeInsets.all(8.0),
                hintText: "Submit to invoke sendMessage",
              ),
              keyboardType: TextInputType.text,
              onSubmitted: _invokeSendMessage,
            ),
            Expanded(
              child: PagecallView(
                mode: "meet",
                roomId: widget.roomId,
                accessToken: widget.accessToken,
                queryParams: widget.queryParams,
                onViewCreated: (controller) {
                  pagecallViewController = controller;
                },
                onMessage: (message) {
                  debugPrint('Received message=$message');
                  Fluttertoast.showToast(msg: 'Message from Native: $message');
                },
                onLoaded: () {
                  debugPrint('Pagecall loaded');
                  Fluttertoast.showToast(msg: 'Pagecall loaded');
                },
                onTerminated: (reason) {
                  debugPrint('Pagecall terminated: $reason');
                  Fluttertoast.showToast(msg: 'Pagecall terminated: $reason');
                },
                debuggable: true,
              ),
            ),
          ],
        ),
    );
  }

  void _invokeSendMessage(String message) {
    debugPrint('invoking with message=$message');

    pagecallViewController?.sendMessage(message);
    messageFieldController.clear();
  }
}

更多关于Flutter页面调用管理插件pagecall_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter页面调用管理插件pagecall_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


pagecall_flutter 是一个用于在 Flutter 应用中集成视频通话功能的插件。它通常用于实现实时音视频通信功能,类似于 Zoom 或 Google Meet。以下是如何在 Flutter 项目中使用 pagecall_flutter 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 pagecall_flutter 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  pagecall_flutter: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在你的 Flutter 应用中,你需要在 main.dart 或其他适当的地方初始化 pagecall_flutter 插件。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PagecallFlutter.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pagecall Demo',
      home: HomePage(),
    );
  }
}

3. 创建视频通话页面

接下来,你可以创建一个新的页面来展示视频通话界面。通常,这个页面会包含一个 PagecallView 组件,用于显示视频通话的内容。

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

class VideoCallPage extends StatelessWidget {
  final String roomId;

  VideoCallPage({required this.roomId});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Call'),
      ),
      body: PagecallView(
        roomId: roomId,
        onCallEnded: () {
          // 处理通话结束的逻辑
          Navigator.pop(context);
        },
      ),
    );
  }
}

4. 导航到视频通话页面

在你的应用中,你可以通过导航到 VideoCallPage 来启动视频通话。

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => VideoCallPage(roomId: 'your-room-id'),
              ),
            );
          },
          child: Text('Start Video Call'),
        ),
      ),
    );
  }
}

5. 处理权限

确保在 AndroidManifest.xmlInfo.plist 中添加必要的权限,以便应用可以访问摄像头和麦克风。

AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

Info.plist:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera for video calls.</string>
<key>NSMicrophoneUsageDescription</key>
<string>We need access to your microphone for audio calls.</string>

6. 处理通话结束

PagecallView 中,你可以通过 onCallEnded 回调来处理通话结束的逻辑。例如,你可以导航回上一个页面。

PagecallView(
  roomId: roomId,
  onCallEnded: () {
    Navigator.pop(context);
  },
)
回到顶部