Flutter加载占位符动画插件flutter_shimmer的使用

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

Flutter加载占位符动画插件flutter_shimmer的使用

flutter_shimmer 是一个用于创建闪烁效果(Shimmer effect)的Flutter插件,它能很好地指示加载状态,为用户提供更友好的界面设计,替代传统的ProgressBar或普通加载器。

显示一些❤️并给项目加星以支持该项目

GitHub 项目链接

Shimmer模式示例

Shimmer Mode Screenshot Code Example
Play Store Shimmer Play Store Shimmer PlayStoreShimmer()
Light Mode Shimmer Light Mode Shimmer ListTileShimmer()
Dark Mode Shimmer Dark Mode Shimmer ListTileShimmer(isDarkMode: true)
Purplish Mode Shimmer Purplish Mode Shimmer ListTileShimmer(isPurplishMode: true)
Purplish(Dark) Mode Purplish(Dark) Mode Shimmer ListTileShimmer(isPurplishMode: true, isDarkMode: true)
CustomColor Mode CustomColor Mode Shimmer ProfileShimmer(hasCustomColors: true, colors: [Color(0xFF651fff), Color(0xFF834bff), Color(0xFF4615b2)])

开始使用

颜色模式

  • Light Mode
  • Dark Mode
  • Purplish Mode
  • Custom Color Mode (自定义颜色模式)

可选参数

  • isRectBox: 设置形状,默认为圆形
  • isDarkMode: 是否启用深色模式,默认为浅色模式
  • isPurplishMode: 是否启用紫色调模式,默认为透明
  • isDisabledAvatar: 是否隐藏头像,默认显示
  • isDisabledButton: 是否在ListTileShimmer中隐藏右侧按钮,默认显示
  • beginAlign: 设置渐变开始位置,默认为左上角
  • endAlign: 设置渐变结束位置,默认为右下角
  • hasBottomBox: 是否显示底部矩形框,默认不显示
  • padding: 设置内边距,默认16.0
  • margin: 设置外边距,默认16.0
  • hasCustomColors: 是否使用自定义颜色,默认使用默认颜色
  • colors: 当hasCustomColors设为true时,需提供3种颜色

自定义颜色设置步骤

  1. hasCustomColors属性设为true。
  2. colors属性提供3种颜色。
ListTileShimmer(
  hasCustomColors: true,
  colors: [
    Color(0xFF1769aa),
    Color(0xFF4dabf5),
    Color(0xFF2196f3)
  ],
),

示例代码

以下是一个完整的示例demo,展示了如何在应用中使用flutter_shimmer

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isDarkMode = false;
  bool isPurplishMode = false;
  bool isCustomColors = false;

  @override
  void initState() {
    super.initState();
    setState(() {
      this.isCustomColors = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "flutter_shimmer",
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: Text("Flutter_Shimmer"),
        ),
        body: ListView(
          children: <Widget>[
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "ListTileShimmer ( onlyWithProfilePicture:true )",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            ListTileShimmer(
              bgColor: Colors.yellow,
              onlyShowProfilePicture: true,
              height: 20,
            ),
            Divider(),
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "ListTileShimmer",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            ListTileShimmer(
              bgColor: Colors.pink,
              height: 20,
            ),
            Divider(),
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "YoutubeShimmer",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            YoutubeShimmer(),
            Divider(),
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "VideoShimmer",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            VideoShimmer(),
            Divider(),
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "ProfileShimmer",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            ProfileShimmer(
              hasCustomColors: true,
              colors: [Color(0xFF651fff), Color(0xFF834bff), Color(0xFF4615b2)],
            ),
            Divider(),
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "ProfilePageShimmer",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            ProfilePageShimmer(),
            Divider(),
            Container(
              padding: EdgeInsets.all(16.0),
              child: Text(
                "ProfilePageShimmer(With Bottom Box)",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            ProfilePageShimmer(
              hasBottomBox: true,
            ),
          ],
        ),
      ),
    );
  }
}

通过上述代码和配置,您可以轻松地在您的Flutter应用程序中实现各种类型的Shimmer效果。希望这些信息对您有所帮助!如果有任何问题或建议,请随时告知。


更多关于Flutter加载占位符动画插件flutter_shimmer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加载占位符动画插件flutter_shimmer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用flutter_shimmer插件来加载占位符动画的示例代码。flutter_shimmer是一个非常流行的库,用于在内容加载时显示一个优雅的占位符动画。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_shimmer: ^2.0.0  # 请确保使用最新版本

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

接下来,你可以在你的Flutter应用中创建一个使用flutter_shimmer的示例。这里是一个简单的例子,展示如何在一个ListView中使用ShimmerEffect

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

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Shimmer Example'),
      ),
      body: Center(
        child: ShimmerList(),
      ),
    );
  }
}

class ShimmerList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: 10,
      itemBuilder: (context, index) {
        return Padding(
          padding: const EdgeInsets.all(8.0),
          child: Shimmer.fromColors(
            baseColor: Colors.grey[300]!,
            highlightColor: Colors.grey[100]!,
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Container(
                  width: 40,
                  height: 40,
                  color: Colors.transparent,
                ),
                SizedBox(width: 16),
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                      width: double.infinity,
                      height: 20,
                      color: Colors.transparent,
                    ),
                    SizedBox(height: 4),
                    Container(
                      width: double.infinity,
                      height: 20,
                      color: Colors.transparent,
                    ),
                  ],
                ),
              ],
            ),
          ),
        );
      },
    );
  }
}

在这个例子中,我们创建了一个简单的ListView,每个列表项都使用Shimmer.fromColors来创建一个闪烁的占位符动画。Shimmer.fromColors允许你自定义闪烁效果的基础颜色和高亮颜色。

  • baseColor 是闪烁动画的基础颜色。
  • highlightColor 是闪烁动画的高亮颜色。

每个列表项包含一个模拟用户头像的容器、一个模拟标题的容器以及一个模拟副标题的容器。这些容器在闪烁动画中都是透明的,但它们定义了动画的形状和大小。

这个示例展示了如何在Flutter中使用flutter_shimmer插件来创建漂亮的占位符动画,以提升用户体验。你可以根据需要调整动画的形状、大小和颜色。

回到顶部