- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个屏幕,以便用户可以在一瞬间添加一个人的生日,但是在另一瞬间,同一屏幕应该从Firebase加载数据并在TextFields
中显示加载的值。我将BLoC
与流一起使用来执行此操作。我可以正确地从Firebase加载数据,并使用每个StreamBuilders
中的TextField
将其传递到屏幕,但是即使流包含正确的值,也不会显示这些值。在同一页面中,我对可选数据使用了DropdownButtons
,它们可以接收并显示该值。我不确定我在做什么错。
这是每个TextField
的代码:
class InputField extends StatelessWidget {
final IconData icon;
final String hint;
final bool obscure;
final TextInputType type;
final Stream<String> stream;
final Function(String) onChanged;
InputField({this.icon, this.hint, this.obscure, this.type, this.stream, this.onChanged});
@override
Widget build(BuildContext context) {
return StreamBuilder<String>(
stream: stream,
builder: (context, snapshot) {
return TextField(
onChanged: onChanged,
keyboardType: type != null ? type : null,
decoration: InputDecoration(
icon: icon == null ? null : Icon(icon, color: Colors.white,),
hintText: hint,
hintStyle: TextStyle(color: Colors.white),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Theme.of(context).primaryColor)
),
contentPadding: EdgeInsets.only(
left: 5,
right: 30,
bottom: 30,
top: 30
),
errorText: snapshot.hasError ? snapshot.error : null
),
style: TextStyle(color: Colors.white),
obscureText: obscure,
);
}
);
}
}
return Padding(
padding: EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
InputField(
icon: Icons.person_outline,
hint: "Nome do aniversariante",
obscure: false,
type: TextInputType.text,
stream: _birthdayBloc.outName,
onChanged: _birthdayBloc.changeName,
),
InputField(
icon: Icons.phone,
hint: "Telefone",
obscure: false,
type: TextInputType.text,
stream: _birthdayBloc.outPhone,
onChanged: _birthdayBloc.changePhone,
),
InputField(
icon: Icons.email,
hint: "E-mail",
obscure: false,
type: TextInputType.text,
stream: _birthdayBloc.outEmail,
onChanged: _birthdayBloc.changeEmail,
),
DropdownWidget(
isCenter: false,
icon: Icons.list,
arrowIcon: Icons.keyboard_arrow_down,
hint: "Selecione uma categoria",
items: _birthdayBloc.getCategoryList(),
stream: _birthdayBloc.outCategory,
onChanged: _birthdayBloc.changeCategory,
),
DropdownWidget(
isCenter: false,
icon: Icons.notifications,
arrowIcon: Icons.keyboard_arrow_down,
hint: "Selecione a notificação",
items: _birthdayBloc.getNotificationList(),
stream: _birthdayBloc.outNotification,
onChanged: _birthdayBloc.changeNotification,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
flex: 5,
child: DropdownWidget(
isCenter: false,
label: "Mês",
icon: Icons.calendar_today,
arrowIcon: Icons.keyboard_arrow_down,
hint: "Selecione o mês",
items: _birthdayBloc.getMonthsList(),
stream: _birthdayBloc.outMonth,
onChanged: _birthdayBloc.changeMonth,
),
),
Expanded(
flex: 5,
child: DropdownWidget(
isCenter: false,
label: "Dia",
arrowIcon: Icons.keyboard_arrow_down,
hint: "Selecione o dia",
items: _birthdayBloc.getDaysList(),
stream: _birthdayBloc.outDay,
onChanged: _birthdayBloc.changeDay,
),
),
],
),
DropdownWidget(
isCenter: false,
label: "Ano de nascimento",
icon: Icons.perm_contact_calendar,
arrowIcon: Icons.keyboard_arrow_down,
hint: "Selecione o ano",
items: _birthdayBloc.getYearsList(),
stream: _birthdayBloc.outYear,
onChanged: _birthdayBloc.changeYear,
valueController: 'Não sei'
),
Firebase
检索数据的代码:
Future<void> _loadSelectedBirthday(personId) async {
String _userUid = await _getCurrentUserUid();
await _firestore.collection('birthdays').document(_userUid).collection('birthdays').document(personId).get()
.then((document) {
_nameController.add(document.data["name"]);
_phoneController.add(document.data["phone"]);
_emailController.add(document.data["email"]);
_categoryController.add(document.data["category"]);
_notificationController.add(document.data["notification"]);
_monthController.add(document.data["month"]);
_dayController.add(document.data["day"]);
_yearController.add(document.data["year"]);
print(_nameController.value);
print(_phoneController.value);
print(_emailController.value);
print(_categoryController.value);
print(_notificationController.value);
print(_monthController.value);
print(_dayController.value);
print(_yearController.value);
_stateController.add(BirthdayState.READY);
}).catchError((error) {
print('ERROR => $error');
});
}
I/flutter (10907): Person Name
I/flutter (10907): 62999991234
I/flutter (10907): someemail@gmail.com
I/flutter (10907): Familiar
I/flutter (10907): No dia
I/flutter (10907): 3
I/flutter (10907): 25
I/flutter (10907): 1996
最佳答案
看起来您错过了使用值初始化TextField的原因,这就是为什么field缺少数据的原因。 TextField可以通过其 Controller 属性进行初始化:
...
return TextField(
controller: TextEditingController(text: snapshot.data), // <--
keyboardType: type != null ? type : null,
onChanged: onChanged,
...
关于flutter - Flutter在TextField小部件上未显示BLoC流值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60686625/
我正在开发转换器应用程序。在 iOS 中,我们没有下拉菜单之类的东西。对于一两次转换,这不是问题。但是对于相同类型的多次转换(比如时间:年到月、日、小时、分钟和秒),我们也有相反的转换。它使 UIVi
目前我的 SwiftUI 的光标/插入符号 TextField是蓝色的。是否有用于光标颜色或解决方法的 API? 最佳答案 试了一下, .accentColor 诀窍。 TextField(" Ent
我需要有关此功能的帮助。当我在文本字段中输入文本时,我需要您在我输入另一个文本字段时验证该文本。 这是我的代码 class _ProfileState extends State {
所以在 swift 3 中,我只想遍历 textField outlet 集合,如果 textField.text = "",则对其进行处理。我已经完成了以下操作,但我相信应该有一个更优雅的解决方案,
我正在尝试: 使 TextField 的 trailingIcon 仅在用户输入空格以外的文本时才可见。 稍后当用户单击 trailingIcon 时,TextField 中的文本应该被清除并且 tr
我目前正在尝试实现一个 TextField,它应该根据文本字段的状态(未聚焦、聚焦、错误)更改背景颜色。 我试图通过使用仅管理是否选择了 TextField 的列表来实现此目的。我使用 Gesture
我目前正在我的应用程序中构建一些基本的表单功能,并且在点击另一个 TextField 或在编辑模式下按“完成”时,我遇到了 TextFields 没有更改相关绑定(bind)变量中的值的问题。
我想要一个如下所示的文本字段: 文本字段。文本域 。文本域。文本字段 并在文本字段中仅输入数字。你能帮我吗? :) 最佳答案 您不需要父文本字段来充当 4 个文本字段的容器。将 4 个文本字段放置在面
你好,占位符文本和用户输入的文本从我的文本字段中间开始。我将文本字段设置为屏幕高度的 30%,所以我不能简单地缩小文本字段。如何让文本从左上角开始? 最佳答案 你想要做的是水平和垂直对齐,如下所示:
我遇到了一些奇怪的问题,如果您点击其中一个 TextField,它总是会被清除。 class MyEditText extends StatefulWidget { static String t
我在实现 TextField 时遇到了一些困难。更具体地说,我尝试使用 Controller 清除按钮的 onPress 方法上的 TextField。 controller.clear() 从 Te
有没有一种方法可以让当用户在一个文本字段和另一个文本字段(例如 1 和 1)中输入值时,第三个文本字段立即计算总和并显示它无需向 GUI 添加按钮? 最佳答案 向您的 TextField 添加一个文档
使用 ABCPDF 添加 TextField 相当简单: public FormField AddTextField(string inRect, string inName, string inTe
有两个文本字段(具有自动完成功能): Customer: Store: 如您所见,最初我禁用了第二个文本字段。我想要的是当用户完成从客户文本框中选择项目时,应该启用商店文本框。这是我尝试过
假设我有一个社交网络(例如: http://www.icloud.com/ )。该网站上有 2 个文本字段:电子邮件、密码。 我想为该网站制作一个应用程序,您可以直接从该应用程序登录。在应用程序上,我
在我的添加联系人页面中,正在验证我的电子邮件文本字段、电话号码字段等。并在单击所有其他文本字段时检查有效电子邮件。因此,当我单击电话号码字段时,它将检查电子邮件有效性并在电子邮件无效时显示警报 Vie
使用 TextField View 时,我的 SwiftUI 项目出现奇怪的行为。 使用以下代码,TextField textContentType 设置为 nil(或 .none,或 UITextC
我有一个 TextField 和一个 Text 小部件,它们应该实时显示在 TextField 中编写的文本。 这是代码: late final TextEditingController _imp
我有 2 个自动完成 UITextField这将在输入文本时触发表格 View 。其中一个我正在使用MVPlaceSearchTextField .我使用 this 自定义构建的另一个. 当我输入 t
我创建了一个函数,可以“映射”对象数组并使用该信息创建material-ui TextField 元素。当用户输入的字符超过 maxLength 时,我尝试输出错误消息。我想仅显示用户当前通过“onC
我是一名优秀的程序员,十分优秀!