Flutter加载覆盖层插件loading_overlay_pro的使用
Flutter加载覆盖层插件loading_overlay_pro的使用
loading_overlay_pro
是一个为Flutter项目提供简单包装和一系列加载动画的小部件。它允许开发者轻松地在应用中添加加载指示器,以提高用户体验。
快速开始
首先,在您的 pubspec.yaml
文件中添加依赖:
dependencies:
loading_overlay_pro: ^最新版本号
然后将文件导入到您的项目中:
import 'package:loading_overlay_pro/loading_overlay_pro.dart';
接下来,您可以在需要的地方使用 LoadingOverlayPro
小部件。下面是一个简单的例子,展示了如何使用这个插件:
LoadingOverlayPro({
Key key,
@required this.isLoading, // 是否显示加载层
@required this.child, // 加载层下的子组件
this.colorBackground = Colors.black54, // 加载层背景颜色,默认为半透明黑色
this.progressIndicator = const LoadingBouncingLine.circle(), // 加载时显示的动画,默认为圆形弹跳线动画
});
您可以进一步自定义加载动画,例如:
LoadingBouncingLine.circle(
borderColor: Colors.cyan,
borderSize: 3.0,
size: 120.0,
backgroundColor: Colors.cyanAccent,
duration: Duration(milliseconds: 500),
);
还可以添加头部和底部文本:
headerLoading: Text("App Name"),
bottomLoading: Text("Loading..."),
更多定制化选项,请参考加载动画文件中的说明。
注意:所有动画都可以通过调用类似 LoadingBouncingLine.square()
的方法直接使用,并且许多基本动画默认包含 .circle()
和 .square()
变体。
示例代码
这里提供了一个完整的示例应用程序,演示了如何使用 loading_overlay_pro
插件创建带有加载覆盖层的页面。
main.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:loading_overlay_pro/loading_overlay_pro.dart';
void main() => runApp(LoadingApp());
class LoadingApp extends StatelessWidget {
const LoadingApp({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: MyApp(),
),
);
}
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
void _openPage(Widget page) {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => page,
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loading Overlay Pro'),
backgroundColor: Colors.blue,
),
body: _buildBody(),
);
}
Widget _buildBody() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: Text("Loading overlay"),
onPressed: () => _openPage(LoadingOverlayPage()),
),
SizedBox(height: 50),
ElevatedButton(
child: Text("Loading Percent"),
onPressed: () => _openPage(PercentPage()),
),
],
),
);
}
}
class LoadingOverlayPage extends StatefulWidget {
@override
_LoadingOverlayPageState createState() => _LoadingOverlayPageState();
}
class _LoadingOverlayPageState extends State<LoadingOverlayPage> {
bool _isLoading = false;
bool _isIOS = false;
final Duration duration = Duration(seconds: 3);
void _submit() {
setState(() {
_isLoading = true;
});
Future.delayed(duration, () {
setState(() {
_isLoading = false;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loading Overlay'),
backgroundColor: Colors.blue,
),
body: LoadingOverlayPro(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: () {
_isIOS = false;
_submit();
},
child: Text('Show Loading BouncingLine'),
),
ElevatedButton(
onPressed: () {
_isIOS = true;
_submit();
},
child: Text('Show Loading Custom IOS'),
),
],
),
),
backgroundColor: _isIOS ? Colors.white : Colors.black54,
isLoading: _isLoading,
progressIndicator: _isIOS
? CupertinoActivityIndicator(radius: 100)
: LoadingBouncingLine.circle(
backgroundColor: Colors.blue,
size: 150.0,
duration: Duration(seconds: 2),
borderColor: Colors.blue,
),
overLoading: _isIOS
? Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FlutterLogo(),
SizedBox(width: 10),
Text(
"Loading Overlay Pro",
style: TextStyle(fontSize: 20.0),
),
],
)
: null,
bottomLoading: _isIOS
? Text("Loading...", style: TextStyle(fontSize: 20.0))
: null,
),
);
}
}
class PercentPage extends StatefulWidget {
@override
_PercentPageState createState() => _PercentPageState();
}
class _PercentPageState extends State<PercentPage> {
bool _isLoading = false;
final Duration duration = Duration(seconds: 10);
void _submit() {
setState(() {
_isLoading = true;
});
Future.delayed(duration, () {
setState(() {
_isLoading = false;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loading Percent'),
backgroundColor: Colors.blue,
),
body: LoadingPercentage(
timer: duration,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: () {
_submit();
},
child: Text('Show Loading Download 10s'),
),
],
),
),
backgroundColor: Colors.black54,
isLoading: _isLoading,
),
);
}
}
此示例展示了两个不同类型的加载页面:“Loading overlay” 使用了标准的 LoadingOverlayPro
组件,而 “Loading Percent” 则展示了带有进度百分比的加载界面。通过点击按钮可以触发加载状态,并在指定时间后自动关闭加载层。
更多关于Flutter加载覆盖层插件loading_overlay_pro的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter加载覆盖层插件loading_overlay_pro的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用loading_overlay_pro
插件的一个基本示例。这个插件允许你在应用上显示一个加载覆盖层,以改善用户体验。
首先,你需要在你的pubspec.yaml
文件中添加这个依赖:
dependencies:
flutter:
sdk: flutter
loading_overlay_pro: ^x.y.z # 请将x.y.z替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用loading_overlay_pro
:
- 导入包:
在你的Dart文件中,导入loading_overlay_pro
包:
import 'package:loading_overlay_pro/loading_overlay_pro.dart';
- 初始化LoadingOverlayProvider:
在你的应用入口文件(通常是main.dart
)中,使用LoadingOverlayProvider
来包装你的MaterialApp或CupertinoApp。
import 'package:flutter/material.dart';
import 'package:loading_overlay_pro/loading_overlay_pro.dart';
void main() {
runApp(
LoadingOverlayProvider(
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
- 显示加载覆盖层:
在你的页面或组件中,你可以通过LoadingOverlay.of(context)
来获取LoadingOverlay
实例,并调用其show()
和hide()
方法来显示和隐藏加载覆盖层。
import 'package:flutter/material.dart';
import 'package:loading_overlay_pro/loading_overlay_pro.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
void _showLoadingOverlay() {
LoadingOverlay.of(context).show();
// 模拟一个耗时操作,比如网络请求
Future.delayed(Duration(seconds: 2), () {
LoadingOverlay.of(context).hide();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loading Overlay Pro Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _showLoadingOverlay,
child: Text('Show Loading Overlay'),
),
),
);
}
}
在这个例子中,当用户点击按钮时,会调用_showLoadingOverlay
方法,该方法会显示加载覆盖层,并在2秒后隐藏它。
- 自定义加载覆盖层(可选):
你还可以自定义加载覆盖层的样式,比如颜色、文本、图标等。你可以通过LoadingOverlayConfig
类来配置这些选项。
void _showCustomLoadingOverlay() {
LoadingOverlay.of(context).showWithConfig(
LoadingOverlayConfig(
color: Colors.blue.withOpacity(0.5),
indicator: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
child: Center(
child: Text(
'Loading...',
style: TextStyle(color: Colors.white),
),
),
),
);
Future.delayed(Duration(seconds: 2), () {
LoadingOverlay.of(context).hide();
});
}
在你的按钮点击事件中使用_showCustomLoadingOverlay
方法来显示自定义的加载覆盖层。
这样,你就可以在你的Flutter应用中使用loading_overlay_pro
插件来显示加载覆盖层了。希望这个示例对你有帮助!