Flutter加载覆盖层插件flutter_loading_overlay的使用
Flutter加载覆盖层插件flutter_loading_overlay的使用
FlutterLoadingOverlay
提供了一种简单且灵活的方式来管理 Flutter 应用中的加载覆盖层。无需繁琐的上下文传递或重复代码!通过全局获取器,您可以轻松地使用 startLoading
和 stopLoading
开始和停止加载覆盖层,无需添加括号。此外,您还可以轻松自定义覆盖层的外观。
✨ 特性
- 全局访问:使用
startLoading
和stopLoading
全局访问,无需调用它们为方法。 - 无需上下文:无需传递
BuildContext
;该包会为您处理。 - 可定制覆盖层:更改覆盖层的不透明度、颜色,甚至可以传递一个自定义小部件以完全控制其外观。
- 手势支持:轻松添加自己的
GestureDetector
或使用默认的加载动画,无需麻烦。 - 最小化设置:使用单行代码即可启动和停止加载覆盖层。
💡 安装
在您的 pubspec.yaml
文件中包含以下内容以将此包添加到项目中:
dependencies:
flutter_loading_overlay: ^latest
然后运行:
flutter pub get
🎉 快速开始
忘记手动管理上下文或复杂的加载动画。使用 FlutterLoadingOverlay
,只需调用 startLoading
和 stopLoading
—— 不需要添加括号!
1. 基本示例
这是使用 FlutterLoadingOverlay
的最简单方式。触发时,它会自动显示一个简单的非交互式加载动画。
import 'package:flutter/material.dart';
import 'package:flutter_loading_overlay/flutter_loading_overlay.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
// 初始化覆盖层并设置默认值
FlutterLoadingOverlay().init(navigatorKey: navigatorKey);
return MaterialApp(
navigatorKey: navigatorKey,
home: Scaffold(
appBar: AppBar(
title: const Text('加载覆盖层示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 调用 startLoading,无需括号
startLoading;
Future.delayed(const Duration(seconds: 2), () {
// 调用 stopLoading,无需括号
stopLoading;
});
},
child: const Text('显示加载覆盖层'),
),
),
),
);
}
}
2. 自定义不透明度和覆盖层颜色
您可以自定义覆盖层背景的不透明度和颜色,以适应您的应用主题。以下是实现方法:
import 'package:flutter/material.dart';
import 'package:flutter_loading_overlay/flutter_loading_overlay.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
// 使用自定义不透明度和颜色初始化
FlutterLoadingOverlay().init(
navigatorKey: navigatorKey,
opacity: 0.8, // 自定义不透明度
overlayColor: Colors.blue.withOpacity(0.5), // 自定义覆盖层颜色
);
return MaterialApp(
navigatorKey: navigatorKey,
home: Scaffold(
appBar: AppBar(
title: const Text('自定义加载覆盖层示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 调用 startLoading,无需括号
startLoading;
Future.delayed(const Duration(seconds: 2), () {
// 调用 stopLoading,无需括号
stopLoading;
});
},
child: const Text('显示自定义加载覆盖层'),
),
),
),
);
}
}
3. 高级示例(带有 GestureDetector)
对于更高级的用例,FlutterLoadingOverlay
允许您传递一个自定义小部件,如 GestureDetector
,并处理各种手势,例如点击、双击或长按。
import 'package:flutter/material.dart';
import 'package:flutter_loading_overlay/flutter_loading_overlay.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
// 使用自定义 GestureDetector 小部件初始化
FlutterLoadingOverlay().init(
navigatorKey: navigatorKey,
customChild: GestureDetector(
onTap: () => print('覆盖层被点击!'),
onDoubleTap: () => print('覆盖层被双击!'),
onLongPress: () => print('覆盖层被长按!'),
child: const CircularProgressIndicator(),
),
);
return MaterialApp(
navigatorKey: navigatorKey,
home: Scaffold(
appBar: AppBar(
title: const Text('带有手势检测器的加载覆盖层'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
startLoading; // 启动覆盖层
Future.delayed(const Duration(seconds: 2), () {
stopLoading; // 停止覆盖层
});
},
child: const Text('显示加载覆盖层'),
),
),
),
);
}
}
📚 API 参考
init
方法
void init({
required GlobalKey<NavigatorState> navigatorKey,
Widget? customChild,
double opacity = 0.5,
Color overlayColor = Colors.black,
})
更多关于Flutter加载覆盖层插件flutter_loading_overlay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter加载覆盖层插件flutter_loading_overlay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用flutter_loading_overlay
插件的示例代码。这个插件允许你在应用上显示一个加载覆盖层,通常在执行耗时操作时非常有用。
首先,确保你的pubspec.yaml
文件中包含flutter_loading_overlay
依赖项:
dependencies:
flutter:
sdk: flutter
flutter_loading_overlay: ^0.6.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖项。
接下来,在你的Flutter应用中,你可以按照以下方式使用flutter_loading_overlay
:
import 'package:flutter/material.dart';
import 'package:flutter_loading_overlay/flutter_loading_overlay.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: LoadingOverlayWidget(),
);
}
}
class LoadingOverlayWidget extends StatefulWidget {
@override
_LoadingOverlayWidgetState createState() => _LoadingOverlayWidgetState();
}
class _LoadingOverlayWidgetState extends State<LoadingOverlayWidget> {
final LoadingOverlayController _loadingOverlayController = LoadingOverlayController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Loading Overlay Example'),
),
body: LoadingOverlay(
isLoading: _loadingOverlayController.isLoading,
child: Center(
child: ElevatedButton(
onPressed: () async {
// 显示加载覆盖层
_loadingOverlayController.show();
// 模拟耗时操作
await Future.delayed(Duration(seconds: 3));
// 隐藏加载覆盖层
_loadingOverlayController.hide();
},
child: Text('Show Loading Overlay'),
),
),
overlay: CircularLoadingOverlay(
// 自定义覆盖层样式
color: Colors.black.withOpacity(0.5),
progressIndicator: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
),
controller: _loadingOverlayController,
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当点击按钮时,会显示一个加载覆盖层,并在3秒后隐藏。
代码解释
- 依赖项:确保
pubspec.yaml
中包含flutter_loading_overlay
。 - 控制器:
LoadingOverlayController
用于控制加载覆盖层的显示和隐藏。 - LoadingOverlay Widget:
isLoading
:绑定到控制器的isLoading
属性。child
:子部件,这里是一个按钮。overlay
:自定义的加载覆盖层样式,这里使用了CircularLoadingOverlay
并设置了颜色和进度指示器。controller
:绑定到LoadingOverlayController
。
- 按钮点击事件:
- 调用
_loadingOverlayController.show()
显示加载覆盖层。 - 使用
Future.delayed
模拟耗时操作。 - 调用
_loadingOverlayController.hide()
隐藏加载覆盖层。
- 调用
这个示例展示了如何使用flutter_loading_overlay
插件在Flutter应用中添加加载覆盖层,并根据需要进行自定义。