Я пытаюсь заполнить TextFormField из поля Firestore String (textBlock) и затем записать отредактированную строку обратно в другое поле (newTextBlock).
Я думаю, что на правильном пути с контроллером.Мне просто нужно выяснить, как получить оригинальный текст, но я совершенно не уверен в том, что нужно писать в Firestore (ie_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,
);
}
},
)
)
);
}
}