我有这个无国籍的出生日期输入类,只读的。点击时,它会显示一个日期选择器,在用户选择一个日期后,它会将值发送到 bloc 状态,它会更改状态和值,以便显示从日期选择器中选择的日期。这是代码:
class DateOfBirthInput extends StatelessWidget {
DateOfBirthInput({
required this.textEditingController,
required this.focusNode
});
final TextEditingController textEditingController;
final FocusNode focusNode;
@override
Widget build(BuildContext context) {
return BlocBuilder<SignUpBloc, SignUpState>(
buildWhen: (previous, current) => previous.dateOfBirth != current.dateOfBirth,
builder: (context, state) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Date of Birth',
style: TextStyle(
color: Colors.grey[500],
fontWeight: FontWeight.w600
)
),
TextFormField(
enabled: state.formEnabled,
controller: textEditingController,
focusNode: focusNode,
readOnly: true,
decoration: InputDecoration(
hintText: '1 January 1990',
hintStyle: TextStyle(
color: Colors.grey[400],
fontWeight: FontWeight.w500
),
suffixIcon: Icon(
Icons.calendar_today_outlined,
size: 24.0,
color: Colors.grey[500],
),
errorText: state.dateOfBirthDisplay.invalid ? 'Please enter your date of birth' : null,
errorStyle: TextStyle(
fontSize: 14.0,
color: Colors.red,
fontWeight: FontWeight.w500
),
),
onTap: () async {
DateTime? datePicker = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(1900, 1),
lastDate: DateTime.now()
);
if (datePicker != null) {
String dateOfBirth = DateFormat('dd MMMM yyyy').format(DateTime.parse(datePicker.toString()));
textEditingController.text = dateOfBirth;
context.read<SignUpBloc>.add(DateOfBirthChanged(dateOfBirthDisplay: dateOfBirth, dateOfBirth: datePicker));
}
}
),
],
);
},
);
}
}
在这种情况下,我得到了一个错误。这是上下文:
context.read<SignUpBloc>.add(DateOfBirthChanged(dateOfBirthDisplay: dateOfBirth, dateOfBirth: datePicker));
这是错误:
此处不能使用前缀“上下文”,因为它被本地声明所遮蔽。尝试重命名前缀或本地声明。
我尝试更改其中一个上下文,builder: (context, state), 我已更改为builder: (ctx, state),但仍然出现相同的错误。
请帮忙。