从Firestore文档中填充TextFormField并将编辑内容写回到文档中

时间:2018-11-12 20:12:44

标签: flutter google-cloud-firestore

我正在努力从Firestore字符串字段(textBlock)填充TextFormField,然后将编辑后的字符串写回到另一个字段(newTextBlock)。

我认为我在控制器上走的路正确。我只需要弄清楚如何在其中获取原始文本,但是我不确定要写入Firestore(即_updateFirestore())。

任何帮助将不胜感激。

class _TextEditState extends State<TextEdit> {

  final myController = TextEditingController(
    text: 'need the string from the TextBlock field here'
    );

  @override
  void dispose() {
    myController.dispose();
    super.dispose();
  }

    @override
  void initState() {
    super.initState();
    myController.addListener(_updateFirestore);
  }

  _updateFirestore() {
    String item; 
    Firestore.instance
      .runTransaction((transaction) async {
        DocumentSnapshot snapshot = await transaction
          .get(Firestore.instance
          .collection('texts')
          .document(widget.docID));

      await transaction.update(snapshot.reference, {'newTextBlock': item});
      });
      } 

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Retrieve Text Input'),
      ),
      body:
        Container( 
          padding: EdgeInsets.all(30.0),   
          child:  
          StreamBuilder(
          stream: Firestore.instance
                .collection('texts')
                .document(widget.docID)
                .snapshots(),
          builder: (context, snapshot) {
            if(!snapshot.hasData) {
              return const Text('Loading ...');
              } else {

                  return TextFormField( 
                    style: Styles.textDefault,
                    decoration: InputDecoration(
                        border: InputBorder.none,
                      ),
                    maxLines: null, 
                    controller: myController,
                  );
              }
          },
          )
        )
    );
  }
} 

0 个答案:

没有答案