수입 '다트 : 변환' ;
수입 '패키지 : / 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' : 설명
};
}