在 Flutter 的登录屏幕中显示循环进度对话框,如何在 Flutter 中实现进度对话框?

2024-07-04

我有一个登录表单,其中有两个文本字段“用户名”、“密码”和一个按钮“登录”。点击登录按钮后,我将调用 API。我想展示一个CircularProgressIndicator在此 api 调用期间。进度对话框应显示在登录表单的中心和顶部。 我努力了FutureBuilder但它隐藏了登录表单显示CircularProgressIndicator仅有的。我希望屏幕的所有内容都显示在CircularProgressIndicator.

完整代码:

import 'package:flutter/material.dart';
import 'package:the_don_flutter/userModel.dart';
import 'package:validate/validate.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'signup.dart';

class Login extends StatefulWidget{
  @override
  State<Login> createState() {
    // TODO: implement createState
    return LoginFormState();
  }
}

class LoginFormState extends State<Login>{

  final GlobalKey<FormState> formKey = new GlobalKey<FormState>();

  String _passwordValidation(String value){
    if(value.isEmpty){
      return "Field Can't be empty.";
    }else if(value.length < 6)
      return "Password must be of six characters long.";
    return null;
  }

  String _checkValidEmail(String value){
    try{
      Validate.isEmail(value);
    }catch(e){
      return "Email is not valid.";
    }
    return null;
  }

  Future<User> _loginUser() async{
    var response = await http.post("https://example/public/api/login", headers: {}, body: {'username':'[email protected] /cdn-cgi/l/email-protection', 'password':'123456'})
        .catchError((error) => print("Error $error"));
    print("response of login ${response.body}");
    return User.fromJson(json.decode(response.body));
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Container(
        padding: EdgeInsets.only(left: 20.0, top: 100.0, right: 20.0),
        decoration: BoxDecoration(
            image: DecorationImage(
                image: AssetImage("assets/images/bg_green.jpg"),
                fit: BoxFit.fill)),
        child: Column(
          children: <Widget>[

            Form(
              key: formKey,
              child: Column(children: <Widget>[
                Padding(padding: EdgeInsets.only(bottom: 20.0),
                  child: TextFormField(
                    validator: _checkValidEmail,
                    decoration: InputDecoration(
                        hintText: "[email protected] /cdn-cgi/l/email-protection",
                        labelText: "User Name",
                        hintStyle: TextStyle(color: Colors.white)),
                    style: TextStyle(color: Colors.white),
                    autofocus: true,),),
                TextFormField(
                  obscureText: true,
                  validator: _passwordValidation,
                  decoration: InputDecoration(
                      hintText: "password",
                      labelText: "Password",
                      hintStyle: TextStyle(color: Colors.white)),
                  style: TextStyle(color: Colors.white),
                  autofocus: true,)
              ],),),
            Padding(padding: EdgeInsets.only(top: 20.0),
              child: Row(mainAxisAlignment: MainAxisAlignment.end,
                children: <Widget>[
                  Text("Forgot Password?", textAlign: TextAlign.start, style: TextStyle(color: Colors.white,),),
                ],),),
            Padding(padding: EdgeInsets.only(top: 20.0),
              child: GestureDetector(
                onTap: _submitForm,
                child: Row(mainAxisAlignment: MainAxisAlignment.end,
                  children: <Widget>[
                    Text("LOGIN", textAlign: TextAlign.start, style: TextStyle(color: Colors.white, fontSize: 40.0),),
                    Icon(Icons.chevron_right, size: 40.0, color: Colors.white,),
                  ],),), ),

            Expanded(
                child: Padding(padding: EdgeInsets.only(bottom: 20.0),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: <Widget>[
                      Text("Don't have an account?", textAlign: TextAlign.start, style: TextStyle(color: Colors.white,),),
                      Container(
                          margin: EdgeInsets.only(left: 8.0),
                          child: GestureDetector(
                            onTap: (){Navigator.push(context, MaterialPageRoute(builder: (context) => Signup()));},
                            child: Text("REGISTER NOW!", textAlign: TextAlign.start, style: TextStyle(color: Colors.black,),),
                          )),
                    ],
                  ),))
          ],
        ),
      ),
    );
  }

  _submitForm() {
    if(formKey.currentState.validate()){
      print("Go to Home page");
      _loginUser();
    }
  }

}

要显示一个progressdialog单击按钮时api正在登录屏幕上获取数据。

尝试这个

声明此方法以显示进度对话框

showLoaderDialog(BuildContext context){
    AlertDialog alert=AlertDialog(
      content: new Row(
        children: [
          CircularProgressIndicator(),
          Container(margin: EdgeInsets.only(left: 7),child:Text("Loading..." )),
        ],),
    );
    showDialog(barrierDismissible: false,
      context:context,
      builder:(BuildContext context){
        return alert;
      },
    );
  }

USAGE

调用 api 时单击按钮,像这样调用此方法

onPressed: () {
                showLoaderDialog(context);
                //api here },

当获取响应时,像这样关闭该对话框

Navigator.pop(context);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Flutter 的登录屏幕中显示循环进度对话框,如何在 Flutter 中实现进度对话框? 的相关文章

  • Firebase 数据库崩溃 SQLiteDatabaseLockedException

    我在少数设备上遇到此崩溃 但仅限于 Android 4 我使用的是 Firebase Android SDK 10 2 1 11 0 2 推迟更新到最新版本 因为它也会强制更新 Google Play 服务 并且许多用户继续保留旧的 GPS
  • React Native Android 本地镜像

    我有这个
  • 如何处理单个 Activity 的多个 Fragment

    我最近开始考虑为我的 Android 设备开发应用程序 我产生这种兴趣的原因是我在玩几个arduinos时想到了一个好主意 让它们与我的手机进行通信 就像我在arduino本身上测量的任何值的接口一样 现在 我可以采取简单的方法并使用公共资
  • SwipeListView 使用 NullPointerException

    我正在尝试使用SwipeListView 但是当我触摸应用程序上的某个项目时 它会崩溃 日志信息就在那里 05 26 21 52 26 545 E AndroidRuntime 19862 java lang NullPointerExce
  • 不适当的阻塞方法调用,但挂起函数“withContext”只能从协程或另一个挂起函数调用

    在我的服务中 我需要致电onStartCommand一些需要的方法withContext Dispatchers IO 反而CoroutineScope Dispatchers IO like url URL pokemon linkIma
  • 如何确定Android设备的安全补丁级别?

    如何使用 API 或其他机制确定 Android 设备的安全补丁级别 我正在寻找相同的安全补丁信息 可以通过单击手动找到Settings gt About设备上的菜单 例如 谷歌每月都会发布安全补丁2016 12 01 https sour
  • 新项目应该使用哪个 Android Camera API?

    我正在开发一个新的应用程序 我想一直支持果冻豆 冰淇淋三明治 我需要在我的应用程序中使用摄像机 只是拍摄一些 15 秒的镜头 无需处理 我是否必须编写两个相机活动 一个使用相机 api 另一个使用camera2 api 并以某种方式根据设备
  • 为 Flutter Web 应用程序添加 id 或 name 属性或其他标识方式?

    在编写 Flutter Web 应用程序时 我尝试利用基于 Selenium 的 Web UI Testing 框架 遗憾的是 我无法通过 id 或 name 属性识别代表某个 flutter 小部件的 HTML 元素 HTML 文档中不存
  • Google Play 游戏服务 - 自定义通知/欢迎回来

    我一直在互联网上查找 但找不到我的答案 有没有办法向用户显示他们已登录 GPGS 第一次登录时 您会收到一条通知 内容为 欢迎 但是当您下次打开应用程序时 什么也没有显示 有没有办法显示欢迎回来通知 对于 iOS 这是可能的 在第 9 步上
  • getAllNetworkInfo() 在 M 中已弃用,但其替代品具有不同的行为

    ConnectivityManager 的 getAllNetworkInfo 在 API 23 上已弃用 其注释表示使用 getAllNetworks 代替 然而我发现这些没有相同的行为 例如 如果手机有可用的活动蜂窝网络 但 wifi
  • Android onBackPressed() 没有被调用?

    在我的 MainActivity 从 AppCompatActivity 扩展 中 我想重写 onBackPressed 方法 如下所示 Override public void onBackPressed Log d MainActivi
  • Google 登录使用新的 GoogleSignInOptions 获取访问令牌

    我的 Android 应用程序当前使用 GoogleAuthUtil 来登录用户并获取access token它被传递到后端 下面的代码片段显示创建 GoogleApiClient 并使用 GoogleAuthUtil 获取令牌 mGoog
  • 读取 NFC 标签时出现奇怪的字符

    我正在尝试使用 Android 读取 NFC 标签 我是一名养蜂人 这是为了在我接近蜂巢时识别它们 我已经在这里搜索过 但阅读标签时仍然遇到问题 我想阅读文本 但是当它阅读时 在所需文本之前有一个类似正方形的字符和显示为 十 的字符 这是我
  • Androidx 模块,android:attr/ttcIndex 和 android:attr/fontVariationSettings 未找到

    我正在将所有支持 appcompat 库迁移到 androidx 所有更新后 由于此错误 我无法构建我的项目 app processDebugManifest UP TO DATE AGPBI kind error text error r
  • 在带有效果的 Android 按钮中使用图像

    现在我在 StackOverflow 上遇到了相关问题 但不幸的是没有一个解决方案对我有用 这就是为什么我不得不单独问这个问题 我是 Android 新手 问题 我需要一个充当按钮的图像 现在我明白 这可以通过在标准按钮上使用图像或使用称为
  • Proguard 损坏可绘制文件

    我对 proguard 有一个奇怪的问题 不知何故它破坏了我的有效可绘制文件 没有proguard的drawable显示可以 proguard 应该缩小 xml 可绘制对象吗 可绘制 wide btn round white xml
  • React-native 应用程序在真实的 Android 设备上崩溃

    我正在使用react native 目前开始使用redux并创建了一个应用程序 但是当我在模拟器上运行该应用程序时 它工作正常 然后我通过 USB 将我的手机与 android 6 连接 它也可以工作 但在 Android 8 的其他设备中
  • 构建失败:程序类型已存在:com.facebook.ads.Ad

    我尝试在 Android Studio 中构建一个模块 它似乎可以在设备上运行 但是当我尝试构建 APK 时 出现错误 Program type already present com facebook ads Ad 这是完整的日志 org
  • 滚动后 ListView 未显示正确的值

    在我的应用程序中我使用的是CustomListView与ArrayAdapter显示不同国家的时间 但在 6 到 7 行之后 取决于手机屏幕尺寸 时间值会重复 根据之前的一些文章 我编写了以下代码片段来获得解决方案 但问题仍然存在 以下是我
  • 在模拟器中实施应用内结算

    我一直在阅读有关 Android 应用程序的 实施应用内计费 的内容 并且文档说不可能在模拟器中测试该应用程序 真的吗 我正在开发的手机没有 移动数据计划 因此我尝试通过 USB 通过 PC 连接手机 但由于我的 PC 位于代理后面 因此我

随机推荐

  • 扩展 Ember RESTAdapter 以与 CouchDB 配合使用

    我基本上使用 CouchDB 来处理我的整个后端 使用 Ember 来处理基本上我的整个前端 并且我需要找到一种方法来使 json 数据在两者之间兼容 特别是关于 命名根 约定 这里是这ember json 期望 http emberjs
  • Selenium2 中的 FirefoxDriver 是否有经过验证的 mouseOver 解决方法?

    我在用着硒Java 2 0b3 我有这个代码 WebDriver driver new InternetExplorerDriver Selenium seleniumDriver new WebDriverBackedSelenium d
  • Windows:Apache Spark 历史服务器配置

    我想使用 Spark 的 History Server 来利用 Web UI 的日志记录机制 但我发现在 Windows 计算机上运行此代码有些困难 我做了以下事情 设置我的 Spark defaults conf 文件以反映 spark
  • 启动 R 会话时安装软件包

    我对 R 编程相当陌生 我正在尝试自定义我的 R 设置 以便当 R 会话启动时 会在开始时安装一些软件包 我知道我可以在 Rprofile site 文件中编写一个 First 函数 但是 在 First 函数中添加我的安装包代码后 该包并
  • 在字典中按值获取键

    假设我的所有值都是唯一且未排序的 如何对字典执行以下操作 key value 152 780 87 688 2165 15 我想拿到所有钥匙 我想找到值 688 的密钥 我想获得所有的值 最好没有循环 也不必在外部对象中维护键值关系 我有时
  • C# readonly 关键字在 VB.NET 中的等效项是什么?

    在 C 中 您可以这样做以使您的成员变量不可变 public readonly int y 5 VB NET 中等效的 readonly 关键字是什么 足够令人惊奇的是 它是ReadOnly http msdn microsoft com
  • 禁用故事板警告

    我避免在我的快速代码中收到警告 然而 当谈到故事板的要求时 这对我来说有点困难 所以现在我只想禁用 xcode 显示有关情节提要问题的警告 我尝试了以下方法但没有成功 禁用显示警告选项 正如您提到的选项Show warnings under
  • Solrj 和动态字段

    我有一个 solr 模式 其中包含不同类型的动态字段 例如 在 schema xml 中有
  • 无法使用 webpack 和 Laravel mix 加载 popper.js

    我在我的项目中使用 bootstrap 4 beta 和 Laravel 5 4 并使用 npm 和 laravel mix 加载我的 js 依赖项 到目前为止 一切都运行良好 除了当我尝试使用 booostrap js 方法时 它向我抛出
  • “文件编号”到底是什么?

    我正在使用一些之前从 VB6 转换而来的 C 代码 它执行大量文件 I O 我到处都看到这样的情况 fn VBNET FileSystem FreeFile 其次是VB NET 文件系统 FileOpen 一些文件 I O 然后VB NET
  • 内存模型中的词法作用域是什么样的?

    假设我们有一个函数 function foo var x 10 function bar var y 20 return x y return bar console log foo 这在内存模型中会是什么样子 到目前为止 这就是我想象的堆
  • 将 OIDC 添加到具有受限路由的 React 应用程序

    我想将 OIDC 添加到我的 React 应用程序中 并且我正在使用oidc 客户端 ts https stackblitz com github remix run react router tree main examples auth
  • GWT - 找不到入口点类

    我最近开始开发另一个 GWT 模块 因此 我创建了一个包 其中包含所有新类和一个实现新入口点的特定类 我将 gwt xml 修改为新的入口点 当我编译时 出现以下错误 GWT Compiling client side code WARNI
  • 是否有替代方法来始终使用 static_cast

    我有一个名为StackID 并且在我的整个代码中我必须static cast it to int相当多 例如 StackID somestack int id static cast
  • 使用 Keras RNN 模型使用较少时间步长(不同维度)的数据进行预测

    根据RNN的性质 我们可以得到每个时间戳 时间展开 的预测概率的输出 假设我训练一个具有 5 个时间步长的 RNN 每个时间步长有 6 个特征 因此我必须像这样指定第一层 假设我们使用具有 20 个节点的 LSTM 层作为第一层 model
  • 从 IQueryable 到 IEnumerable

    对于所有摇滚乐手来说 这应该是一个快速的过程 但它现在让我陷入困境 我有一个 F 类型 我正在尝试实现 C 接口 public interface ICrudService
  • 无法访问http://0.0.0.0:8000

    我正在按照以下指示进行操作https fenics readthedocs io projects containers en latest introduction html https fenics readthedocs io pro
  • 如何判断我的代码是否运行在lua模块中?

    我正在写一个脚本testmodule lua并想要检查该文件是否是从另一个脚本导入 需要的或直接由lua testmodule lua 如果它是通过命令行直接启动的 我可以做一些测试或运行一个主函数 否则只是导出一些函数而不执行任何操作 P
  • DatePicker 不适用于 Ajax 加载的内容

    我一直坚持这个问题 日期选择器在静态内容上运行良好 但是当通过 Ajax 加载内容时会失败 我努力了 jQuery noConflict jQuery function document ready function datepickerR
  • 在 Flutter 的登录屏幕中显示循环进度对话框,如何在 Flutter 中实现进度对话框?

    我有一个登录表单 其中有两个文本字段 用户名 密码 和一个按钮 登录 点击登录按钮后 我将调用 API 我想展示一个CircularProgressIndicator在此 api 调用期间 进度对话框应显示在登录表单的中心和顶部 我努力了F