Flutter动画过渡效果插件flutter_fader的使用

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

Flutter动画过渡效果插件flutter_fader的使用

flutter_fader 插件介绍

pub package codecov style: flutter lints License: MIT

flutter_fader 是一个用于Flutter的Widget,它允许你淡入和淡出子Widget。当一个widget被淡出时,它将不再存在于视图树中,这意味着它不能被使用或交互。这非常适合隐藏按钮等场景。

入门指南

在你的Flutter项目中,添加该包到你的依赖项:

dependencies:
  ...
  flutter_fader: ^2.0.0

使用示例

示例1:Fader with buttons

两个按钮,点击上面的一个会使其淡出,点击下面的一个会使其淡入。

完整示例代码

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Fader Example')),
        body: Center(child: FaderWithButtons()),
      ),
    );
  }
}

class FaderWithButtons extends StatefulWidget {
  @override
  _FaderWithButtonsState createState() => _FaderWithButtonsState();
}

class _FaderWithButtonsState extends State<FaderWithButtons> {
  final FaderController faderController = FaderController();

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Fader(
          controller: faderController,
          duration: const Duration(milliseconds: 500),
          child: ElevatedButton(
            onPressed: () {
              faderController.fadeOut();
            },
            child: Text("Fade Out"),
          ),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: () {
            faderController.fadeIn();
          },
          child: Text("Fade In"),
        ),
      ],
    );
  }
}

示例2:Fader with scroll

一个非常长的滚动视图,和一个浮动操作按钮。当你向下滚动时,浮动操作按钮会淡出;当你向上滚动时,它会淡入。

完整示例代码

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Fader Scroll Example')),
        body: FaderWithScroll(),
      ),
    );
  }
}

class FaderWithScroll extends StatefulWidget {
  @override
  _FaderWithScrollState createState() => _FaderWithScrollState();
}

class _FaderWithScrollState extends State<FaderWithScroll> {
  final FaderController faderController = FaderController();
  final ScrollController _scrollController = ScrollController();

  @override
  void initState() {
    super.initState();
    _scrollController.addListener(_onScroll);
  }

  @override
  void dispose() {
    _scrollController.removeListener(_onScroll);
    _scrollController.dispose();
    super.dispose();
  }

  void _onScroll() {
    if (_scrollController.offset > 100 && faderController.isShowing) {
      faderController.fadeOut();
    } else if (_scrollController.offset <= 100 && !faderController.isShowing) {
      faderController.fadeIn();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        ListView.builder(
          controller: _scrollController,
          itemCount: 50,
          itemBuilder: (context, index) {
            return ListTile(title: Text('Item $index'));
          },
        ),
        Positioned(
          bottom: 20,
          right: 20,
          child: Fader(
            controller: faderController,
            duration: const Duration(milliseconds: 300),
            child: FloatingActionButton(
              onPressed: () {},
              child: Icon(Icons.add),
            ),
          ),
        ),
      ],
    );
  }
}

通过以上两个示例,你可以看到如何使用 flutter_fader 插件来实现淡入淡出的效果。希望这些例子能帮助你更好地理解和使用这个插件!


更多关于Flutter动画过渡效果插件flutter_fader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动画过渡效果插件flutter_fader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 flutter_fader 插件来实现动画过渡效果的代码示例。flutter_fader 是一个 Flutter 插件,用于在 Flutter 应用中实现淡入淡出动画效果。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_fader: ^2.0.0  # 请检查最新版本号

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

接下来是一个简单的代码示例,展示如何使用 flutter_fader 插件来实现淡入淡出动画效果:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Fader Example'),
        ),
        body: FadeTransitionExample(),
      ),
    );
  }
}

class FadeTransitionExample extends StatefulWidget {
  @override
  _FadeTransitionExampleState createState() => _FadeTransitionExampleState();
}

class _FadeTransitionExampleState extends State<FadeTransitionExample> with SingleTickerProviderStateMixin {
  bool isVisible = false;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: () {
              setState(() {
                isVisible = !isVisible;
              });
            },
            child: Text('Toggle Visibility'),
          ),
          SizedBox(height: 20),
          FadeTransition(
            opacity: Tween<double>(begin: 0, end: 1).animate(
              CurvedAnimation(
                parent: AnimationController(
                  duration: Duration(seconds: 1),
                  vsync: this,
                )..repeat(reverse: true, whenCompleted: () {
                  if (mounted) {
                    setState(() {
                      isVisible = !isVisible;
                    });
                  }
                }),
                curve: Curves.easeInOut,
              ),
            ),
            child: AnimatedOpacity(
              opacity: isVisible ? 1.0 : 0.0,
              duration: Duration(seconds: 1),
              child: Container(
                width: 200,
                height: 200,
                color: Colors.blue,
                child: Center(
                  child: Text(
                    'Fade In/Out',
                    style: TextStyle(color: Colors.white, fontSize: 24),
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们做了以下事情:

  1. 使用 flutter_fader 的核心功能,但实际上这个示例主要展示了如何通过 Flutter 的内置动画系统(TweenAnimationBuilder, AnimatedOpacity, AnimationController 等)来实现淡入淡出效果。flutter_fader 插件本身提供的功能与此类似,但可能会封装得更为简洁。

  2. 创建了一个按钮来控制动画的触发。

  3. 使用 TweenCurvedAnimation 来创建动画,并通过 FadeTransitionAnimatedOpacity 组件来应用动画效果。

  4. 当动画完成时,通过 whenCompleted 回调来反转 isVisible 状态,从而触发反向动画。

请注意,上面的代码示例实际上并没有直接使用 flutter_fader 插件,但展示了如何在 Flutter 中实现类似的动画效果。如果你希望直接使用 flutter_fader 插件,可以参考插件的官方文档或示例代码,通常会有更为简洁的 API 来实现相同的效果。由于 flutter_fader 的 API 可能会随着版本更新而变化,请参考最新的官方文档或 GitHub 仓库中的示例代码。

回到顶部