Flutter实战(一、项目搭建(上))

本文是Flutter实战系列的第一部分,介绍了从零开始的项目搭建。内容包括选择开发者平台,如玩安卓API,为实战项目规划模块结构,并对网络请求、SharedPreferences和数据库进行封装。通过创建HttpHeader单例类和封装SharedPreferences,为后续的业务开发做好准备。
摘要由CSDN通过智能技术生成

项目搭建(上)

一起从0开始Flutter实战!

作为Flutter实战的开篇,我们需要介绍下我们要做的内容以及我们的准备工作,为了能让我们的实战顺利进行需要一个开放的API接口服务平台,选择了半天最终选择了一个开发者平台,感谢玩安卓的开发者提供的开放API,可以让我们在练习一些项目的时候使用。玩安卓的开放API提供了很多的功能,具体的功能可以参照玩安卓API
确定了我们要做什么我们就可以着手准备了,我们先把项目的结构分为哪些模块进行设计。

lib
 	-constants   //存放一些常量
 	-events		 //跨界面的事件传递
 	-model		 //解析的数据和数据库数据
 	-network	 //网络请求以及网络配置
 	-pages		 //单独页面的集合
 	-route		 //页面的路由配置,避免多出配置导致的混乱
 	-utils		 //一些工具类
 	-widgets	 //小的工具组件,单独的widget

整体的一个结构就出来了,根据习惯我们还是先准备一些工具类,和网络的请求,先把与业务无关的工具准备好,这样让我们以后开始的时候更加的顺畅。网络的三方库配置在以前已经有介绍,不再多说了,我们当时也说在以后的实践中是需要进行一个封装的,我们一起来研究下如何能做一个合理的封装:
我选择的是创建一个单例的Http配置类,这样我们可以对Dio进行一次配置通用的效果:

class HttpConfig {
   
  static String BASE_URL = "";
  static HttpConfig _config;

  static HttpConfig get instance => _getInstance();
  Dio dio;

  HttpConfig._internal() {
   
    var baseOption = BaseOptions(
      connectTimeout: 6000,
      sendTimeout: 3000,
      baseUrl: BASE_URL,
      headers: HttpHeaderConfig.getHeaderConfig(),//这里使用的一个方法而不是一个变量来配置的header,因为有些header我们会放到sharePerence里,所以我们使用一个方法来可以随时进行读取
    );
    dio = Dio(baseOption);
    dio.interceptors.add(InterceptorsWrapper(//这里创建一个拦截器,拦截器在我们根据需要进行消息的拦截
        onRequest: (option) {
   },
        onResponse: (response) {
   
          if (response.statusCode == 400 || response.statusCode == 404) {
   }//这里拦截了错误的状态的返回
        },
        onError: (error) {
   }));
  }

  static HttpConfig _getInstance() {
   
    if (_config == null) {
   
      _config = HttpConfig._internal();
    }
    return _config;
  }

  //这里创建一个get请求的方法,不是直接把dio做成公用而是提供get方法是为了以后如果我们替换整个网络请求库的时候方便更换,还有一个原因,是我们在一般请求的时候需要对参数进行签名,这里可以帮助我们做统一的处理。
  void get<T>(String path,
      {
   Map<String, dynamic> params,
      Function(T t) onSuccess,   		//这里对返回结果已经做了处理也是为了以后如果网络框架修改后能低成本迁移
      Function(int error) onError}) async {
   
    Response response;
    try {
   
      response = await dio.get(path, queryParameters: params);
      if (response.statusCode == 200 && onSuccess != null) {
   //先做过滤,这样我们在处理的时候就省去了很多重复代码
        onSuccess(response.data);
      } else if (onError != null) {
   
        onError(response.statusCode);	//如果状态码不对,则返回错误数据
      }
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值