Flutter 如何从Firestore初始化值

Flutter 如何从Firestore初始化值,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我正在尝试使用Firestore中的值初始化TextEditingController,并希望了解如何在initState函数中执行此操作。在initState上,我想调用文档并将TextEditingController设置为名为“author”的文档字段的值。下面是我正在尝试做的一个例子: @override void initState() { super.initState(); var document = Firestore.instance.collection

我正在尝试使用Firestore中的值初始化TextEditingController,并希望了解如何在initState函数中执行此操作。在initState上,我想调用文档并将TextEditingController设置为名为“author”的文档字段的值。下面是我正在尝试做的一个例子:

@override
  void initState() {
    super.initState();
    var document = Firestore.instance.collection('books').document('Harry Potter').get();
    _authorController = new TextEditingController(text: document['author']);

}

如何构造此调用?

创建一个新的异步方法,然后在
initState()中调用它。


我建议将
文档['author']
作为参数从父小部件发送到此小部件,而不是在此处调用它

创建一个新的异步方法,然后在
initState()中调用它


我建议将
文档['author']
作为参数从父小部件发送到此小部件,而不是在此处调用它

为了能够从firebase查询信息,您需要进行异步调用,已经使用关键字
async
then

async
示例:

class SomePage extends StatefulWidget {
  @override
  _SomePageState createState() => _SomePageState();
}

class _SomePageState extends State<SomePage> {
    final _authorController = new TextEditingController();
    final _firestore = Firestore.instance;

    // Async Method
    void initAuthor() async {
        // we use the try catch to get an error in case an error happens with firestore
        try {
             final documentSnapshot = await _firestore.collection('books').document('Harry Potter').get();
            _authorController.text = documentSnapshot.data['author'];
        }catch(e){
            print(e);
        }
    }

   @override
   void initState() {
     super.initState();
     initAuthor();
   }
}

为了能够从firebase查询信息,您需要进行异步调用,已经使用关键字
async
then

async
示例:

class SomePage extends StatefulWidget {
  @override
  _SomePageState createState() => _SomePageState();
}

class _SomePageState extends State<SomePage> {
    final _authorController = new TextEditingController();
    final _firestore = Firestore.instance;

    // Async Method
    void initAuthor() async {
        // we use the try catch to get an error in case an error happens with firestore
        try {
             final documentSnapshot = await _firestore.collection('books').document('Harry Potter').get();
            _authorController.text = documentSnapshot.data['author'];
        }catch(e){
            print(e);
        }
    }

   @override
   void initState() {
     super.initState();
     initAuthor();
   }
}
class SomePage extends StatefulWidget {
  @override
  _SomePageState createState() => _SomePageState();
}

class _SomePageState extends State<SomePage> {
    final _authorController = new TextEditingController();
    final _firestore = Firestore.instance;

    void initAuthor() {
        final documentSnapshot = _firestore.collection('books')
             .document('Harry Potter')
             .get()
             .then((documentSnapshot) {
                 _authorController.text = documentSnapshot.data['author'];
             }).catchError((error){
                 print(error);
             });

    }

   @override
   void initState() {
     super.initState();
     initAuthor();
   }
}