Flutter-異步加載

圖片描述

紅豆生南國,春來發幾枝
勸君多采擷,此物最相思

前言

先去JSONPlaceholder網站上找到一個接口:http://jsonplaceholder.typico...
返回的數據爲json格式

安裝一個HTTP插件:
http: ^0.12.0+2

在頁面中導入:
import 'package:http/http.dart' as http;

三種方式

async/await
Future
FutureBuilder

async/await

被async修飾的函數,會返回一個Futured對象

    final String url = 'http://jsonplaceholder.typicode.com/posts';
    
      @override
      void initState() {
        super.initState();
        _getData();
      }
    
      _getData() async{
        // http.get返回的是一個Future
        var response = await http.get(url);
        print(response.body);
      }

Future

顧名思義就是指在不遠的將來去執行,不會立刻去執行

這裏的.then和Promise中的.then極其類似

    final String url = 'http://jsonplaceholder.typicode.com/posts';
    
      @override
      void initState() {
        super.initState();
        _getData();
      }
    
      _getData() {
        // http.get返回的是一個Future,當拿到數據後在.then中返回
        http.get(url).then((response){
          print(response.body);
        });
      }

FutureBuilder

    final String url = 'http://jsonplaceholder.typicode.com/posts';
    
      @override
      void initState() {
        super.initState();
      }
    
      _getData() {
        return http.get(url);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(title: Text('首頁'),),
            body: FutureBuilder(future: _getData(), builder: (context, snap){
              if(!snap.hasData) {
                return Container();
              }
              var response = snap.data;
              print(response.body);
              return Container();
            })
        );
      }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章