美文网首页
现学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