Flutter加载动画插件micro_loaders的使用
Flutter加载动画插件micro_loaders的使用
Micro Loaders 是一个全面且可定制的Flutter包,为您的移动应用程序带来一系列精美的加载动画。由Micro Club - USTHB开发。
主要特点
- 30多种独特的加载动画:从微妙到壮观
 - 高度可定制:调整大小、颜色和持续时间
 - 易于实现
 - MIT许可证:免费用于商业和个人用途
 
Micro Club是什么?
Micro Club是1985年在USTHB成立的一个科学俱乐部。它是第一个致力于计算机科学和技术的阿尔及利亚科学俱乐部,拥有超过1000名对技术和合作充满热情的成员。
安装
在pubspec.yaml中添加以下内容:
dependencies:
  micro_loaders: ^0.0.5
然后运行:
$ flutter pub get
或者您可以使用终端:
$ flutter pub add micro_loaders
导入
import 'package:micro_loaders/micro_loaders.dart';
快速开始
基本用法
// 简单的Circle Dots Loader
CircleDotsLoader(
  size: 100,
  color: Colors.blue,
  duration: 1
)
// 可定制的Growing Arc Loader
GrowingArcLoader(
  size: 80,
  primaryColor: Colors.white,
  arcColor: Colors.red,
  strokeWidth: 6,
  duration: 1500
)
// 文件下载进度加载器
FileDownloadLoader(
  totalSize: 100.0,
  downloadSpeed: 5.0
)
示例Demo
完整示例代码
import 'package:flutter/material.dart';
import 'package:micro_loaders/micro_loaders.dart';
void main() => runApp(const App());
class App extends StatelessWidget {
  const App({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Micro Loaders',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(brightness: Brightness.dark),
      home: MyWebApp(),
    );
  }
}
class MyWebApp extends StatelessWidget {
  MyWebApp({super.key});
  final loaders = <Widget>[
    const CircleDotsLoader(color: Colors.white, size: 50),
    const CirclesLoader(color: Colors.white, size: 50),
    const CircularOrbitLoader(size: 50, color: Colors.white),
    const CrlMugLoader(size: 50),
    const DotsLoaderView(dotSize: 5, dotColor: Colors.white),
    const DotsProgressLoader(secondColor: Colors.white, size: 5),
    const FileDownloadLoader(
        totalSize: 500, downloadSpeed: 5, color: Colors.white, size: 50),
    const DualRotatingExpandingArcLoader(outerColor: Colors.white, size: 50),
    const DualExpandingArcLoader(outerColor: Colors.white, size: 50),
    const ExpandingArcLoader(color: Colors.white, size: 50),
    const ExpandingArcTwoColorsLoader(color1: Colors.white, size: 50),
    const ExpandingTwoHalvesArcLoader(color1: Colors.white, size: 50),
    const ExplosionLoader(color: Colors.white, size: 20),
    const FadeScaleLoader(color: Colors.white, size: 50),
    const FlowerLoader(size: 25),
    const FourRotatingDots(size: 50),
    const GrowingArcLoader(primaryColor: Colors.white, size: 75),
    const PendulumLoader(color: Colors.white, size: 20),
    const PointsLoader(color: Colors.white, size: 75),
    const ProgressLoader(borderColor: Colors.white, height: 20, width: 100),
    const PulseRingLoader(color: Colors.white, size: 50),
    const RotatingArcLoader(primaryColor: Colors.white, size: 75),
    const RotatingDualHalfArcLoader(color: Colors.white, size: 50),
    const RotatingLoader(color: Colors.white, size: 50),
    const RotatingTwoArcLoader(outerArcColor: Colors.white, arcSize: 50),
    const ScaleDotsLoader(color: Colors.white, size: 5),
    const SlidingDotsLoader(color: Colors.white, size: 5),
    const SlidingSquareLoaderView(
      squareColor: Colors.white,
      squareSize: 8,
      squareCount: 3,
    ),
    const SpinningBarsLoader(color: Colors.white, size: 50),
    const SpinningLoader(),
    const SpiralLoader(color: Colors.white, size: 50, duration: 3000),
    const SunLoader(size: 25, color: Colors.white),
    const SunshineLoader(size: 25, color: Colors.white),
  ];
  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;
    return Scaffold(
      appBar: AppBar(
        elevation: 0.0,
        backgroundColor: Colors.transparent,
        title: const Text(
          'Micro Loaders',
          style: TextStyle(fontSize: 24.0, fontWeight: FontWeight.bold),
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: GridView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: context.adaptiveCrossAxisCount,
            mainAxisSpacing: 20,
            crossAxisSpacing: 20,
            childAspectRatio: 1,
          ),
          itemCount: loaders.length,
          itemBuilder: (context, index) {
            return Column(
              children: [
                Expanded(
                  child: Card(
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                    elevation: 4,
                    color: Colors.grey[900],
                    child: Center(
                      child: Padding(
                        padding: const EdgeInsets.all(16.0),
                        child: loaders[index],
                      ),
                    ),
                  ),
                ),
                Text(
                  loaders[index].toString(),
                  style: TextStyle(
                    fontSize: width * 0.02,
                    fontWeight: FontWeight.bold,
                  ),
                ),
              ],
            );
          },
        ),
      ),
    );
  }
}
extension on BuildContext {
  int get adaptiveCrossAxisCount {
    final width = MediaQuery.of(this).size.width;
    if (width > 1024) {
      return 5;
    } else if (width > 720 && width < 1024) {
      return 4;
    } else if (width > 480) {
      return 3;
    } else if (width > 320) {
      return 2;
    }
    return 1;
  }
}
这个示例展示了如何在Flutter应用中集成并展示多种不同的加载动画。通过这种方式,您可以根据需要选择合适的加载动画,并轻松地将其集成到您的项目中。希望这些信息对您有所帮助!如果您有任何问题或建议,请随时联系我。Happy Coding! 💻✨ Made with ❤️ by Micro Club
更多关于Flutter加载动画插件micro_loaders的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter加载动画插件micro_loaders的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用micro_loaders插件来加载动画的示例代码。micro_loaders是一个提供多种简单加载动画的Flutter包。
步骤 1: 添加依赖
首先,你需要在pubspec.yaml文件中添加micro_loaders依赖:
dependencies:
  flutter:
    sdk: flutter
  micro_loaders: ^latest_version  # 请替换为最新版本号
然后运行flutter pub get来获取依赖。
步骤 2: 导入包
在你的Dart文件中导入micro_loaders包:
import 'package:micro_loaders/micro_loaders.dart';
步骤 3: 使用加载动画
以下是一个简单的例子,展示如何在Flutter应用中使用micro_loaders中的一个加载动画(例如BallPulseLoader):
import 'package:flutter/material.dart';
import 'package:micro_loaders/micro_loaders.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Micro Loaders Example'),
        ),
        body: Center(
          child: LoadingScreen(),
        ),
      ),
    );
  }
}
class LoadingScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[200],
      body: Center(
        child: BallPulseLoader(
          size: 50.0,
          color: Colors.blue,
        ),
      ),
    );
  }
}
自定义加载动画
micro_loaders提供了多种加载动画,你可以根据需要选择适合的动画。例如,如果你想使用DotSpinFadeLoader,只需替换掉BallPulseLoader即可:
class LoadingScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[200],
      body: Center(
        child: DotSpinFadeLoader(
          size: 50.0,
          color: Colors.red,
        ),
      ),
    );
  }
}
使用FutureBuilder结合加载动画
通常,加载动画会在数据加载时显示。以下是一个结合FutureBuilder和加载动画的示例:
import 'package:flutter/material.dart';
import 'package:micro_loaders/micro_loaders.dart';
import 'dart:async';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Micro Loaders with FutureBuilder'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: fetchData(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return LoadingScreen();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text('Data: ${snapshot.data}');
              }
            },
          ),
        ),
      ),
    );
  }
}
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2)); // 模拟数据加载时间
  return 'Hello, Flutter!';
}
class LoadingScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[200],
      body: Center(
        child: BallPulseLoader(
          size: 50.0,
          color: Colors.green,
        ),
      ),
    );
  }
}
以上代码展示了如何在Flutter应用中使用micro_loaders插件来显示加载动画,并结合FutureBuilder来处理异步数据加载。希望这些示例对你有帮助!
        
      
            
            
            
