问题描述
我有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();
}
}