Flutter自定义播放进度按钮插件flutter_progressed_play_button的使用

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

Flutter自定义播放进度按钮插件flutter_progressed_play_button的使用

插件介绍

flutter_progressed_play_button 是一个简单的的Flutter插件,它提供了一个带有进度指示的“播放按钮”。进度以弧形绘制在图标周围。该插件有两个状态:是否显示进度。通过设置 showProgress 属性来决定是否显示进度。当需要显示进度时,将 progress 设置为所需的值,范围从0.0到1.0。

示例代码

下面是一个完整的示例代码,展示了如何使用 flutter_progressed_play_button 插件。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'flutter_progressed_play_button Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHomePage(title: 'flutter_progressed_play_button Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double _value = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: SafeArea(
        child: Scrollbar(
          child: Center(
            child: SingleChildScrollView(
              child: Center(
                child: ConstrainedBox(
                  constraints: BoxConstraints(maxWidth: 600),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Padding(
                        padding: const EdgeInsets.only(
                          top: 116.0,
                          left: 116.0,
                          right: 116.0,
                          bottom: 0),
                        child: Text('About',
                          style: Theme.of(context)
                            .textTheme
                            .headline6),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(116.0),
                        child: Text('flutter_progressed_play_button 包含一个名为 ProgressedPlayButton 的的 widget。\n\n' +
                          '我们使用 ProgressedPlayButton 来表示音频应用中的播放列表的播放情况。我们为播放列表添加了 ProgressedPlayButton 对象,因此用户可以通过点击按钮快速开始播放,并且他们还可以从按钮的图标中知道播放列表中已经播放了多少首歌曲。\n\n' +
                          '按钮的状态包括:'),
                      ),
                      ListTile(
                        title: Text(
                          '您可以选择不显示进度。当按钮附加到播放列表时,它意味着播放列表从未被播放过。',
                        ),
                        leading: Container(
                          width: 40,
                          height: 40,
                          child: ProgressedPlayButton(
                            showProgress: false,
                          ),
                        ),
                      ),
                      ListTile(
                        title: Text('进度为 0。当按钮附加到播放列表时,这意味着播放列表已经被播放,但播放列表中的所有歌曲尚未完全播放过.'),
                        leading: Container(
                          width: 40,
                          height: 40,
                          child: ProgressedPlayButton(
                            showProgress: true,
                            progress: 0,
                          ),
                        ),
                      ),
                      ListTile(
                        title: Text('进度为 0.5。当按钮附加到播放列表时,这意味着播放列表已经被播放,且播放列表中的半数歌曲已经完全播放过.'),
                        leading: Container(
                          width: 40,
                          height: 40,
                          child: ProgressedPlayButton(
                            showProgress: true,
                            progress: 0.5,
                          ),
                        ),
                      ),
                      ListTile(
                        title: Text('进度为 1.0。 当按钮附加到播放列表时,这意味着播放列表中的所有歌曲都已经完全播放过.'),
                        leading: Container(
                          width: 40,
                          height: 40,
                          child: ProgressedPlayButton(
                            showProgress: true,
                            progress: 1.0,
                          ),
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(
                          top: 116.0,
                          left:  e116.0,
                          right:  e116.0,
                          bottom: 0),
                        child: Text('Widget 在行动',
                          style: Theme.of(context)
                            .textTheme
                            .headline6),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(116.0),
                        child: Text(
                          '尝试更改按钮下方的值',
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(116.0),
                        child: Row(children: [
                          Container(
                            width: 40,
                            height: 40,
                            child: ProgressedPlayButton(
                              showProgress: true,
                              progress: _value,
                            ),
                          ),
                          SizedBox(width: 20),
                          Text('0.0'),
                          Slider(
                            onChanged: (value) =&gt; setState(() =&gt; _value = value),
                            value: _value,
                            min: 0.0,
                            max: 1.0,
                          ),
                          Text('1.0'),
                        ]),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(
                          top:  e116.0,
                          left:  e e116.0,
                          right:  e e116.0,
                          bottom: 0),
                        child: Text('Usage',
                          style: Theme.of(context)
                            .textTheme
                            .headline6),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(116.0),
                        child: Text('''
 Container(
  width: 40,
  height: 40,
  child: ProgressedPlayButton(
      showProgress: true, progress: 0.5))
                        ''', style: TextStyle(fontFamily: 'Courier')),
                      )
                    ])),
                  )),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter自定义播放进度按钮插件flutter_progressed_play_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义播放进度按钮插件flutter_progressed_play_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用flutter_progressed_play_button插件的示例代码。这个插件允许你创建一个自定义的播放进度按钮,非常适合视频播放器的UI。

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

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

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

接下来,下面是一个完整的示例代码,展示了如何使用flutter_progressed_play_button插件:

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

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

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

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

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  double _progress = 0.0;
  bool _isPlaying = false;

  void _updateProgress(double progress) {
    setState(() {
      _progress = progress;
    });
  }

  void _togglePlayPause() {
    setState(() {
      _isPlaying = !_isPlaying;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Progressed Play Button Demo'),
      ),
      body: Center(
        child: ProgressedPlayButton(
          size: 100,
          color: Colors.blue,
          iconColor: Colors.white,
          backgroundColor: Colors.grey[200]!,
          progress: _progress,
          isPlaying: _isPlaying,
          onPressed: () {
            _togglePlayPause();
          },
          onProgressChanged: _updateProgress,
        ),
      ),
    );
  }
}

在这个示例中:

  1. 依赖安装:首先在pubspec.yaml中添加flutter_progressed_play_button依赖。
  2. UI布局:创建了一个简单的Material应用,包含一个主屏幕VideoPlayerScreen
  3. 状态管理:使用_VideoPlayerScreenState来管理播放进度和播放状态。
  4. ProgressedPlayButton:在屏幕中心放置了一个ProgressedPlayButton,配置了大小、颜色、图标颜色、背景颜色、当前进度和播放状态。
  5. 回调处理
    • onPressed回调用于切换播放/暂停状态。
    • onProgressChanged回调用于更新播放进度。

这个示例展示了如何使用flutter_progressed_play_button插件来创建一个自定义的播放进度按钮,并根据用户的交互更新播放状态和进度。你可以根据需要进一步自定义和扩展这个示例。

回到顶部