Flutter动画播放按钮插件flutter_animated_play_button的使用

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

Flutter动画播放按钮插件flutter_animated_play_button的使用

flutter_animated_play_button 是一个用于Flutter应用程序的包,它包含了一个名为 AnimatedPlayButton 的小部件。这个小部件展示了几个动画条,表示正在播放某个项目,比如一首歌曲或播放列表。它看起来像这样:

button.gif

你可以通过下面提供的链接查看基于Flutter Web构建的示例:点击这里

要使用这个小部件,只需创建它的实例并将其放置到你的Widget树中。你可以指定其 childcolor 属性。你可以在构建小部件时随时要求它开始或停止动画。此包是从我们的应用程序"KKBOX Kids"衍生出来的。

示例代码

以下是一个完整的示例demo,展示了如何在Flutter应用程序中使用 flutter_animated_play_button 插件。

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

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

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

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var _stopped = false;

  @override
  Widget build(BuildContext context) => 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: <Widget>[
                                      Padding(
                                        padding: const EdgeInsets.only(
                                            top: 16,
                                            left: 16,
                                            bottom: 0,
                                            right: 16),
                                        child: Text('About',
                                            style: Theme.of(context)
                                                .textTheme
                                                .headline6),
                                      ),
                                      Padding(
                                          padding: const EdgeInsets.all(16.0),
                                          child: Text('flutter_animated_play_button provides a simple button, "AnimatedPlayButton". It has several animation bar which implies an app is playing something.\n\nOnce you are working on a media app, you may consider to adopt flutter_animated_play_button in your UI design.')),
                                      ListTile(
                                        title: Text(
                                            'AnimatedPlayButton has two states. One is the animating state.'),
                                        leading: Container(
                                          width: 50,
                                          height: 50,
                                          child: AnimatedPlayButton(
                                            color: Colors.red,
                                            onPressed: () {},
                                          ),
                                        ),
                                      ),
                                      ListTile(
                                        title: Text(
                                            'There is a paused state. It implies your app pauses playing.'),
                                        leading: Container(
                                          width: 50,
                                          height: 50,
                                          child: AnimatedPlayButton(
                                            child: Container(),
                                            stopped: true,
                                            color: Colors.red,
                                            onPressed: () {},
                                          ),
                                        ),
                                      ),
                                      ListTile(
                                        title: Text(
                                            'You can change the color of the bars.'),
                                        leading: Container(
                                          width: 50,
                                          height: 50,
                                          child: AnimatedPlayButton(
                                            child: Container(),
                                            color: Colors.blue,
                                            onPressed: () {},
                                          ),
                                        ),
                                      ),
                                      Padding(
                                        padding: const EdgeInsets.only(
                                            top: 32,
                                            left: 16,
                                            bottom: 0,
                                            right: 16),
                                        child: Text('The Widget in Action',
                                            style: Theme.of(context)
                                                .textTheme
                                                .headline6),
                                      ),
                                      Padding(
                                        padding: const EdgeInsets.all(16.0),
                                        child: Row(
                                          children: <Widget>[
                                            Container(
                                              width: 50,
                                              height: 50,
                                              child: AnimatedPlayButton(
                                                stopped: _stopped,
                                                color: Colors.orange,
                                                onPressed: () {},
                                              ),
                                            ),
                                            SizedBox(width: 10),
                                            ElevatedButton(
                                              child: Text('Start Animation'),
                                              onPressed: () =>
                                                  setState(() => _stopped = false),
                                            ),
                                            SizedBox(width: 10),
                                            ElevatedButton(
                                              child: Text('Stop Animation'),
                                              onPressed: () =>
                                                  setState(() => _stopped = true),
                                            ),
                                          ],
                                        ),
                                      ),
                                      Padding(
                                        padding: const EdgeInsets.only(
                                            top: 32,
                                            left: 16,
                                            bottom: 0,
                                            right: 16),
                                        child: Text('Usage',
                                            style: Theme.of(context)
                                                .textTheme
                                                .headline6),
                                      ),
                                      Padding(
                                          padding: const EdgeInsets.all(16.0),
                                          child: Text(
                                            '''
Container(
  width: 50,
  height: 50,
  child: AnimatedPlayButton(
    stopped: _stopped,
    color: Colors.blue,
    onPressed: () {},
  ),
)
                          ''',
                                            style: TextStyle(
                                                fontFamily: 'Courier'),
                                          ))
                                    ]))))))),
      );
}

在这个示例中,我们创建了一个简单的Flutter应用程序,其中包含了一个 AnimatedPlayButton 小部件。你可以通过点击“Start Animation”和“Stop Animation”按钮来控制动画的启动和停止。此外,还展示了如何更改动画条的颜色以及如何设置子组件。希望这能帮助你在自己的项目中使用 flutter_animated_play_button 插件。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_animated_play_button插件的示例代码。这个插件提供了一个动画播放按钮,非常适合用于视频播放或任何需要动画播放按钮的场景。

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

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

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个完整的示例,展示如何在一个简单的Flutter应用中集成和使用flutter_animated_play_button

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Animated Play Button Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Animated Play Button Demo'),
        ),
        body: Center(
          child: AnimatedPlayButtonExample(),
        ),
      ),
    );
  }
}

class AnimatedPlayButtonExample extends StatefulWidget {
  @override
  _AnimatedPlayButtonExampleState createState() => _AnimatedPlayButtonExampleState();
}

class _AnimatedPlayButtonExampleState extends State<AnimatedPlayButtonExample> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  bool _isPlaying = false;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 1),
      vsync: this,
    )..repeat(reverse: true);
  }

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

  void _togglePlay() {
    setState(() {
      _isPlaying = !_isPlaying;
      if (_isPlaying) {
        _controller.forward();
      } else {
        _controller.stop();
        _controller.reset();
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        SizedBox(
          height: 200,
          child: AnimatedPlayButton(
            animation: _controller,
            size: 100,
            color: Colors.blue,
            backgroundColor: Colors.grey.withOpacity(0.5),
            borderRadius: 25,
            icon: Icons.play_arrow,
            iconActiveColor: Colors.white,
            iconColor: Colors.white,
            onPressed: _togglePlay,
          ),
        ),
        SizedBox(height: 20),
        Text(
          _isPlaying ? 'Playing' : 'Paused',
          style: TextStyle(fontSize: 20),
        ),
      ],
    );
  }
}

解释

  1. 依赖安装

    • pubspec.yaml文件中添加flutter_animated_play_button依赖。
  2. 主应用结构

    • MyApp是应用的根widget,它配置了一个基本的Material应用。
    • AnimatedPlayButtonExample是一个StatefulWidget,它包含动画控制逻辑。
  3. 动画控制

    • _controller是一个AnimationController,用于控制动画。
    • initState中初始化_controller并设置动画周期为1秒,且自动反向重复。
    • dispose中释放_controller资源。
  4. 播放/暂停逻辑

    • _togglePlay方法根据当前状态(播放或暂停)来启动或停止动画。
  5. UI展示

    • AnimatedPlayButton被包裹在SizedBox中以控制其大小。
    • 按钮的动画状态由_controller控制。
    • 文本widget显示当前状态(播放或暂停)。

这个示例展示了如何使用flutter_animated_play_button插件来创建一个带有动画效果的播放/暂停按钮,并控制其动画状态。你可以根据需要进一步自定义按钮的样式和行为。

回到顶部