表单中的可选TextFormField

问题描述

我有1个带有2个TextFormField,firstName和lastName的表单。 我需要使用condition和regex验证这两个数据,然后使用Navigator将数据传递到第二页。

问题是,我希望lastName是可选的,也可以为空。 但是我无法删除验证器,因为我仍然需要将它与正则表达式或其他表达式一起使用。

TextEditingController firstName = TextEditingController();
TextEditingController lastName = TextEditingController();

GlobalKey<FormState> _key = GlobalKey();
bool _validate = false;
String first,last;

Form(
  key: _key,autovalidate: _validate,child: Column(children: [
    InputName(
      controller: firstName,placeholder: 'Nama depan',validator: validateFirstName,onSaved: (String val) {
        first = val;
      },),InputName(
      controller: lastName,placeholder: 'Nama belakang',validator: validateLastName,onSaved: (String val) {
        last = val;
      },]),Button(
  text: 'Lanjut mengisi Email',onpressed: () {
    if (_key.currentState.validate()) {
      _key.currentState.save();
      
      String a = firstName.text.capitalize();
      String b = lastName.text.capitalize();
      Navigator.push(
        context,PageRouteBuilder(
          pageBuilder: (context,animation1,animation2) =>
              Regist2Page([a,b]),transitionDuration: Duration(seconds: 0),);
    } else {
      setState(() {
        _validate = true;
      });
    }
  },String validateLastName(String value) {
  if (value.isNotEmpty) {
    if (value.length > 20) {
      return 'Maksimal 20 karakter';
    }
    return null;
  }
  return null;
}

解决方法

尝试使用该验证器

String validateLastName(String value) {
if (value == "") {
  // if value were null,is true and then return null
  return null;
}

if (value.length > 20) {
  return 'Maksimal 20 karakter';
}

return null;
}
,

尝试一下!

String validateLastName(String value,{bool isOptional = false})) {
  if(isOptional && (value==null || value.isEmpty)){
    return null;
  }
  if (value.isNotEmpty) {
    if (value.length > 20) {
      return 'Maksimal 20 karakter';
    }
    return null;
  }
  return null;
}
,

由Agus Setya R解决。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;
using System.Security.Cryptography;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Chrome;

public static class Program
    {


        public static void Main()
        {

            IWebDriver driver;
            
            var options = new ChromeOptions();
            options.AddArgument("headless");
            options.AddArgument("--disable-gpu");
            
            
            driver = new ChromeDriver(options);
            driver.Navigate().GoToUrl("");
            string currentDay = DateTime.Today.DayOfWeek.ToString();
            System.Threading.Thread.Sleep(5000);
            switch(currentDay)
            {
            case "Monday":
                var MondayFood = driver.FindElement(By.XPath("/html/body/main/article/section[1]/div/div[1]/div[2]/div[2]/div/div/div[1]/ul/li[1]/p[1]/span[2]"));
                System.Console.WriteLine(MondayFood.Text);

                break;

            case "Tuesday":
                var TuesdayFood = driver.FindElement(By.XPath("/html/body/main/article/section[1]/div/div[1]/div[2]/div[2]/div/div/div[2]/ul/li[1]/p[1]/span[2]"));
                System.Console.WriteLine(TuesdayFood.Text);
                break;

            case "Wednesday":
                var WednesdayFood = driver.FindElement(By.XPath("/html/body/main/article/section[1]/div/div[1]/div[2]/div[2]/div/div/div[3]/ul/li[1]/p[1]/span[2]"));
                System.Console.WriteLine(WednesdayFood.Text);
                break;

            case "Thursday":
                var ThursdayFood = driver.FindElement(By.XPath("/html/body/main/article/section[1]/div/div[1]/div[2]/div[2]/div/div/div[4]/ul/li[1]/p[1]/span[2]"));
                System.Console.WriteLine(ThursdayFood.Text);
                break;

            case "Friday":
                var FridayFood = driver.FindElement(By.XPath("/html/body/main/article/section[1]/div/div[1]/div[2]/div[2]/div/div/div[5]/ul/li[1]/p[1]/span[2]"));
                System.Console.WriteLine(FridayFood.Text);
                break;
                
            }

        System.Console.ReadLine();
             
        
        
    }

        

    }