我有一个 textfield
我正在使用 sqflite
我的应用程序中的数据库。 sqflite
有一个我需要分配给我的值 textfield
这是我的 textfield
代码
StreamBuilder<String>(
stream: patientHealthFormBloc.doctorName,
builder: (context, snapshot) {
return TextFormField(
initialValue: patientHealthFormBloc.doctorNameValue,
onChanged: (value) {
patientHealthFormBloc.doctorNameChanged(value);
},
...
现在在
initstate
我的类的方法,我正在从数据库中获取值。这是一个异步操作,所以需要时间。
我的 bloc 类有如下代码
Function(String) get doctorNameChanged => _doctorName.sink.add;
因此,一旦我从数据库中收到值,我就会调用以下方法
doctorNameChanged("valuefromdatabase");
但我看不到文本字段中的值。我的数据库中还有一个值。
是否可以在不使用
TextEditingController
的情况下更新该值?或 setState
.我试图避免这些,因为我的类(class)被分成很多块,而且太复杂而无法使用上述任何一种我曾尝试对
RadioButton
使用相同的方法和 CheckBox
他们似乎正确更新。该值也在
_doctorName.stream.value
中更新它存在于数据库中,但 textfield
不显示任何数据。我也尝试改变 textfield
的颜色所以那里没有问题,因为我可以看到我输入的内容。我做了一个应用的小演示 https://github.com/PritishSawant/demo/tree/master/lib
而不是使用
sqflite
, 我正在使用 shared preferences
但问题仍然存在
最佳答案
好的,所以我终于找到了解决我的问题的方法。
以下是我的代码,我刚刚用过 SharedPreferences
而不是 sqflite
对于下面的例子。同样的事情可以用 sqflite
做
class _MyHomePageState extends State<MyHomePage> {
MyBloc myBloc = MyBloc();
TextEditingController myController = TextEditingController();
@override
void dispose() {
myBloc?.close();
myController?.dispose();
super.dispose();
}
@override
void initState() {
super.initState();
AppPreferences.setString("data", "this is my data");
AppPreferences.getString("data").then((value){
myBloc.dataChanged(value);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: StreamBuilder(
stream: myBloc.data,
builder: (context,snapshot){
debugPrint(snapshot.data);
myController.value = myController.value.copyWith(text: myBloc.dataValue);
return TextFormField(
controller: myController,
onChanged: (value){
myBloc.dataChanged(value);
},
);
},
),
),
);
}
}
关于flutter - 如何使用 StreamBuilder 更新 TextField 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59562308/