Flutter屏幕加载动画插件screen_loader的使用
Flutter屏幕加载动画插件screen_loader的使用
Flutter 是一个用于开发跨平台移动应用的强大框架,而 screen_loader
插件为 Flutter 应用提供了优雅且高效的屏幕加载动画解决方案。本文将详细介绍如何使用 screen_loader
插件,并提供完整的示例代码。
Why ScreenLoader?
- 无需更新小部件状态:借助
stream_mixin
,在不更新小部件状态的情况下显示和隐藏加载器,提高性能。 - 不影响导航栈:不会向导航栈中推送任何小部件,有助于保持导航栈和上下文的整洁。
- 易于使用:只需使用带有
ScreenLoader
混入(mixin)的屏幕,并用loadableWidget
包装小部件即可。 - 自定义加载器:可以使用任何小部件作为加载器。
- 全局配置:可以一次性为所有屏幕配置相同的加载器,也可以为不同屏幕配置不同的加载器。
Basic Usage
- 使用
ScreenLoader
混入:将你的屏幕与ScreenLoader
混入一起使用。 - 包装小部件:用
loadableWidget
包装你想要添加加载动画的小部件。 - 执行异步任务:使用
performFuture
函数,在执行异步任务时显示加载器。
配置单个屏幕的不同加载器
通过重写 loader()
方法来自定义每个屏幕的加载器:
loader() {
// 这里可以是任意小部件
return AlertDialog(
title: Text('Wait.. Loading data..'),
);
}
为所有屏幕一次性配置加载器
在 main()
函数中调用 configScreenLoader()
来设置全局加载器:
void main() {
configScreenLoader(
loader: AlertDialog(
title: Text('Global Loader..'),
),
bgBlur: 20.0,
);
runApp(MyApp());
}
加载器优先级(从高到低)
- 本地加载器:在小部件中重写的加载器。
- 全局加载器:在
configScreenLoader()
中指定的加载器。注意:如果没有重写loader()
,则会使用此加载器。 - 默认加载器:如果未指定全局加载器或重写本地加载器,则使用默认加载器。
迁移指南至4.0.0版本
- 移除了
ScreenLoaderApp
小部件。现在不需要再用任何小部件来包装应用程序以设置全局配置,而是直接在runApp()
之前调用configScreenLoader()
。 - 不再替换
build
函数为screen
,而是继续使用build
函数,并用loadableWidget
包装需要显示加载器的小部件。
示例代码
以下是一个完整的示例代码,展示了如何使用 screen_loader
插件:
import 'package:flutter/material.dart';
import 'package:screen_loader/screen_loader.dart';
void main() {
configScreenLoader(
loader: AlertDialog(
title: Text('Global Loader..'),
),
bgBlur: 20.0,
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Screen Loader',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Screen(),
);
}
}
class Screen extends StatefulWidget {
@override
_ScreenState createState() => _ScreenState();
}
/// 有状态的屏幕
class _ScreenState extends State<Screen> with ScreenLoader {
@override
loader() {
return AlertDialog(
title: Text('Wait.. Loading data..'),
);
}
@override
loadingBgBlur() => 10.0;
Widget _buildBody() {
return Center(
child: Icon(
Icons.home,
size: MediaQuery.of(context).size.width,
),
);
}
@override
Widget build(BuildContext context) {
return loadableWidget(
child: Scaffold(
appBar: AppBar(
title: Text('ScreenLoader Example'),
),
body: _buildBody(),
floatingActionButton: FloatingActionButton(
onPressed: () async {
await this.performFuture(NetworkService.getData);
},
child: Icon(Icons.refresh),
),
),
);
}
}
/// 无状态的屏幕
class BasicScreen extends StatelessWidget with ScreenLoader {
BasicScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return loadableWidget(
child: Scaffold(
appBar: AppBar(
title: Text('Basic ScreenLoader Example'),
),
body: Center(
child: Icon(
Icons.home,
size: MediaQuery.of(context).size.width,
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
await this.performFuture(NetworkService.getData);
},
child: Icon(Icons.refresh),
),
),
);
}
}
class NetworkService {
static Future getData() async {
return await Future.delayed(Duration(seconds: 2));
}
}
希望这篇文章能够帮助你更好地理解和使用 screen_loader
插件。如果你有任何问题或建议,请随时在 GitHub 上提交 Issue 或 Pull Request。
更多关于Flutter屏幕加载动画插件screen_loader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter屏幕加载动画插件screen_loader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用screen_loader
插件来实现屏幕加载动画的示例代码。screen_loader
是一个Flutter插件,它允许你在应用中的屏幕之间添加加载动画,以增强用户体验。
首先,你需要在你的pubspec.yaml
文件中添加screen_loader
依赖:
dependencies:
flutter:
sdk: flutter
screen_loader: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,让我们看看如何在Flutter应用中实现屏幕加载动画。
示例代码
- 创建Flutter项目(如果还没有项目的话):
flutter create my_app
cd my_app
- 更新
main.dart
文件:
import 'package:flutter/material.dart';
import 'package:screen_loader/screen_loader.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Screen Loader Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ScreenLoaderExample(),
);
}
}
class ScreenLoaderExample extends StatefulWidget {
@override
_ScreenLoaderExampleState createState() => _ScreenLoaderExampleState();
}
class _ScreenLoaderExampleState extends State<ScreenLoaderExample> {
bool isLoading = false;
void navigateWithLoader() async {
setState(() {
isLoading = true;
});
// 模拟一个加载过程,例如网络请求
await Future.delayed(Duration(seconds: 2));
// 加载完成后,导航到新的页面或进行其他操作
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
setState(() {
isLoading = false;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Screen Loader Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: navigateWithLoader,
child: Text('Navigate with Loader'),
),
),
// 使用ScreenLoader包裹你的导航上下文
bottomSheet: ScreenLoader(
isLoading: isLoading,
loaderWidget: Container(
color: Colors.white.withOpacity(0.7),
child: Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
),
),
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Screen'),
),
body: Center(
child: Text('You have successfully navigated with a loader!'),
),
);
}
}
解释
-
依赖安装:首先,在
pubspec.yaml
文件中添加screen_loader
依赖。 -
状态管理:在
_ScreenLoaderExampleState
类中,我们使用一个布尔值isLoading
来跟踪加载状态。 -
加载动画:在
ScreenLoader
组件中,我们设置了isLoading
状态来控制加载动画的显示和隐藏。loaderWidget
是我们自定义的加载动画,这里使用了一个半透明的背景和一个居中的CircularProgressIndicator
。 -
导航:在
navigateWithLoader
方法中,我们首先设置isLoading
为true
来显示加载动画,然后模拟一个加载过程(例如网络请求),最后导航到新的页面并设置isLoading
为false
来隐藏加载动画。
这个示例展示了如何使用screen_loader
插件在Flutter应用中实现屏幕加载动画。你可以根据自己的需求自定义加载动画的样式和行为。