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

所以,一旦我从数据库中收到值,我就调用following

doctorNameChanged("valuefromdatabase");

但是我看不到文本字段中的值.此外,我的数据库中还存在一个值. 是否可以在不使用TextEditingControllersetState的情况下更新值.我正在努力避免这些,因为我的班级被分成很多块,而且太复杂了,不能使用上面的任何一种. 我已经try 在RadioButtonCheckBox上使用相同的方法,它们似乎更新正确. 该值也在_doctorName.stream.value中被更新,该值存在于数据库中,但是textfield不显示任何数据.另外,我试着更改了textfield的 colored颜色 ,这样就没有问题了,而且我可以看到我输入的内容.

我已经制作了应用程序https://github.com/PritishSawant/demo/tree/master/lib的一个小演示

我使用的不是sqflite,而是shared preferences,但问题仍然存在

推荐答案

好了,我终于找到了解决问题的办法.

下面是我的代码,我在下面的示例中使用了SharedPreferences而不是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);
              },
            );
           },
        ),
      ),
    );
  }
}

Dart相关问答推荐

为什么在穷举switch 表达式中需要显式向下转换?

什么相当于 dart 中的 JAVA ThreadLocal?

dart - 通过异步等待避免递归 Stackoverflow

Flutter tabview刷新问题

FlutterError (setState() 在 dispose() 之后调用:(生命周期状态:defunct,not mounted)

如何实现 Iterable

如何解决此Cannot enable MyLocation layer as location permissions are not granted?

如何用 Flutter 在同屏路由上制作英雄风格的动画?

如何使用Flutter dio 下载文件?

如何在Flatter中zoom 两个谷歌 map 标记

如何解决Id does not exist错误?

dart- 四舍五入

不推荐使用AnteStorStateofType,请改用findAncestorStateOfType

基于镜子的反射和传统反射有什么区别?

dart的Completer和Future?

如何在抽象类中声明工厂构造函数?

轻松判断数字是否在 Dart 的给定范围内?

在 Dart 中,你能不能从一个构造函数中调用另一个构造函数

如何在 Dart 中连接两个字符串?

将多张map合并/合并为一张map