Flutter简易加载提示插件request_easy_loading的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter简易加载提示插件request_easy_loading的使用

request_easy_loading 插件帮助你在向服务器发送请求时显示加载或进度对话框,并且不需要上下文即可执行此操作。

开始使用

request_easy_loading 包含创建导航键所需的最小实现,并将其传递给库。

如何使用

第一步

下载或克隆此仓库:

https://github.com/sepehr13494/request_easy_loading

第二步

进入项目根目录并在控制台中执行以下命令以获取所需的依赖项:

flutter pub get 

请求简易加载功能

request_easy_loading 提供了以下功能:

  • showLoading
  • showProgressDialog

现在,让我们进入 lib 文件夹,该文件夹包含应用程序的主要代码。

主程序

创建一个导航键并将其传递给 request_easy_loadingsetNavigatorKey 方法,这将管理所有上下文。同时,将导航键传递给你的 MaterialApp 组件。

这可以帮助你在应用程序的任何位置通过以下方式访问当前上下文:

BuildContext currentContext = navigatorKey.currentState!.context;

让我们回到我们的项目中:

final navigatorKey = GlobalKey<NavigatorState>();  // 添加此行

void main() {
  WidgetsFlutterBinding.ensureInitialized();   // 添加此行
  RequestEasyLoading().setNavigatorKey(navigatorKey);   // 添加此行
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: navigatorKey, // 添加此行
      home: HomePage(),
    );
  }
}

现在,你可以轻松地在应用程序的任何地方使用以下代码来显示加载对话框:

showLoading(){
  RequestEasyLoading().showEasyLoading();
  // 或者你可以传递自己的可选小部件(你的小部件必须包含 Dialog 小部件)
  RequestEasyLoading().showEasyLoading(widget: myWidget);
}

或者取消加载:

cancelLoading(){
  RequestEasyLoading().cancelEasyLoading();
}

对于需要上传文件并且需要显示进度对话的请求,可以简单地使用:

showProgressDialog(){
  RequestEasyLoading().showProgressDialog(sent, total);
  // 或者你可以传递自己的可选小部件(你的小部件必须包含 Dialog 小部件)
  RequestEasyLoading().showProgressDialog(sent, total, widget: myWidget);
}

对于使用 dio 的情况,可以这样使用:

sendFileRequest(){
  dio.post(
      baseUrl,
      data: body,
      onSendProgress:(int sent,int total){
        print("$sent , $total");
        RequestEasyLoading().showProgressDialog(sent,total);
      }
  );
}

示例代码

以下是完整的示例代码:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:request_easy_loading/request_easy_loading.dart';

final navigatorKey = GlobalKey<NavigatorState>();
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  RequestEasyLoading().setNavigatorKey(navigatorKey);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: navigatorKey,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Timer? timer;
  int sent = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Request Easy Loading"),
      ),
      body: Center(
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () {
                RequestEasyLoading().showEasyLoading();
                Future.delayed(Duration(seconds: 2), () {
                  RequestEasyLoading().cancelEasyLoading();
                });
              },
              child: Text("显示加载"),
            ),
            ElevatedButton(
              onPressed: () {
                Timer.periodic(Duration(seconds: 1), (timer) {
                  RequestEasyLoading().showProgressDialog(sent, 100);
                  if (sent == 100) {
                    timer.cancel();
                    sent = 0;
                  } else {
                    sent += 20;
                  }
                });
              },
              child: Text("显示进度加载"),
            ),
          ]
              .map((e) => Padding(
                    padding: EdgeInsets.symmetric(vertical: 16),
                    child: e,
                  ))
              .toList(),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    if (timer != null) {
      timer!.cancel();
    }
    super.dispose();
  }
}

更多关于Flutter简易加载提示插件request_easy_loading的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter简易加载提示插件request_easy_loading的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用request_easy_loading插件的示例代码。这个插件提供了一个简易的加载提示功能,非常适合在网络请求或其他需要显示加载状态的地方使用。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加request_easy_loading的依赖:

dependencies:
  flutter:
    sdk: flutter
  request_easy_loading: ^3.0.0  # 请根据最新版本调整版本号

然后运行flutter pub get来安装依赖。

2. 初始化插件

在你的main.dart文件中,你需要初始化RequestEasyLoading。通常,这会在MaterialAppbuilder参数中进行,以便在整个应用中都可以使用加载提示。

import 'package:flutter/material.dart';
import 'package:request_easy_loading/request_easy_loading.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return EasyLoading(
      // 初始化配置
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
      dismissOnBackgroundTap: true, // 点击背景是否消失
      indicatorType: EasyLoadingIndicatorType.fadingCircle, // 加载指示器类型
      loadingStyle: EasyLoadingStyle.custom, // 加载样式
      customProgressIndicator: CircularProgressIndicator(), // 自定义进度指示器
      maskType: EasyLoadingMaskType.black, // 遮罩类型
      photoSize: 50.0, // 加载指示器大小
      radius: 10.0, // 圆角大小
      backgroundColor: Colors.grey.withOpacity(0.7), // 背景颜色
      indicatorColor: Colors.blue, // 指示器颜色
      textColor: Colors.white, // 文本颜色
      animationDuration: const Duration(milliseconds: 500), // 动画时长
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 显示加载提示
            EasyLoading.show(status: 'Loading...');
            
            // 模拟网络请求或其他耗时操作
            await Future.delayed(Duration(seconds: 2));
            
            // 隐藏加载提示
            EasyLoading.dismiss();
          },
          child: Text('Show Loading'),
        ),
      ),
    );
  }
}

3. 使用插件

在上面的代码中,我们创建了一个简单的Flutter应用,并在点击按钮时显示加载提示。EasyLoading.show()方法用于显示加载提示,而EasyLoading.dismiss()方法用于隐藏加载提示。

你可以根据需要调整EasyLoading的初始化参数,比如加载提示的文本、颜色、动画效果等。

4. 更多功能

request_easy_loading插件还提供了更多的功能,比如:

  • EasyLoading.showSuccess(message); 显示成功提示
  • EasyLoading.showError(message); 显示错误提示
  • EasyLoading.showInfo(message); 显示信息提示

你可以根据需要调用这些方法来实现不同类型的提示。

这个示例代码展示了如何在Flutter项目中集成并使用request_easy_loading插件来显示加载提示。希望这对你有所帮助!

回到顶部