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
来处理异步数据加载。希望这些示例对你有帮助!