Flutter Cant调用同一类中的FireStore文档变量

时间:2018-07-06 19:37:20

标签: class variables dart google-cloud-firestore flutter

我一直在尝试学习一般的颤振和编程。我这里有一个问题,我无法在论坛上找到解决方案 或其他任何地方。我想在此视图上显示FireStore文档的详细信息。上一个视图是Flutter中的列表视图,仅显示标题。 上一个视图(主视图)将文档ID作为“ partID”传递到该视图中。我已经能够成功查询该文档的快照甚至进行打印 具体细节。但是,当我尝试将变量添加为表单字段中的“现有文本”时,它无法识别它们。 我想念什么?

import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'ItemData.dart';



class View extends StatefulWidget {
  final String partID;
  View({Key key, this.partID}): super (key: key);

@override
  ViewState createState() => ViewState();
}



class ViewState extends State<View> {

Data newData = new Data();


@override
  Widget build(BuildContext context) {


  getItem();
  return new Scaffold(
  //CreateWidget()
    appBar: AppBar(
        backgroundColor: Colors.black,
        title: Text("Item Data"),
      ),
    body: 
    new Column(
      children: <Widget>[
        Flexible(
          flex: 0,
          child: Center(
            child: Form(
              //key: this._formKey,
              child: Flex(
                direction: Axis.vertical,
                children: <Widget>[
                  ListTile(
                    title: TextFormField(
                      initialValue: newData.title,
                  decoration: new InputDecoration(
                    icon: new Icon(Icons.edit),
                  ),
                )
              ),
              ListTile(
                title: TextFormField(
                  initialValue: title,
                  decoration: new InputDecoration(
                    icon: new Icon(Icons.edit),
                  ),
                )
                ),
              new Text("${widget.partID}"),
            ],
          ),
        ),
      ),      
    ),
  ],
  )
   );
  }


  Future getItem()  async {
    DocumentSnapshot snapshot = await       Firestore.instance.collection('items').document('${widget.partID}').get();   
String title = snapshot['title'];
String location = snapshot.data['location'].toString();
print('${title}');
print('${location}');
  }
}

1 个答案:

答案 0 :(得分:0)

为此,您应该使用诸如Future Builder之类的东西作为您的身体。它仍然允许异步加载,并且您还可以显示加载指示器。它还允许您从子窗口小部件中的数据库访问所有值。

@override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text(title)),
      body: new FutureBuilder(
          future: Firestore.instance.collection('items').snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) return const Text('Loading...');
            return new Column(
              children: <Widget>[
                Flexible(
                  flex: 0,
                  child: Center(
                    child: Form(
                      //key: this._formKey,
                      child: Flex(
                        direction: Axis.vertical,
                        children: <Widget>[
                          ListTile(
                              title: TextFormField(
                            initialValue: snapshot.data["title"],
                            decoration: new InputDecoration(
                              icon: new Icon(Icons.edit),
                            ),
                          )),
                          ListTile(
                              title: TextFormField(
                            initialValue: title,
                            decoration: new InputDecoration(
                              icon: new Icon(Icons.edit),
                            ),
                          )),
                          new Text("${widget.partID}"),
                        ],
                      ),
                    ),
                  ),
                ),
              ],
            );
      }),
    );
  }

这是使用FutureBuilder时如何布置代码的示例。