Flutter - 요청 인터페이스 및 DAO 계층 구현

Flutter에는 레이아웃 외에 가장 중요한 네트워크와 데이터 조작이 있습니다.

Flutter의 모델 층은 어떻게 실현됩니까?
class HomeModel {
  final ConfigModel config;
  final List bannerList;
  final List localNavList;
  final GridNavModel gridNav;
  final List subNavList;
  HomeModel(
      {this.config,
      this.bannerList,
      this.localNavList,
      this.gridNav,
      this.subNavList});
  Map toJson() {
    return {
      'config': config,
      'bannerList': bannerList,
      'localNavList': localNavList,
      'gridNav': gridNav,
      'subNavList': subNavList,
    };
  }
  factory HomeModel.fromJson(Map json) {
    var localNavListJson = json['localNavList'] as List; //   list
    List localNavList = localNavListJson
        .map((i) => CommonModel.fromJson(i))
        .toList(); //   list      

    var bannerListJson = json['bannerList'] as List; //   list
    List bannerList = bannerListJson
        .map((i) => CommonModel.fromJson(i))
        .toList(); //   list      

    var subNavListJson = json['subNavList'] as List; //   list
    List subNavList = subNavListJson
        .map((i) => CommonModel.fromJson(i))
        .toList(); //   list      

    return HomeModel(
      config: ConfigModel.fromJson(json['config']),
      bannerList: bannerList,
      localNavList: localNavList,
      gridNav: GridNavModel.formJson(json['gridNav']),
      subNavList: subNavList,
    );
  }
}

 
만약 다른 모델 실례를 사용한다면 fromJson을 실현해야 한다
class CommonModel {
  final String icon;
  final String title;
  final String url;
  final String statusBarColor;
  final bool hideAppBar;
  CommonModel(
      {this.icon, this.title, this.url, this.statusBarColor, this.hideAppBar});
  ///      json         
  Map toJson() {
    return {
      'icon': icon,
      'title': title,
      'url': url,
      'statusBarColor': statusBarColor,
      'hideAppBar': hideAppBar,
    };
  }
  ///  CommonModel   
  factory CommonModel.fromJson(Map json) {
    return CommonModel(
        icon: json['icon'],
        title: json['title'],
        url: json['url'],
        statusBarColor: json['statusBarColor'],
        hideAppBar: json['hideAppBar']);
  }
}

 
Flutter가 네트워크에 반환된 데이터를 요청하려면 몇 개의 패키지를 가져와야 합니다
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http; //          

 
비동기적으로 네트워크에서 되돌아오는 데이터 가져오기
import 'package:prim_fultter_app/model/home_model.dart';

const Home_URL = "http://www.devio.org/io/flutter_app/json/home_page.json";
//    
class HomeDao {
  static Future fetch() async {
    final response = await http.get(Home_URL);
    if (response.statusCode == 200) {
      //          
      Utf8Decoder utf8decoder = Utf8Decoder(); //         
      var result = json.decode(utf8decoder.convert(response.bodyBytes)); //  
      return HomeModel.fromJson(result);
    } else {
      throw Exception('load url fail!');
    }
  }
}

 
결과를 얻는 몇 가지 방법
 Future loadData() async {
    //    
//    HomeDao.fetch().then((result) {
//      //  json   
//      resultString = json.encode(result.config);// model   json   
//      print("homeDao:" + resultString);
//    }).catchError((e) {
//      resultString = e.toString();
//      print("homeDao:" + resultString);
//    });

    //     
    try {
      HomeModel model = await HomeDao.fetch();
      resultString = json.encode(model);// model   json   
      print("homeDao:" + resultString);
    } catch (e) {
      print(e.toString());
    }
    return null;
  }

 
글쓴이: JakePrim
기사 링크:https://jakeprim.cn/2019/03/26/flutter-1-2/
저작권 고지: 본 블로그의 모든 기사는 특별 고지를 제외하고 CC BY-NC-SA 4.0 라이센스 계약을 따릅니다.전재는 Jake Prim 기술 연구원에서 왔다는 것을 명기해 주십시오!

좋은 웹페이지 즐겨찾기