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;
}