떨림 비동기 프로그래밍 HTTP 요청 데이터 네트워크

수입 '다트 : 변환' ; 

수입 '패키지 : / material.dart 플러터' ;
수입 '패키지 : HTTP / http.dart' HTTP와 같은;
수입 '다트 : 비동기' ; 

클래스 HttpDemo는 연장 StatelessWidget { 
  @Override 
  위젯 빌드 (BuildContext 컨텍스트) { 
    리턴 (비계 
      : AppBar (appBar 
        제목 : 문자 ( 'HttpDemo' ), 
        고도 : 0.0 , 
      ) 
      본체 : HttpDemoHome () 
    ); 
  } 
} 

클래스 HttpDemoHome는 확장StatefulWidget { 
  @Override 
  _HttpDemoHomeState createState () => _HttpDemoHomeState (); 
} 

클래스 _HttpDemoHomeState가 연장 상태 <HttpDemoHome> { 
  @Override 
  공극 initState () {
     슈퍼 .initState ();
    // fetchPosts ()
     //    그 때는 ((값) => 출력 (값)); 

    // 마지막 포스트 = {
     //    '제목': '안녕하세요',
     //    '설명': '. 좋은 당신을 만나서',
     // }; 

    // 인쇄 (POST [ '제목']);
    // 인쇄 (POST [ '설명']);

    최종 postJson = json.encode (POST);
    // 인쇄 (postJson); 

    // 최종 postJsonConverted = json.decode (postJson);
    // 인쇄 (postJsonConverted [ '제목']);
    // 인쇄 (postJsonConverted [ '설명']);
    // 인쇄 (postJsonConverted지도입니다); 

    // 최종 postModel = Post.fromJson (postJsonConverted);
    // 인쇄 ( '제목 : $ {postModel.title} 설명 : $ {postModel.description}'); 

    // 인쇄 ( '$ {json.encode (postModel)}'); 
  } 

  미래 <목록 <포스트 >> fetchPosts () 비동기 {
     최종 응답 =  
        기다리고 http.get ('https://resources.ninghao.net/demo/posts.json' ); 
    
    // 인쇄 ( '에 statusCode : $ {response.statusCode}');
    // 인쇄 ( '몸 : $ {response.body}'); 

    경우 (response.statusCode의 == 200 ) {
       최종 위한 responseBody = json.decode (response.body); 
      목록 <포스트> 글 =위한 responseBody [ '게시물' ] 
        .MAP <포스트> ((항목) => Post.fromJson (항목)) 
        .toList (); 

      반환 글; 
    } 다른 {
       던져 예외 ( '게시물을 가져 오지 못했습니다.' ); 
    } 
  } 

  @Override
     반환 FutureBuilder ( 
      fetchPosts () : 미래 
      (BuildContext 컨텍스트, AsyncSnapshot 스냅 샷) {: 빌더 
        (인쇄 : '데이터 $ {snapshot.data}' ) 
        인쇄 ( {snapshot.connectionState을 $ 'connectionState를 } ' ); 
        
        경우 (snapshot.connectionState == ConnectionState.waiting) {
           반환 센터 ( 
            아이 : 텍스트 ( '로드 ... ' ) 
          ;) 
        } 

        반환 ListView에 ( 
          : snapshot.data.map 어린이 <위젯> ((항목 ) {
             반환ListTile ( 
              제목 : 텍스트 (item.title), 
              자막 : 텍스트 (item.author), 
              선도 : CircleAvatar ( 
                또는 backgroundImage : NetworkImage (item.imageUrl), 
              ), 
            ); 
          }) toList (). 
        ); 
      } 
    ); 
  } 
} 

클래스 포스트 {
   최종  INT의 ID;
  최종 문자열 제목;
  최종 문자열 설명;
  최종 문자열 저자;
  최종 문자열 이미지 URL; 

  포스트 ( 
    .ID,
     .title,
    .description,
     .author,
    .imageUrl, 
  ); 

  Post.fromJson (지도 JSON) 
    : ID = JSON [ 'ID' , 
      표제 = JSON [ '제목' , 
      설명 = JSON [ '설명' , 
      저자 = JSON [ '저자' , 
      이미지 URL = JSON [ '이미지 URL ' ]; 

  지도 toJson () => {
     '제목' : 타이틀
     'descritpion' : 설명 
  }; 
}
 HTTP : ^ 0.12.0

추천

출처www.cnblogs.com/loaderman/p/11345801.html