2017-11-17 14 views
2

Flutter Streambuilder를 사용하고 있으며로드하기 전에 스트림에서 잠시 null을 호출합니다. "로드 중 ..."카드를로드하려고하는데 작동하지 않습니다. 시뮬레이터에서 원하는 카드 목록을 표시하기 전에 잠시 빨간색 오류 화면이 표시됩니다. 이 작업을 중단하려면 어떻게해야합니까? 그래서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을 사용하는 것을 남겨 두지 마십시오.