【问题标题】:How can I cast TextEditingController to String in Flutter?如何在 Flutter 中将 TextEditingController 转换为 String?
【发布时间】:2020-12-18 09:41:33
【问题描述】:

我正在从 Firestore 中检索一些数据,如下所示:

 String _fName;

  Future<dynamic>_retrieveData() async{
    var firebaseUser = await FirebaseAuth.instance.currentUser();
    await Firestore.instance.collection("tryingdata").document(firebaseUser.uid).snapshots().listen((DocumentSnapshot doc) async{
      Map<String, dynamic> document = doc.data;
      setState((){
        _fName = document['firstName'];
      });
      print(_fName);
    });
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _retrieveData();
  }

我想在我的 TextFormField 中有一个 initialValue,但我必须使用控制器而不是 initialValue,但控制器必须是 TextEditingController 变量。但我从数据库中检索字符串。我希望数据库中的值作为初始值显示在 TextFormField 中。 我收到以下错误:错误:无法将参数类型“String”分配给参数类型“TextEditingController”。

TextFormField(
              controller: _fName,
              textAlign: TextAlign.left,
            ),

感谢您的帮助!

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore textformfield


    【解决方案1】:

    创建你的控制器:

    var controller = TextEditingController();
    

    然后一旦你得到字符串,就做

    setState(() => controller.text = _fName);
    

    【讨论】:

    • 我的 StringValue 是 _fName ,它是从数据库中检索的,但我不能做 var controller = TextEditingController(text: _fName);它告诉我无法在初始化程序中访问实例成员“_fName”。
    【解决方案2】:
    TextEditingController controller = TextEditingController();
    

    您可以在使用文本设置器创建 TextEditingController 对象后对其进行修改,如下所示:

    controller.text = "my initial value";
    

    你必须使用 set state 来查看变化

    【讨论】:

    • 我可以分配“一些字符串”,它工作正常,但我想分配从我的数据库中检索的 _fName 作为字符串。当我做 var controller = TextEditingController(text: _fName);它告诉我无法在初始化程序中访问实例成员“_fName”。
    猜你喜欢
    • 2022-11-12
    • 2021-12-31
    • 2019-02-16
    • 2021-04-18
    • 2020-08-22
    • 2021-07-26
    • 1970-01-01
    • 2020-05-20
    • 2011-01-26
    相关资源
    最近更新 更多