Flutter视频播放插件pal_video的使用

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

Flutter视频播放插件pal_video的使用

你的新应用内朋友。

集成视频故事到您的应用程序中。

  • 使用视频的力量获取应用反馈。
  • 引导用户。

使用说明

您可以从以下链接查看演示和用例:


示例代码

以下是使用pal_video插件的基本示例代码:

import 'package:flutter/material.dart';
import 'package:pal_video/pal.dart';
import 'package:pal_plugin_example/page_fake.dart';

import 'custom_page.dart';

final navigatorKey = GlobalKey<NavigatorState>();

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final Pal pal = Pal.instance;
  await pal.initialize(
    PalOptions(
      apiKey: const String.fromEnvironment('PAL_TOKEN'),
    ),
    navigatorKey,
  );
  runApp(const MyApp());
}

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

  // 这个小部件是你的应用的根节点。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pal 插件演示',
      navigatorKey: navigatorKey,
      navigatorObservers: [PalNavigatorObserver.create()],
      theme: ThemeData(
        primarySwatch: Colors.blue,
        splashFactory: InkSplash.splashFactory,
      ),
      routes: {
        '/': (context) => const HomePage(),
        '/page1_2': (context) => const CustomPage(),
        '/user/account/contact': (context) => const CustomPage(
              title: '/user/account/contact',
            ),
      },
    );
  }
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    debugPrint("--------------------");
    debugPrint("Starting pal demo");
    debugPrint("--------------------");
    return Scaffold(
      appBar: AppBar(
        title: const Text('Pal 插件 - 演示'),
      ),
      body: ListView(
        children: [
          const SizedBox(height: 16),
          ListTile(
            title: const Text('演示 - 触发视频'),
            subtitle: const Text(
              '从服务器API触发一个简单的视频',
            ),
            leading: const Icon(Icons.cloud_download),
            onTap: () => Navigator.of(context).pushNamed('/page1_2'),
          ),
          const Divider(),
          ListTile(
            title: const Text('会话重置'),
            subtitle: const Text(
              '强制重新创建Pal用户会话',
            ),
            leading: const Icon(Icons.cloud_download),
            onTap: () => Pal.instance.clearSession(),
          ),
          const Divider(),
          ListTile(
            title: const Text('SDK演示 - 单选'),
            subtitle: const Text(
              '单选 - 视频然后请求用户反馈',
            ),
            leading: const Icon(Icons.video_camera_back),
            onTap: () => _showSingleChoiceDemoPopup(),
          ),
          const Divider(),
          ListTile(
            title: const Text('SDK演示 - Meeriad'),
            subtitle: const Text(
              '单选 - 视频然后请求用户反馈',
            ),
            leading: const Icon(Icons.video_camera_back),
            onTap: () => _showMeeriadDemoPopup(),
          ),
          const Divider(),
          ListTile(
            title: const Text('SDK演示 - Fridaa'),
            subtitle: const Text(
              '应用沉浸',
            ),
            leading: const Icon(Icons.remove_red_eye),
            onTap: () => _showFridaDemo(),
          ),
          const Divider(),
          ListTile(
              title: const Text('完整演示'),
              subtitle: const Text(
                '动态链接',
              ),
              leading: const Icon(Icons.dynamic_feed),
              onTap: () {
                Navigator.of(context).pushNamed('/user/account/contact');
              }),
        ],
      ),
    );
  }

  PalSdk palSdk = PalSdk.fromKey(navigatorKey: navigatorKey);

  Future _showSingleChoiceDemoPopup() {
    return palSdk.showSingleChoiceSurvey(
      videoAsset: 'assets/me.mp4',
      userName: 'Gautier',
      companyTitle: 'Apparence.io CTO',
      question:
          '请选择下一个可能感兴趣的特性?',
      choices: const [
        Choice(code: 'a', text: 'lorem A'),
        Choice(code: 'b', text: 'lorem B'),
        Choice(code: 'c', text: 'lorem C'),
        Choice(code: 'd', text: 'lorem D'),
      ],
      onTapChoice: (choice) {},
      onVideoEndAction: () {},
    );
  }

  Future _showMeeriadDemoPopup() {
    return palSdk.showSingleChoiceSurvey(
      videoAsset: 'assets/meeriad.mp4',
      userName: 'David',
      companyTitle: '产品管理 - Meeriad',
      question: '您希望尽快拥有哪个功能?',
      choices: const [
        Choice(code: 'a', text: '挑战管理'),
        Choice(code: 'b', text: '主题添加'),
        Choice(code: 'c', text: '活动改进'),
      ],
      onTapChoice: (choice) {},
      onVideoEndAction: () {},
    );
  }

  Future _showFridaDemo() async {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => FakePage(
          assetImgUrl: "assets/background1.jpeg",
          onTap: () async {
            await palSdk.showSingleChoiceSurvey(
              videoAsset: 'assets/fridaa.mp4',
              userName: 'David',
              companyTitle: '产品管理 - Fridaa',
              question:
                  '您希望尽快拥有哪个功能?',
              choices: const [
                Choice(code: 'a', text: '添加广告链接'),
                Choice(code: 'b', text: '创建贷款申请文件'),
                Choice(code: 'c', text: '提案管理'),
              ],
              onTapChoice: (choice) {},
              onVideoEndAction: () {},
            );
          },
          onTapBottom: () async {
            await palSdk.showVideoOnly(
              minVideoUrl: 'assets/fridaa.mp4',
              videoUrl: 'assets/fridaa.mp4',
              userName: 'David',
              companyTitle: '产品管理 - Fridaa',
            );
          },
        ),
      ),
    );
  }
}

更多关于Flutter视频播放插件pal_video的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频播放插件pal_video的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用pal_video插件进行视频播放的代码示例。pal_video是一个用于视频播放的Flutter插件,它提供了简单而强大的视频播放功能。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加pal_video依赖:

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

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

2. 导入插件

在你的Dart文件中导入pal_video插件:

import 'package:pal_video/pal_video.dart';

3. 使用PalVideoPlayer

下面是一个完整的示例,展示如何在Flutter中使用PalVideoPlayer进行视频播放:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Video Player Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: VideoPlayerScreen(),
    );
  }
}

class VideoPlayerScreen extends StatefulWidget {
  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  PalVideoController _controller;

  @override
  void initState() {
    super.initState();
    _controller = PalVideoController.network(
      'https://www.example.com/path/to/your/video.mp4', // 替换为你的视频URL
    )
      ..initialize().then((_) {
        // 确保视频初始化完成后,设置播放状态或做其他操作
        setState(() {});
      });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Player Demo'),
      ),
      body: Center(
        child: _controller.value.isInitialized
            ? AspectRatio(
                aspectRatio: _controller.value.aspectRatio,
                child: PalVideoPlayer(_controller),
              )
            : Container(
                child: CircularProgressIndicator(),
              ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            _controller.value.isPlaying
                ? _controller.pause()
                : _controller.play();
          });
        },
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

解释

  1. 依赖管理:在pubspec.yaml中添加pal_video依赖,并通过flutter pub get获取。
  2. 导入插件:在Dart文件中导入pal_video包。
  3. 创建控制器:在_VideoPlayerScreenState类中,创建一个PalVideoController实例来管理视频播放。这里使用了网络视频URL进行初始化。
  4. 初始化视频:在initState方法中初始化视频控制器,并等待初始化完成。
  5. 释放资源:在dispose方法中释放视频控制器资源。
  6. 构建UI:在build方法中,根据视频是否初始化完成来显示不同的UI。如果视频已初始化,则显示视频播放器;否则显示加载指示器。
  7. 播放控制:通过浮动操作按钮(FloatingActionButton)控制视频的播放和暂停。

这个示例展示了如何在Flutter中使用pal_video插件进行基本的视频播放。你可以根据需要进一步定制和扩展功能。

回到顶部