Flutter投屏功能插件yxc_cast的使用

yxc_cast

yxc_cast 是一个用于实现 Flutter 投屏功能的插件。它提供了简单的 API 来搜索设备、连接设备并进行媒体播放等操作。


使用步骤

1. 初始化插件

在应用启动时,需要通过 YxcCast.authLeBo 方法进行授权认证。该方法需要传入两个参数:authKeyauthSecret,这两个值通常由设备厂商提供。

YxcCast.authLeBo("20", "a20b4b19e6da15f95464af0e4aa59564");

2. 搜索设备列表

通过调用 YxcCast.devices 获取当前可用的投屏设备列表,并筛选出目标设备(例如设备名称为“星宸”)。

YxcCast.devices.then((value) {
  print("搜索到设备:${value.length}");
  for (int i = 0; i < value.length; i++) {
    Object? object = value[i];
    Map<Object?, Object?> devices = object as Map<Object?, Object?>;
    String lelinkServiceName = devices["lelinkServiceName"] as String;
    if (lelinkServiceName == "星宸") {
      try {
        YxcCast.connectionDevice(devices);
      } on PlatformException {
        print("调用 connectionDevice 方法异常");
      }
      return;
    }
  }
});

3. 连接设备

找到目标设备后,调用 YxcCast.connectionDevice 方法连接设备。

YxcCast.connectionDevice(devices);

4. 投屏播放

连接成功后,可以通过 YxcCast.playMusic 方法开始播放音频或视频。

YxcCast.playMusic();

完整示例代码

以下是一个完整的 Flutter 示例代码,展示了如何使用 yxc_cast 插件实现投屏功能。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:yxc_cast/yxc_cast.dart';

void main() {
  runApp(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> {

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件并授权认证
    YxcCast.authLeBo("20", "a20b4b19e6da15f95464af0e4aa59564");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('投屏功能示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // 投屏按钮
              TextButton(
                onPressed: () {
                  try {
                    YxcCast.cast();
                  } on PlatformException {
                    print("调用 cast 方法异常");
                  }
                },
                child: Text("投屏"),
              ),
              // 搜索设备按钮
              TextButton(
                onPressed: () {
                  try {
                    YxcCast.devices.then((value) {
                      print("搜索到设备:${value.length}");
                      for (int i = 0; i < value.length; i++) {
                        Object? object = value[i];
                        Map<Object?, Object?> devices = object as Map<Object?, Object?>;
                        String lelinkServiceName = devices["lelinkServiceName"] as String;
                        if (lelinkServiceName == "星宸") {
                          try {
                            YxcCast.connectionDevice(devices);
                          } on PlatformException {
                            print("调用 connectionDevice 方法异常");
                          }
                          return;
                        }
                      }
                    });
                  } on PlatformException {
                    print("调用 devices 方法异常");
                  }
                },
                child: Text("搜索设备列表"),
              ),
              // 播放音乐按钮
              TextButton(
                onPressed: () {
                  try {
                    YxcCast.playMusic();
                  } on PlatformException {
                    print("调用 playMusic 失败");
                  }
                },
                child: Text("播放音乐"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter投屏功能插件yxc_cast的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter投屏功能插件yxc_cast的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


yxc_cast 是一个用于在 Flutter 中实现投屏功能的插件。它支持将设备屏幕内容投射到其他设备上,如电视、投影仪等。以下是如何使用 yxc_cast 插件的基本步骤:

1. 添加依赖

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

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

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

2. 初始化插件

在你的 Dart 文件中导入 yxc_cast 插件,并初始化它:

import 'package:yxc_cast/yxc_cast.dart';

void main() {
  YxcCast.initialize();
  runApp(MyApp());
}

3. 搜索设备

使用 YxcCast 提供的 API 来搜索可用的投屏设备:

void searchDevices() async {
  List<CastDevice> devices = await YxcCast.searchDevices();
  for (var device in devices) {
    print('Device Name: ${device.name}, IP: ${device.ip}');
  }
}

4. 连接到设备

选择一个设备并连接到它:

void connectToDevice(CastDevice device) async {
  bool isConnected = await YxcCast.connect(device);
  if (isConnected) {
    print('Connected to ${device.name}');
  } else {
    print('Failed to connect to ${device.name}');
  }
}

5. 开始投屏

连接成功后,你可以开始投屏:

void startCasting() async {
  bool isCasting = await YxcCast.startCasting();
  if (isCasting) {
    print('Casting started');
  } else {
    print('Failed to start casting');
  }
}

6. 停止投屏

当你想要停止投屏时,可以调用以下方法:

void stopCasting() async {
  bool isStopped = await YxcCast.stopCasting();
  if (isStopped) {
    print('Casting stopped');
  } else {
    print('Failed to stop casting');
  }
}

7. 断开连接

最后,当你不再需要连接时,可以断开与设备的连接:

void disconnectDevice() async {
  bool isDisconnected = await YxcCast.disconnect();
  if (isDisconnected) {
    print('Disconnected from device');
  } else {
    print('Failed to disconnect');
  }
}

8. 处理回调

yxc_cast 插件还提供了一些回调函数,用于处理连接状态、投屏状态等变化:

YxcCast.onConnectionChanged((bool isConnected) {
  print('Connection status: $isConnected');
});

YxcCast.onCastingStateChanged((bool isCasting) {
  print('Casting status: $isCasting');
});

9. 完整示例

以下是一个完整的示例,展示了如何使用 yxc_cast 插件进行投屏:

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

void main() {
  YxcCast.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CastScreen(),
    );
  }
}

class CastScreen extends StatefulWidget {
  [@override](/user/override)
  _CastScreenState createState() => _CastScreenState();
}

class _CastScreenState extends State<CastScreen> {
  List<CastDevice> devices = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    searchDevices();
  }

  void searchDevices() async {
    List<CastDevice> foundDevices = await YxcCast.searchDevices();
    setState(() {
      devices = foundDevices;
    });
  }

  void connectToDevice(CastDevice device) async {
    bool isConnected = await YxcCast.connect(device);
    if (isConnected) {
      print('Connected to ${device.name}');
    } else {
      print('Failed to connect to ${device.name}');
    }
  }

  void startCasting() async {
    bool isCasting = await YxcCast.startCasting();
    if (isCasting) {
      print('Casting started');
    } else {
      print('Failed to start casting');
    }
  }

  void stopCasting() async {
    bool isStopped = await YxcCast.stopCasting();
    if (isStopped) {
      print('Casting stopped');
    } else {
      print('Failed to stop casting');
    }
  }

  void disconnectDevice() async {
    bool isDisconnected = await YxcCast.disconnect();
    if (isDisconnected) {
      print('Disconnected from device');
    } else {
      print('Failed to disconnect');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('YXC Cast Example'),
      ),
      body: ListView.builder(
        itemCount: devices.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(devices[index].name),
            subtitle: Text(devices[index].ip),
            onTap: () {
              connectToDevice(devices[index]);
            },
          );
        },
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: startCasting,
            child: Icon(Icons.cast),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: stopCasting,
            child: Icon(Icons.cast_connected),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: disconnectDevice,
            child: Icon(Icons.cast_disabled),
          ),
        ],
      ),
    );
  }
}
回到顶部