美文网首页
现学flutter开发一个app (1)

现学flutter开发一个app (1)

作者: heldiam | 来源:发表于2019-05-04 13:50 被阅读0次

    最近闲来无事学习flutter模仿开发一个应用用来练手, 准备将学习过程记录成一系列文章备忘, 本文为该系列第(1)篇, 全部代码已上传: github 主要为基础准备说明

    导航

    1. flutter 安装
    2. 开发IDE
    3. 接口数据调用
    4. 项目结构

    flutter 安装

       关于flutter安装这里就不详细说明了. 按照flutter官网进行即可. 这里备注一点关于android studio在flutter docter里会要求安装,但实际只需要安装android模拟器即可. 因为本人开发环境是macbook pro 2016 所以并没有安装android studio只是安装了android的模拟器

    开发IDE

       VS Code 安装方便,只需要在应用市场下载flutter插件即可

    接口数据调用

       关于后端数据调用,使用了dio库.将request做了简单的封装.封装代码是网上早的(具体地址忘了😓)

    import 'package:dio/dio.dart';
    import 'dart:async';
    import 'dart:convert';
    
    /*
     * 封装 restful 请求
     * 
     * GET、POST、DELETE、PATCH
     * 主要作用为统一处理相关事务:
     *  - 统一处理请求前缀;
     *  - 统一打印请求信息;
     *  - 统一打印响应信息;
     *  - 统一打印报错信息;
     */
    class HttpUtils {
      /// global dio object
      static Dio dio;
    
      /// default options
      static const String API_PREFIX = 'http://xxxxxx/v1';
      static const int CONNECT_TIMEOUT = 10000;
      static const int RECEIVE_TIMEOUT = 3000;
    
      /// http request methods
      static const String GET = 'get';
      static const String POST = 'post';
      static const String PUT = 'put';
      static const String PATCH = 'patch';
      static const String DELETE = 'delete';
    
      /// request method
      static Future<Map> request(String url, {data, method,Map<String,dynamic> queryParameters}) async {
        data = data ?? {};
        queryParameters = queryParameters ?? {};
        method = method ?? 'GET';
    
        /// restful 请求处理
        /// /gysw/search/hist/:user_id        user_id=27
        /// 最终生成 url 为     /gysw/search/hist/27
        data.forEach((key, value) {
          if (url.indexOf(key) != -1) {
            url = url.replaceAll(':$key', value.toString());
          }
        });
        /// 打印请求相关信息:请求地址、请求方式、请求参数
        print('请求地址:【' + method + '  ' + url + '】');
        print('请求参数:' + data.toString());
        print('请求参数:' + queryParameters.toString());
        Dio dio = createInstance();
        var result;
        try {
          Response response = await dio.request(url,
              data: data,
              queryParameters:queryParameters,
              options: new Options(method: method));
          result = json.decode(response.data.toString());
          /// 打印响应相关信息
          print('响应数据:' + response.toString());
        } on DioError catch (e) {
          /// 打印请求失败相关信息
          print('请求出错:' + e.toString());
        }
        return result;
      }
    
      /// 创建 dio 实例对象
      static Dio createInstance() {
        if (dio == null) {
          /// 全局属性:请求前缀、连接超时时间、响应超时时间
          var options = new BaseOptions(
            baseUrl: API_PREFIX,
            connectTimeout: CONNECT_TIMEOUT,
            receiveTimeout: RECEIVE_TIMEOUT,
          );
          dio = new Dio(options);
        }
        return dio;
      }
    
      /// 清空 dio 对象
      static clear() {
        dio = null;
      }
    }
    
    

    实际使用方式实例

     Future<IndexData> data() async {
        var data =await HttpUtils.request("/micro/index/data",
        method: HttpUtils.GET);
        var ret = new IndexDataResp.fromJson(data);
        if(ret.code == 0) {
          return ret.data;
        }
        return ret.data;
      }
    

    由于不熟悉dart语言,在最开始返回json数据处理纠结了很久,最终找到一个JSONFormat4Flutter代码生成工具才得以解决工具地址: github地址

    项目结构

    项目结构.png

    相关文章

      网友评论

          本文标题:现学flutter开发一个app (1)

          本文链接:https://www.haomeiwen.com/subject/whyxoqtx.html