I'm getting the error The argument type
'String Function(String)' can't be assigned to the parameter type 'FutureOr Function(PhoneNumber)'
when I try to validate a phone number in my code. I am trying to use IntlPhoneField.validator to validate the phone number entered in the phonefield but each time it throws this error and I cannot see where the problem is. I am using flutter 3.1.0. Kindly assist. Here is my code.
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:intl_phone_field/country_picker_dialog.dart';
import 'package:intl_phone_field/intl_phone_field.dart';
import 'package:intl_phone_field/phone_number.dart';
class PhoneFieldWidget extends StatelessWidget {
const PhoneFieldWidget(
{Key key,
this.onSaved,
this.onChanged,
this.validator,
this.initialValue,
this.hintText,
this.errorText,
this.labelText,
this.obscureText,
this.suffixIcon,
this.isFirst,
this.isLast,
this.style,
this.textAlign,
this.suffix,
this.initialCountryCode,
this.countries})
: super(key: key);
final FormFieldSetter<PhoneNumber> onSaved;
final ValueChanged<PhoneNumber> onChanged;
final FormFieldValidator<String> validator;
final String initialValue;
final String hintText;
final String errorText;
final TextAlign textAlign;
final String labelText;
final TextStyle style;
final bool obscureText;
final String initialCountryCode;
final List<String> countries;
final bool isFirst;
final bool isLast;
final Widget suffixIcon;
final Widget suffix;
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.only(top: 20, bottom: 14, left: 20, right: 20),
margin: EdgeInsets.only(left: 20, right: 20, top: topMargin, bottom: bottomMargin),
decoration: BoxDecoration(
color: Get.theme.primaryColor,
borderRadius: buildBorderRadius,
boxShadow: [
BoxShadow(color: Get.theme.focusColor.withOpacity(0.1), blurRadius: 10, offset: Offset(0, 5)),
],
border: Border.all(color: Get.theme.focusColor.withOpacity(0.05))),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
labelText ?? "",
style: Get.textTheme.bodyText1,
textAlign: textAlign ?? TextAlign.start,
),
IntlPhoneField(
key: key,
onSaved: onSaved,
onChanged: onChanged,
validator: validator,
initialValue: initialValue ?? '',
initialCountryCode: initialCountryCode ?? 'DE',
showDropdownIcon: false,
pickerDialogStyle: PickerDialogStyle(countryNameStyle: Get.textTheme.bodyText2),
style: style ?? Get.textTheme.bodyText2,
textAlign: textAlign ?? TextAlign.start,
decoration: InputDecoration(
hintText: hintText ?? '',
hintStyle: Get.textTheme.caption,
floatingLabelBehavior: FloatingLabelBehavior.never,
contentPadding: EdgeInsets.all(0),
border: OutlineInputBorder(borderSide: BorderSide.none),
focusedBorder: OutlineInputBorder(borderSide: BorderSide.none),
enabledBorder: OutlineInputBorder(borderSide: BorderSide.none),
suffixIcon: suffixIcon,
suffix: suffix,
errorText: errorText,
)),
],
),
);
}
The error points to this line.
CodePudding user response:
The validator
of IntlPhoneField
is defined as below. Try
final FutureOr<String?> Function(PhoneNumber?)? validator;