First of all, supply a TextEditingController to the TextField (take a look at this for a complete example).
For the first part of the question, you will need to provide a listener to the TextEditingController. This listener should trigger a function like so :
Future<void> _updateTaskValue(String text) {
Firestore().runTransaction((Transaction transaction) {
Firestore.instance.document([PATH OF YOUR DOCUMENT]).updateData({"todo": text});
});
}
Assuming that text is the controller's text value. Note that runTransaction is used to avoid data concurrency.
For the second part of the question, you will have to listen to the document. To do so, declare into initState a StreamSubscription :
subscription = Firestore.instance.document("").snapshots().listen(
(DocumentSnapshot snapshot) => this._onDatabaseUpdate(snapshot));
This subscription will trigger a function each time the content is updated (whether the current user updates the TextField, another users updates it, or manually from the back office).
The function called below simply updates the controller's text attribute with the new content :
void _onDatabaseUpdate(DocumentSnapshot snapshot) {
setState(() {
_controller.text = snapshot.data["todo"];
});
}
For a complete example, see this gist.