在Flutter中,有一些小部件可以帮助您无缝执行此操作(例如
FutureBuilder,
StreamBuilder),并且您可以根据其分辨率控制要呈现的内容。
范例
FutureBuilder:
Widget build(BuildContext context) { return new FutureBuilder( future: FirebaseDatabase.instance.reference().child("node"), builder: (BuildContext context, AsyncSnapshot snapshot) { return snapshot.hasData? new Scaffold( ///start building your widget tree ):new CircularProgressIndicator(); ///load until snapshot.hasData resolves to true},); }示例
StreamBuilder:
class Database { DatabaseReference _refProfile = FirebaseDatabase.instance.reference().child( "profiles"); getProfiles() => _refProfile.onValue; }.............
Widget build(BuildContext context) { return new StreamBuilder<Event>( stream: _database.getProfiles(), //_database = new Database() builder: (BuildContext context, AsyncSnapshot<Event> event) { return event.hasData?new Scaffold(///build your widget tree ):new CircularProgressIndicator();/// place holder}值得一提的是
FutureBuilder如果您希望 一次 获取 一些数据并且不关心保持一致的连接或跟踪数据中的任何更改,则最好使用。 __
而
StreamBuilder另一方面,通过,您可以继续收听数据,并且可以根据数据中的任何更新来更新UI的状态。



