如何在作用域模型-Flutter中从Firestore获取数据

时间:2019-03-04 20:47:29

标签: firebase dart flutter

我正在尝试从Firestore中获取数据,将来在调试打印中它会做工作吗,并且列表会获取数据,而在debugPrint中,长度为+,但是当我尝试在另一个小部件列表中获取数据时,返回null时,在debugPrint中的长度为0。

model.dart

  class BBModel extends Model {
  int _counter = 10;

  int get counter => _counter;

  var db = dbBB;
  List<BB> _bbs;

  List<BB> get bbs => _bbs;

  Future<List<BB>> getBBs() async {
    var snapshot = await db.getDocuments();
    for (int i = 0; i < snapshot.documents.length; i++) {
      _bbs.add(BB.fromSnapshot(snapshot.documents[i]));
      print(bbs.length.toString()); //recives 23
    }
    notifyListeners();
    return _bbs;
  }
}

main.dart

void main() {
  var model = BBModel();

  model.getBBs();
  runApp(ScopedModel<BBModel>(model: BBModel(), child: MyApp()));
}

statefullpage.dart

Expanded(
flex: 1,
child: Container(
height: 400.0,
child: ScopedModelDescendant<BBModel>(
builder: (context, child, model) {
return ListView.builder(
itemCount: model.bbs.length,
itemBuilder: (context, index) {
return Text(model.bbs[index].bbID);
  });
 }))),

3 个答案:

答案 0 :(得分:1)

看起来您在main.dart中编写的代码是错误的。实例化的模型与您在ScopedModel中发送的模型不同。

更正

在您的main.dart文件中将model: model 更改为 model: BBModel()

void main() {
  final model = BBModel();    

  model.getBBs();
  runApp(ScopedModel<BBModel>(model: model, child: MyApp()));
}

答案 1 :(得分:0)

在main.dart中,我会尝试做:

void main() {
  var model = BBModel();

  model.getBBs().then((someVariableName){
    runApp(ScopedModel<BBModel>(model: BBModel(), child: MyApp()));
  });
}

注意:“ someVariableName”将包含一个列表

答案 2 :(得分:0)

要等待,您可以使用

$cSession = curl_init(); 
//step2
curl_setopt($cSession,CURLOPT_URL,"https://api.stackexchange.com/2.2/answers?page=10&pagesize=10&order=desc&sort=activity&site=stackoverflow");
curl_setopt($cSession, CURLOPT_ENCODING, 'gzip');//--------->>> Solution step
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
//curl_setopt($cSession,CURLOPT_HEADER, false); 
//step3
$result=curl_exec($cSession);
//step4
curl_close($cSession);
echo"<pre>";
var_dump($result);
echo "<br>";
echo"</pre>";

但是,除此以外,我不建议将数据上传到主目录,因为随着数据量的增加,您会降低应用程序的使用速度。仅将数据上传到您需要的页面,并找到一种方法来实现。