flutter app 漫威api客户端

Android学了一段 自学flutter
数据来源漫威开放api 边学边做的作品

apikey 需要申请,每日限3000次请求
申请网址:https://developer.marvel.com

Github:https://github.com/MaxNeverSleep/marvelAPI-flutter
!新手代码,无法保证可读性,持续更新整理…!

内含接口文档,数据分为六大类
互相关联,比如一个comics里有很多charater

Events\事件
Comics\漫画
Charaters\人物
Series\系列
Creators\创作者
Stories\故事

主页面做成了tabview和viewpager
在这里插入图片描述

tabview里点图片是dialog样式查看图片大图,点击文字区域Expanded进入详情页

在这里插入图片描述

详情页detailpage
下图gif是一个Event事件的详情页
charaters和series相当于android水平分页加载的Listview
comics用了swiper (服务器估计外网,图片加载比较慢)


页面间相互的跳转原本用MaterialPageRoute…卡顿严重
后来用了get
https://pub.flutter-io.cn/packages/get
在这里插入图片描述
点击搜索icon打开搜索框弹出软键盘
当前在哪个tab里就搜索哪个tab的内容
(打开搜索框时切换tabview不能实时切换提示文字"search xxxxxxxx",但是搜索内容会变,因为左右切换页面用setstate会卡顿一下,妥协了,后期看看能不能解决。。)

请求参数

//常用参数 其他详见漫威的接口文档
"apikey":"申请到的公有key"
"ts":"当前时间戳"
"hash":"时间戳+私钥+公钥的md5值"
"offset":"分页值,比如offset20 就从第20个往后取limit个值返回"
"limit":"一次返回的数量"
//"titleStartsWith":"可选参数,搜索用的"

//获取时间戳
  void getTimeStamp() {
    timeStamp=DateTime.now().millisecondsSinceEpoch.toString();
  }
 //获取hash
  void getHash() {
    var content = new Utf8Encoder().convert(timeStamp+_privateKey+_publicKey);
    var digest = md5.convert(content);
    // 这里其实就是 digest.toString()
    hash= hex.encode(digest.bytes);
  }

//dio get请求拿数据
Future<bool> getSeries() async{
    
    getTimeStamp();
    getHash();
    Map<String, dynamic> paras = {"apikey":_publicKey,"ts":timeStamp,"hash":hash,"offset":_count,"titleStartsWith":value,};

//这里的url请求数据种类不同 url不同 详见文档
    Dio dio = Dio();
    final response = await dio.get(
      _host+_getCharactersUrl,
      queryParameters: paras,);
    
    Map userMap = json.decode(response.toString());
    series = new SeriesDataEntity.fromJson(userMap);

    seriesEntityList.addAll(series.data.results);
    total=series.data.total;
    
    if(total==0){
      setState(() {
        titleString='Search No Results';
      });

    }

    return false;

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值