2017-11-17 8 views
2

Flutter Streambuilderを使用していて、ストリームがロードされる前にnullが1秒間呼び出されます。私は "Loading ..."カードを読み込もうとしていますが、動作していません。私のシミュレータは、希望のカードリストを表示する前に、赤いエラー画面を簡単に表示します。これをやめないためにはどうしたらいいですか?FlutterでStreamBuilderでGetter "Snapshot"を呼び出す

else //event.data.snapshot.value != null 
{ 
Map myMap = event.data.snapshot.value; //store each map 
         var titles = myMap.values; 

         List onesTitles = new List(); 
         List onesIds = new List(); 
         List onesImages = new List(); 
         List onesRank = new List(); 

         for (var items in titles) { 
          onesTitles.add(items['vidTitle']); 
          onesIds.add(items['vidId']); 
          onesImages.add(items['vidImage']); 
          onesRank.add(items['Value']); 
         } 

         names = onesTitles; 
         ids = onesIds; 
         numbers = onesRank; 
         vidImages = onesImages; 

//return my layout 
} 

ので:ここに私のコードは、あなたが明示的にこのような何かごif (snapshot!=null) {//do something}

のビルドレイアウトを持つelse内のすべてのデータ操作を述べる必要がある...

new Expanded(
        child: new StreamBuilder(
         stream: streamQuery, 
         builder: 
          (BuildContext context, AsyncSnapshot<Event> event) { 
         if (event.data.snapshot.value == null) { 
          return new Card(
          child: new Text('Loading...', 
           style: new TextStyle(
            fontSize: 12.0, 
            fontWeight: FontWeight.bold, 
            fontStyle: FontStyle.italic)), 
         ); 
         } 

         Map myMap = event.data.snapshot.value; //store each map 
         var titles = myMap.values; 

         List onesTitles = new List(); 
         List onesIds = new List(); 
         List onesImages = new List(); 
         List onesRank = new List(); 

         for (var items in titles) { 
          onesTitles.add(items['vidTitle']); 
          onesIds.add(items['vidId']); 
          onesImages.add(items['vidImage']); 
          onesRank.add(items['Value']); 
         } 

         names = onesTitles; 
         ids = onesIds; 
         numbers = onesRank; 
         vidImages = onesImages; 

         switch (event.connectionState) { 
          case ConnectionState.none: 
          return new Card(
           child: new Text('Loading...', 
            style: new TextStyle(
             fontSize: 12.0, 
             fontWeight: FontWeight.bold, 
             fontStyle: FontStyle.italic)), 
          ); 
          case ConnectionState.waiting: 
          return new Card(
           child: new Text('Awaiting Results...', 
            style: new TextStyle(
             fontSize: 12.0, 
             fontWeight: FontWeight.bold, 
             fontStyle: FontStyle.italic)), 
          ); 
          default: 
          if (event.hasError) 
           return new Card(
           child: new Text('Error: ${event.error}', 
            style: new TextStyle(
             fontSize: 12.0, 
             fontWeight: FontWeight.bold, 
             fontStyle: FontStyle.italic)), 
          ); 
          else 
           return new InkWell(

答えて

2

ですsnapshot!=nullの場合に動作するif文の外側にsnapshot.valueを使用しているものを残してはいけません。

関連する問題