如何在Flutter中将TextEditingController转换为String?

问题描述

我正在像这样从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,但是必须使用controller而不是initialValue,但是controller必须是TextEditingController变量。但是我从数据库中检索字符串。我希望数据库中的值作为初始值显示在TextFormField中。 我遇到以下错误错误:无法将参数类型'String'分配给参数类型'TextEditingController'。

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

谢谢您的帮助!

解决方法

创建您的控制器:

var controller = TextEditingController();

然后,一旦获得字符串,就做

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

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

controller.text = "my initial value";

您必须使用设置状态来查看更改