Flutter动画加载插件dotlottie_loader的使用
Flutter动画加载插件dotlottie_loader的使用
dotLottieLoader for Flutter
dotLottieLoader
是一个帮助下载和解压缩 .lottie
文件的库,可以访问动画以及包含在包中的资源。这个仓库是基于 dotottieloader-android 库的纯 Dart 版本。
它适用于 Android、iOS、macOS、Linux、Windows 和 Web。
安装
flutter pub add dotlottie_loader
还需要安装 lottie 包来渲染动画。
使用
从应用资源加载
DotLottieLoader.fromAsset("assets/anim2.lottie",
frameBuilder: (BuildContext ctx, DotLottie? dotlottie) {
if (dotlottie != null) {
return Lottie.memory(dotlottie.animations.values.single);
} else {
return Container();
}
}),
从网络加载
DotLottieLoader.fromNetwork(
"https://github.com/sartajroshan/dotlottieloader-flutter/raw/master/example/assets/animation.lottie",
frameBuilder: (ctx, dotlottie) {
if (dotlottie != null) {
return Lottie.memory(dotlottie!.animations.values.single);
} else {
return Container();
}
},
errorBuilder: (ctx, e, s) {
print(s);
return Text(e.toString());
},
),
带有图片的加载
DotLottieLoader.fromAsset(
"assets/animation_external_image.lottie",
frameBuilder: (ctx, dotlottie) {
if (dotlottie != null) {
return Lottie.memory(dotlottie.animations.values.single,
imageProviderFactory: (asset) {
return MemoryImage(dotlottie.images[asset.fileName]!);
});
} else {
return Container();
}
},
),
DotLottie 数据结构
class ManifestAnimation {
String id;
double speed;
String? themeColor;
bool loop;
ManifestAnimation(this.id, this.speed, this.themeColor, this.loop);
}
class Manifest {
String? generator, author;
int? revision;
String? version;
late List<ManifestAnimation> animations;
Map<String, dynamic>? custom;
Manifest(this.generator, this.author, this.revision, this.version,
this.animations, this.custom);
}
class DotLottie {
Manifest? manifest;
Map<String, Uint8List> animations;
Map<String, Uint8List> images;
DotLottie(this.manifest, this.animations, this.images);
}
查看更多文档
更多信息请参考 dotlottie.io。
示例代码
以下是一个完整的示例代码,展示了如何使用 dotlottie_loader
加载不同类型的 Lottie 动画:
import 'package:dotlottie_loader/dotlottie_loader.dart';
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'DotLottieLoader Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("DotLottie Loader"),
),
body: SingleChildScrollView(
child: Center(
child: Column(
children: [
/// 简单的 .Lottie 动画
DotLottieLoader.fromAsset("assets/animation.lottie",
frameBuilder: (ctx, dotlottie) {
if (dotlottie != null) {
return Lottie.memory(dotlottie.animations.values.single);
} else {
return Container();
}
}),
const SizedBox(height: 20),
/// 从网络加载 .Lottie 动画
DotLottieLoader.fromNetwork(
"https://github.com/sartajroshan/dotlottieloader-flutter/raw/master/example/assets/animation.lottie",
frameBuilder: (ctx, dotlottie) {
if (dotlottie != null) {
return Lottie.memory(
dotlottie.animations.values.single,
);
} else {
return Container();
}
},
errorBuilder: (ctx, e, s) {
return Text(e.toString());
},
),
const SizedBox(height: 20),
/// 带外部图片的 .lottie 动画
DotLottieLoader.fromAsset(
"assets/animation_external_image.lottie",
frameBuilder: (ctx, dotlottie) {
if (dotlottie != null) {
return Lottie.memory(dotlottie.animations.values.single,
imageProviderFactory: (asset) {
return MemoryImage(dotlottie.images[asset.fileName]!);
});
} else {
return Container();
}
}),
const SizedBox(height: 20),
/// 带内联图片的 .lottie 动画
DotLottieLoader.fromAsset("assets/animation_inline_image.lottie",
frameBuilder: (ctx, dotlottie) {
if (dotlottie != null) {
return Lottie.memory(dotlottie.animations.values.single,
imageProviderFactory: (asset) {
return MemoryImage(dotlottie.images[asset.fileName]!);
});
} else {
return Container();
}
}),
],
),
),
),
);
}
}
以上代码展示了如何在 Flutter 应用中使用 dotlottie_loader
插件加载和显示不同来源的 Lottie 动画。希望这些信息对你有所帮助!
更多关于Flutter动画加载插件dotlottie_loader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画加载插件dotlottie_loader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用dotlottie_loader
插件来实现动画加载效果的示例代码。这个插件允许你使用Lottie动画作为加载指示器。
首先,确保你已经在pubspec.yaml
文件中添加了dotlottie_loader
依赖:
dependencies:
flutter:
sdk: flutter
dotlottie_loader: ^latest_version # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,创建一个Lottie JSON文件,并将其放置在项目的assets
文件夹中。例如,假设你有一个名为loading.json
的Lottie动画文件。
在pubspec.yaml
文件中,确保你的assets
部分包含了这个文件:
flutter:
assets:
- assets/loading.json
现在,你可以在你的Flutter应用中使用DotLottieLoader
组件来显示加载动画。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:dotlottie_loader/dotlottie_loader.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool isLoading = true; // 模拟加载状态
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DotLottieLoader 示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (isLoading)
DotLottieLoader(
assetName: 'assets/loading.json',
size: 100, // 动画大小
color: Colors.blue, // 动画颜色
duration: 2000, // 动画时长(毫秒)
repeatCount: DotLottieLoaderRepeatCount.indefinite, // 无限循环
),
Text(
isLoading ? '加载中...' : '加载完成',
style: TextStyle(fontSize: 20),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 模拟加载完成
setState(() {
isLoading = !isLoading;
});
},
tooltip: '切换加载状态',
child: Icon(isLoading ? Icons.pause : Icons.play_arrow),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,它包含一个DotLottieLoader
组件来显示Lottie加载动画。我们还添加了一个FloatingActionButton
来切换加载状态,以便你可以看到动画在加载和完成之间的切换。
确保你的loading.json
文件是有效的Lottie动画文件,这样你就可以看到动画效果了。
希望这个示例能帮助你更好地理解和使用dotlottie_loader
插件!