flutter - 如何使用 StreamBuilder 更新 TextField 的值?

标签 flutter dart textfield sqflite rxdart

我有一个 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/

相关文章:

flutter - Flutter 中的 Android LiveData 相当于什么?

flutter - flutter 中的三元运算符

dart - 如何在 flutter 中给出 "Dashed Border"?

extjs - 使用 ExtJS4 从文本字段切换到显示字段

iphone - FBConnect (IPHONE),自定义发布对话框

button - 按下按钮后返回一个彩色框

dart - 如何格式化定位文本 block 的背景颜色?

flutter - Flutter标签-即使未显示标签,也会创建一个标签

flutter 错误 :Failed assertion: line 1785 pos 12: 'hasSize'

dart - 如何允许用户从文本小部件中选择文本?