flutter-制作淡入淡出的Banner切换Fade效果

文章目录

  • [1. 介绍](#1. 介绍)
  • [2. 例子](#2. 例子)

1. 介绍

本节主要介绍如何制作一个淡入淡出的 Fade 过渡 Banner 切换。Fade 过渡通常指的是当元素(如图片、文本框等)显示或隐藏时,元素的透明度会逐渐变化,从而实现平滑的视觉过渡效果。这种效果可以提升用户的体验,使得页面的交互更加自然和流畅。

  • 效果图

2. 例子

  • main.dart
dart 复制代码
import 'package:xxx/fadeBanner.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: FadeBannerWidget()
    );
  }
}
  • fadeBanner.dart
dart 复制代码
import 'package:flutter/material.dart';
import 'dart:async';

class FadeBannerWidget extends StatefulWidget {
  const FadeBannerWidget({super.key});

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

class FadeBannerWidgetState extends State<FadeBannerWidget>
    with SingleTickerProviderStateMixin {
  /// 图片列表
  final List<String> imageList = [
    'https://xxxxx.jpg',
    'https://xxxxx.jpg'
  ];

  /// Fade持续时长
  static const fadeDuration = Duration(milliseconds: 300);

  /// Banner切换时长
  static const bannerDuration = Duration(milliseconds: 3000);

  /// 当前图片索引
  int currentImageIndex = 0;

  /// 动画控制器
  late AnimationController animeController;

  /// 图片定时器
  late Timer imageTimer;

  @override
  void initState() {
    super.initState();
    // 初始化动画控制器
    animeController = AnimationController(vsync: this, duration: fadeDuration);
    // 动画发射
    animeController.forward();
    // 初始化图片定时器
    imageTimer = Timer.periodic(bannerDuration, (_) {
      currentImageIndex = (currentImageIndex + 1) % imageList.length;
      setState(() {});
    });
  }

  @override
  void dispose() {
    animeController.dispose();
    imageTimer.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
            alignment: Alignment.center,
            color: const Color(0xFF3F3F3F),
            child: AnimatedSwitcher(
                duration: bannerDuration,
                child: FadeTransition(
                    opacity: animeController,
                    key: ValueKey<int>(currentImageIndex),
                    child: Image.network(imageList[currentImageIndex])))));
  }
}

本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~

往期文章

个人主页

相关推荐
行者9616 小时前
Flutter适配OpenHarmony:国际化i18n实现中的常见陷阱与解决方案
开发语言·javascript·flutter·harmonyos·鸿蒙
wey60816 小时前
fiuckjs 基于react的flutter动态化方案
flutter
行者9618 小时前
Flutter在鸿蒙平台实现自适应步骤条组件的完整指南
flutter·harmonyos·鸿蒙
行者9620 小时前
Flutter与OpenHarmony深度整合:打造高性能自定义图表组件
flutter·harmonyos·鸿蒙
行者9621 小时前
Flutter适配OpenHarmony:高效数据筛选组件的设计与实现
开发语言·前端·flutter·harmonyos·鸿蒙
yujunlong39191 天前
Dart Frog 后端开发实战:轻量级 API 构建与生产环境调优
flutter·dart·dart frog
Swuagg1 天前
Flutter 探索入门
flutter
kirk_wang1 天前
当Flutter的并发利器遇上鸿蒙:flutter_isolate的OHOS适配之旅
flutter·移动开发·跨平台·arkts·鸿蒙
AiFlutter1 天前
五、交互行为(01):按钮
flutter·低代码·低代码平台·aiflutter·aiflutter低代码
kirk_wang1 天前
Flutter艺术探索-Flutter表单组件:TextField与验证处理
flutter·移动开发·flutter教程·移动开发教程