Flutter实践之高仿有妖气漫画,移动客户端开发工程师专业
Flutter是一个跨平台的框架,在iOS和Android端甚至以后的PC端都可以统一一套代码来实现。Flutter的性能高效,Dart语言的简易性和高效性,也使Flutter采用了Dart来开发跨平台App。
在Flutter之前,开发跨平台App大多采用了RN, Weex等底层需要JS Runtime来和Native端交互,在性能和效率上,都有很大的屏障。Flutter每次Debug或者Run都会被AOT(预编译)成本地代码,所以不会有Bridge这层东西,所以效率要比RN,Weex高。(在我开发的一个小项目中也验证了这一点)。
Widget(控件,部件,也可以理解为iOS的UIView)
可以说Flutter里最有特点的就是Widget了,可以说Flutter应用里的所有控件都是Widget。Widget的可定制性强,扩展性强。
return Container(
child: Text(“Hello Flutter!”)
);
这就是一个Widget,Container是Widget的一个子类,当然它里面有各种各样的子类供你使用。
Dart
Dart语言可以说对于移动端开发来说,都比较陌生,因为纯原生开发到现在,我只听说过可以用C#开发iOS,可能我知道的太少了,不过Dart的学习还是比较简单的,安卓开发人员用过Java,iOS开发人员用过Swift,所以再去看Dart都会有似曾相识的感觉。来看个例子:
void main() {
List list = [‘1’, ‘2’, ‘3’, ‘4’, “5”, “6”];
final str = list.join(" ").toString();
print(str);
print(list.skip(1).toList());
print(list.getRange(3, list.length).toList());
}
1 2 3 4 5 6
[2, 3, 4, 5, 6]
[4, 5, 6]
其实和Java和Swift的区别不大,一天差不多就可以入门。
怎么开发一个App
相信很多人已经接触了Flutter官方的教程,可是跟着写了一遍之后,还是一头雾水,不知道到底应该怎么写一个完整的App。下面看一个用Flutter模仿的有妖气漫画的实例:
屏幕快照
这个页面的整个布局都是Widget,在iOS里布局的话,这个必须是一个TableView或者CollectionView,在安卓里应该是ListView,在Flutter里这个Widget也是一个ListView,比较简单。
屏幕快照
这个是在一个ListView里套用了Column,就是垂直排列的意思,在iOS里其实可以用tableView解决,这整个页面可以用使用不同的Cell解决。
项目目录结构
结构
具体只有今日,发现这两个模块的实现,其他的还在学习研究中。
三方库
https://pub.dartlang.org 类似cocoapods.org. 第三方库里的图片加载有个(cached_network_image)还是比较好的,可以缓存,每次显示的时候有个Ease动画。具体可以在项目里运行查看。
网络获取:
/// 获取今日 模块的数据
static Future requestToday() async {
final response = await http.get(todayURL);
final map = jsonDecode(response.body);
final code = map[“code”];
final _data = map[“data”];
final stateCode = _data[“stateCode”];
final message = _data[“message”];
final result = TodayResult(
code: code,
stateCode: stateCode,
message: message,
dayDataList: List()
);
final _returnData = _data[“returnData”];
final _dayDataList = _returnData[“dayDataList”];
if (_dayDataList.length == 0) {
return result;
}
for (int i = 0; i < _dayDataList.length; i++) {
final _dayItemDataList = _dayDataList[i][“dayItemDataList”];
final publish = TodayPublishDate.fromJSON(_dayDataList[i]);
result.dayDataList.add(publish);
for (int j = 0; j < _dayItemDataList.length; j++) {
final _dayItemData = _dayItemDataList[j];
if (j != _dayItemDataList.length-1) {
final dayItemData
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
开源分享完整内容戳这里
= DayItemData.fromJSON(_dayItemData);
result.dayDataList.add(dayItemData);
} else {
final dayItemData2 = DayItemData2.fromJSON(_dayItemData);
result.dayDataList.add(dayItemData2);
}
}
}
return result;
Banner滚动:
class BannerWidget extends StatefulWidget {
final List images;
BannerWidget(this.images, {Key key}): super(key: key);
_BannerWidgetState createState() => _BannerWidgetState();
}
class _BannerWidgetState extends State {
final pageController = PageController(initialPage: 0);
Timer timer;
void resetTimer() {
clearTimer();
timer = Timer.periodic(Duration(seconds: 3), (timer) {
if (pageController.positions.isNotEmpty) {
var i = pageController.page.toInt() + 1;
pageController.animateToPage(
i,
duration: Duration(milliseconds: 100),
curve: Curves.linear
);
if (i == widget.images.length-1) {
pageController.jumpToPage(0);
i = 0;
}
}
});
}
void clearTimer() {
if (timer != null) {
timer.cancel();
timer = null;
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
resetTimer();
}
@override
Widget build(BuildContext context){
if (widget.images.length == 0) {
return null;
}
return SizedBox(
height: 231.0,
State();
resetTimer();
}
@override
Widget build(BuildContext context){
if (widget.images.length == 0) {
return null;
}
return SizedBox(
height: 231.0,
Flutter实践之高仿有妖气漫画,移动客户端开发工程师专业相关推荐
- Flutter实践之高仿有妖气漫画,从消息中间件看分布式系统的多种套路
这就是一个Widget,Container是Widget的一个子类,当然它里面有各种各样的子类供你使用. Dart Dart语言可以说对于移动端开发来说,都比较陌生,因为纯原生开发到现在,我只听说过可 ...
- Flutter实践之高仿有妖气漫画,2021大厂Android开发面试总结+解答
child: Text("Hello Flutter!") ); 这就是一个Widget,Container是Widget的一个子类,当然它里面有各种各样的子类供你使用. Dart ...
- 一款高仿腾讯漫画的漫画阅读类 APP
早上好,骚年,我是小菜,我的公众号「菜鸟翻身」会推荐 GitHub 上有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值. 我的引语 项目中成长是最快的,实践是王道,项目中成长是最快的,多 ...
- iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码
iOS精选源码 以tableview的section为整体添加阴影效果/ta'b'le'vi'e'w顶部悬浮-. 一个可以轻松应用自定义过滤器的视频捕获框架. 基于UITableView的组件,旨在显 ...
- iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码...
iOS精选源码 以tableview的section为整体添加阴影效果/ta'b'le'vi'e'w顶部悬浮.... 一个可以轻松应用自定义过滤器的视频捕获框架. 基于UITableView的组件,旨 ...
- 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框
上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...
- Qt (高仿Visio)流程图组件开发(二) 基本图元绘制 图元间连线绘制
文章目录 本系列目录 前言 一.如何绘制图元 二.两图元之间如何连线 三.如何实现线跟随图元移动 四.线的位置判断 总结 本系列目录 Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框 ...
- Qt (高仿Visio)流程图组件开发(三) 图元基类如何定义,流程图多种图元类型实现
文章目录 本系列目录 前言 一.图元基类的定义 1.图元信息基类结构体 2.图元位置 3.父子对象关系 二.自定义图元实现 1.自定义图元基类(FlowchartGraphicsItem)与Qt原生图 ...
- Qt (高仿Visio)流程图组件开发(九) 流程图 代码展示
文章目录 本系列目录 本系列目录 Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思 Qt (高仿Visio)流程图组件开发(二) 基本图元绘制 图元间连线绘制 Qt (高仿Vi ...
最新文章
- 美团分布式服务治理框架OCTO之一:服务治理
- 王高利:Kvm虚拟化(1)__基础搭建
- 将带下划线的字符串转换成大写(下划线后大写)的高效方法
- free pascal 修改字符集,会导致 dos 不能显示 汉字。 处理方法如下
- 【转】Virtualbox虚拟机配置安装CentOS 6.5图文教程
- 机器学习知识点(二十六)概率图模型条件随机场CRF
- nagios-3.4.3搭建
- spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置
- MQ 之 RocketMQ
- java中excel文件导入数据库中_〖JAVE经验〗java中Excel导入数据库里
- gdal1.6linux编译,VS2015下编译64位GDAL总结
- wps共享文档无法连接服务器,WPS云文档链接分享后对方没有访问权限?解决办法在此...
- poi根据Word模板导出Word文件,Word模板
- 10以太坊Token详解
- Termux搭建图形化环境及tk开发
- USB 3.0规范中译本 第2章 术语及缩略语
- R语言画个中国地图使用shp文件
- 云账户是什么意思?有什么用?
- 2023年破产重整投资策略研究报告
- 写给创业者:如何打造让用户离不开的App
热门文章
- 整合微软的ad域,采用ldap的api来实现用户登录验证
- 压测工具ab的安装(mac下)
- 基于java的华容道小游戏
- AD账号属性的 PwdLastSet 和 PasswordLastSet 有什么区别?
- Bootstrap carousel轮转图的使用
- 小程序开发报错 使用wx.reLaunch跳转报错 Expected updated data but get first rendering data如何解决 ???
- 用户与计算机通信的界面是什么意思,GUI是什么意思
- ORACLE RAC停止和启动
- SOC低功耗电路设计方法
- ScrollView滚动到底部3种方案(巧解现实产品一个需求)