繁体   English   中英

如何在一个 textformfield 中使用带有两个变量的验证器?

[英]how to use validator with two variables in one textformfield?

我想问一下是否有关于如何在条件语句中比较两个变量的方法。 如您所见, couponSalePriceCtrlrcouponOrigPriceCtrlr 我想验证用户输入的sale price不应大于original price ,但validator似乎只接受(value)参数和String数据类型。

Widget editCouponSalePriceWidget(couponSalePriceCtrlr, couponOrigPriceCtrlr) {
  // converted the variable parameters into double data type
  double convertedSalePrice = double.parse(couponSalePriceCtrlr);
  double convertedOrigPrice = double.parse(couponOrigPriceCtrlr);
  return Padding(
    padding: const EdgeInsets.symmetric(horizontal: 0.0),
    child: TextFormField(
      style: const TextStyle(fontFamily: 'Poppins', fontSize: 13),
      controller: couponSalePriceCtrlr,
      keyboardType: TextInputType.number,
      decoration: InputDecoration(
        suffixText: "*",
        suffixStyle: TextStyle(color: Colors.red),
        labelText: 'Sale Price',
        labelStyle: const TextStyle(
            fontSize: 15, fontFamily: 'Poppins', color: Color(0xFF152C4C)),
        isDense: true,
        prefixIcon: const Icon(Icons.person),
        enabledBorder: OutlineInputBorder(
          borderSide: const BorderSide(color: Color(0xFFCECECE)),
          borderRadius: BorderRadius.circular(12),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(12),
          borderSide: const BorderSide(color: Color(0xFFCECECE)),
        ),
        hintText: 'Orig Price',
        fillColor: const Color(0xFFFEFEFE),
        filled: true,
      ),
     // however the validator only accepts, a string data type.
      validator: (convertedSalePrice,convertedOrigPrice) {
        if (convertedSalePrice!.isEmpty ||
            !RegExp(r'[0-9]+[,.]{0,1}[0-9]*').hasMatch(convertedSalePrice)) {
          return "Please enter a valid original price.";
        } else {
          return null;
        }
      },
    ),
  );
}

我假设您有 2 个TextFormField ,一个是原价,另一个是促销价。 当然是String类型,就是这样:)所以需要转成integer/double类型。 如果你的keyboardType是数字,就没有必要检查用户输入的是字符串类型,否则就检查。

TextFormField(
  controller: couponOrigPriceCtrlr,
  keyboardType: TextInputType.number,
)
TextFormField(
  controller: convertedSalePrice,
  keyboardType: TextInputType.number,
  validator: (saleStr) {
    double originalDouble = double.parse(couponOrigPriceCtrlr.text);
    double saleDouble = double.parse(saleStr.text);
    // check what ever you want here
    // ...

  }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM