如何在底部表单内形成验证步进器?

如何解决如何在底部表单内形成验证步进器?

这个应用程序是一个步进器。在步进器中,我构建添加数据并显示底部表。在底部表中,我们可以从那里添加数据,但在这种情况下,如何在我们单击下一步时验证步进器读取方法底部表(如果用户未填写显示步进器中显示错误的字段)。

这是方法bottomsheet

class StepperclassState extends State<Stepperclass> {

    void inputRekomen(){
      final Formlist formProvider = Provider.of<Formlist>(context,listen: false);
      showModalBottomSheet(
    //isScrollControlled: true,context: context,backgroundColor: Colors.white,shape : RoundedRectangleBorder(
        borderRadius : BorderRadius.vertical( top: Radius.circular(30),)

    ),builder: (context) => DraggableScrollableSheet(

      expand: false,builder: (context,scrollController) => SingleChildScrollView(
        controller: scrollController,child: StatefulBuilder(
            builder: (BuildContext context,StateSetter stateSetter) {
              return Container(

                width: MediaQuery.of(context).size.width,decoration: BoxDecoration(
                  borderRadius: BorderRadius.vertical(
                    top: Radius.circular(30),),color: Color(0xffFFFFF),child: Stack(
                  children: [

                    Container(
                      width: MediaQuery.of(context).size.width,decoration: BoxDecoration(
                          borderRadius: BorderRadius.vertical(
                            top: Radius.circular(30),color: white),child: Stack(
                        children: [
                          Padding(
                            padding: const EdgeInsets.only(top: 15,left: 145),child: Container(
                              width: 80,height: 3,decoration: BoxDecoration(
                                  borderRadius: BorderRadius.vertical(
                                    top: Radius.circular(30),color: Colors.black),Padding(
                            padding: const EdgeInsets.only(top: 30,right: 10,left: 10,bottom: 10),child: Container(
                              width: MediaQuery.of(context).size.width,decoration: BoxDecoration(color: Color(0xffDCE9F3),borderRadius: BorderRadius.circular(30),child: Form(
                                key: formKey3,child: Column(
                                  mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.start,children: [

                                    SizedBox(height: 20,Container(
                                      child: Padding(
                                        padding: const EdgeInsets.only(left: 20),child: Text(
                                          'Apa tindakan rekomendasi untuk mencegah kejadian berulang ?',style: blackregstyle.copyWith(
                                          fontSize: 14,SizedBox(height: 30,child: Text(
                                          'Rekomendasi',Padding(
                                        padding: const EdgeInsets.only(top: 10,bottom: 20.0,left: 20,right: 20),child: Container(
                                        decoration: BoxDecoration(
                                          color: Color(0xffffffff),borderRadius: BorderRadius.circular(16),child: FormBuilderTextField(

                                          validator: FormBuilderValidators.compose([
                                            FormBuilderValidators.required(context,errorText: FormBuilderLocalizations.of(context).requiredErrorText),FormBuilderValidators.minLength(context,3,errorText: FormBuilderLocalizations.of(context).minLengthErrorText(3)),FormBuilderValidators.email(context,errorText: FormBuilderLocalizations.of(context).emailErrorText ),]),textAlign: TextAlign.start,decoration: InputDecoration(

                                            fillColor: Color(0xfffaebeb),filled: inputteks,contentPadding: EdgeInsets.all(12),border: InputBorder.none,focusedBorder: new OutlineInputBorder(
                                              borderRadius: new BorderRadius.circular(10.0),borderSide:  BorderSide(color: Color(0xff3F8AE0) ),focusedErrorBorder: new OutlineInputBorder(
                                              borderRadius: new BorderRadius.circular(10.0),borderSide:  BorderSide(color: Color(0xff3F8AE0),width: 1),enabledBorder: new OutlineInputBorder(
                                              borderRadius: new BorderRadius.circular(10.0),borderSide:  BorderSide(color: Colors.black,errorBorder: new OutlineInputBorder(
                                              borderRadius: new BorderRadius.circular(10.0),borderSide:  BorderSide(color: Color(0xffE64646) ),disabledBorder: InputBorder.none,autofocus: false,controller: rekomen,onChanged: (String value) {
                                            formProvider.tanggaltext(value);
                                            rekomen.selection = TextSelection.fromPosition(TextPosition(offset: rekomen.text.length));
                                          },child: Text(
                                          'Penjelasan',Padding(
                                      padding: const EdgeInsets.only(top: 10,controller: penjelasan,onChanged: (String value) {
                                            formProvider.tanggaltext(value);
                                            penjelasan.selection = TextSelection.fromPosition(TextPosition(offset: penjelasan.text.length));
                                          },child: Text(
                                          'Penanggung Jawab Tindakan Rekomendasi:',SizedBox(height: 5,Padding(
                                      padding: const EdgeInsets.only(left: 20,child: Container(

                                        width: 280,decoration: BoxDecoration(
                                          color: Color(0xffffffff),child: Padding(
                                          padding: const EdgeInsets.only(left: 20,right: 5),Column(
                                      children: [
                                        SizedBox(height: 5,Padding(
                                          padding: const EdgeInsets.only(top: 10,right: 25,left: 25),child: Container(
                                            width: 315,decoration: BoxDecoration(
                                              color: Colors.white,borderRadius: BorderRadius.circular(8),border: Border.all(color: Colors.black),constraints: BoxConstraints(
                                              minHeight: 45,minWidth: 315,child: Row(
                                              children: [
                                                Expanded(
                                                  child: Padding(
                                                      padding: const EdgeInsets.all(12),child: GestureDetector(
                                                        onTap: () {
                                                          stateSetter(() {
                                                            showdropdown = showdropdown == true ? false : true;
                                                          });
                                                          print(showdropdown);
                                                          print(chosenValue1);
                                                        },child: chosenValue == -1 ?  Text(
                                                            'Penanggung Jawab'
                                                        ) : Text(
                                                            '${penanggung[chosenValue]}'
                                                        ),)

                                                  ),GestureDetector(
                                                  onTap: () {
                                                    stateSetter(() {
                                                      showdropdown = showdropdown == true ? false : true;
                                                    });
                                                    print(showdropdown);
                                                    print(chosenValue1);
                                                  },child: Icon
                                                    (
                                                    showdropdown ?
                                                    Icons.arrow_drop_up_rounded : Icons.arrow_drop_down_rounded,],Visibility(
                                          visible: showdropdown,child: Stack(
                                            children: [
                                              Container(
                                                height: 100,width: 290,decoration: BoxDecoration(
                                                  color: Colors.white,child: Padding(
                                                  padding: const EdgeInsets.only(left: 5),child: ListView.builder(
                                                    scrollDirection: Axis.vertical,itemCount: penanggung.length,itemBuilder: (BuildContext context,int position) {

                                                      return InkWell(
                                                        onTap: () {
                                                          stateSetter(() {
                                                            chosenValue = position;

                                                            if ( position == 2){
                                                              showTextField1 = true;
                                                              showdropdown = false;
                                                              buttonshow = false;
                                                            }
                                                            else{
                                                              showTextField1 = false;
                                                              showdropdown = false;
                                                              buttonshow = true;
                                                            }
                                                          });
                                                        },child: Container(
                                                          width: 150,child: Container(
                                                            decoration: (chosenValue==position)
                                                                ? BoxDecoration(
                                                                border: Border.all(color: Colors.green))
                                                                : null,child: Column(
                                                              crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
                                                                SizedBox(height: 5,Text(penanggung[position],textAlign: TextAlign.left,);
                                                    },Visibility(
                                      visible: buttonshow,child: Padding(
                                        padding: const EdgeInsets.only(top: 10,left: 24),child: Container(
                                          height: 44,child: RaisedButton(
                                            onPressed: loading ? null : (){ stateSetter(() {
                                              loading = true;
                                              validateAndSave();
                                              formProvider.submit();
                                            });  },color: Color(0xff4986CC),shape: RoundedRectangleBorder(
                                              borderRadius: BorderRadius.circular(17),child: Text(
                                              'Simpan',style: putihstyle.copyWith(
                                              fontSize: 14,Center(
                                      child: Column(
                                        children: [
                                          Opacity(opacity: loading ? 1.0 : 0,child: CircularProgressIndicator(),)
                                        ],Visibility(
                                      visible: showTextField1,child: Column(
                                        crossAxisAlignment: CrossAxisAlignment.start,children: [
                                          
                                          Padding(
                                            padding: const EdgeInsets.only(bottom: 10,child: Container(
                                              height: 40,child: RaisedButton(
                                                onPressed: loading ? null : (){ stateSetter(() {
                                                  loading = true;

                                                  validateAndSave();
                                                  formProvider.submit();
                                                });  },shape: RoundedRectangleBorder(
                                                  borderRadius: BorderRadius.circular(17),child: Text(
                                                  'Simpan',style: putihstyle.copyWith(
                                                  fontSize: 14,);
            }
        ),);
}
}

这是我的步进器

@override
  Widget build(BuildContext context) {

    CoolStep(
        
        title: 'Identitas',subtitle: 'Isi Identitas Saksi/korban',alignment: Alignment.topCenter,content: Stack(
          children: [
            Padding(
              padding: const EdgeInsets.only(bottom: 20),child: Container(
                width: 461,height: 350,decoration: BoxDecoration(
                  color: Color(0xffDCE9F3),borderRadius: BorderRadius.circular(23),child: Padding(
                  padding: const EdgeInsets.all( 20),child: Column(
                    children: [
                      Container(
                        width: 221,height: 146,Stack(
              children: [
                Padding(
                  padding: const EdgeInsets.only(top: 320,left: 250),child: Column(
                    crossAxisAlignment: CrossAxisAlignment.end,children: [

                      FloatingActionButton(onPressed: () => setState(() {
                        inputRekomen();
                      }),tooltip: 'Tambahkan',child: Icon(Icons.add,backgroundColor: Color(0xff5D99C5),validation: () {
          return null;
        },

解决方法

我不确定这是否有助于解决问题,因为问题不够清楚。 首先,您需要将所有步骤都包装在 Form 中,从类属性中设置键。例如:

final _formKey = GlobalKey<FormState>();

然后在构建方法上,在 Form 小部件上设置键:

child: Form(
    key: _formKey,...

然后在每个 TextFormField 上放置验证器,例如:

validator: (value) {
    if (value!.isEmpty) {
        return 'Name is required';
    }
    return null;
}

然后,当您需要验证/检查底部表中的其他方法时,只需调用这些函数:

if (!_formKey.currentState!.validate()) {
    return 'Fill form correctly';
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res