前言: 我想把代码写得像诗一般优美,
每个函数都恰到好处
- splah页面
- 登录
- 播放音乐
- 显示歌词
- 歌词跟随
- 上一曲/下一曲
- 搜索
- 搜索提示
- 播放mv/video
- 用户中心
- 评论页(歌单和歌曲)--歌单页点击播放相似歌曲,播放当前评论歌曲
- 在歌单中指定下一曲播放歌曲
- 评论(带emoji表情的)(写不了了,数据传输搞不定,CSRF不会---)
- 设置皮肤
- 动态展示
由于没有ios手机,暂时只支持安卓。
项目写了有接近一个月了,进度很慢,很多东西都是在实践中学习,一点一点来的.....
好可惜啊,界面还没有写完,网易的界面就更新了
下面放上截图:
局部dialog,嘿嘿,我觉得写得蛮不错的,
这里使用了extended_tabs插件,来解决二级导航滑动的问题,,,,,
相信写过的小伙伴知道我说的二级导航滑动的问题,这里当初自己写写了好久,我哭了.......
后台使用Binaryify写的NeteaseCloudMusicApi项目提供的api,真的非常感谢!
无法在Android 9上播放远程文件:Android 9已经更改了一些网络安全默认值,
因此默认情况下它可能会阻止您播放https以外的文件,此stackoverflow问题是解决此问题的良好来源。
解决方法: 在android/app/src/main/AndroidManifest.xml文件中添加:android:usesCleartextTraffic="true"
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
使用高斯模糊时,背景层全屏模糊
解决办法:
在BackdropFilter组件的外层包裹ClipRect,
详细使用请参考文件:lib/views/songList/header.dart
到tabview中嵌套tabBar-tabview时,二级目录是不能滑动到一级目录去的,
此时就要借助插件:extended_tabs 使用文档:文档
修改文件android/app/srrc/main/res/drawable/launch_background.xml
添加:
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/sp" />
</item>
添加完后的代码:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/sp" />
</item>
</layer-list>
再在下面的目录下添加名称为sp的png图片,
这里必须使用png格式的图片,安卓默认的图片格式
状态管理使用的provide,现在谷歌已经公开宣布放弃了,并推荐使用provider,
由于项目已经写差不多了,我就不打算再进行更改了,
数据请求,获取到json后,我们直接使用json数据很不方便,这里我们就要把json数据转为dart对象,这里我使用下面的网站将json数据转为dart对象的,
在进行转换时,我们要对json数据进行处理,
josn中不要有空对象,空数组,null值
网址:JSON to Dart
flutter的组件是真的多,只有你想不到的,没有它不存在的,
不同的组件有不同是属性,构造方法也五花八门,
这里我列出几个比较常见的页面的布局和组件选用时的思考。
- Sliver大家族是个不错的选择--
|-- android // 安卓配置目录
|-- asset // 项目静态资源目录
| |-- font // 字体和图标文件
| |-- image // 静态图片文件
|-- ios // ios配置目录
|-- lib // 源码目录
| |-- commonFunc // 通用方法文件
| |-- component // 组件
| |-- config
| |-- json // 请求接口获取的json文件
| |-- server // api接口文件
| |-- modal // json转成dart对象后的模型
| |-- provider // provide状态管理目录
| |-- routers // 路由文件
| |-- service // 封装dio请求方法
| |-- view // 页面目录
| main.dart // 程序入口文件
|-- .gitignore // 配置git忽略的文件
|-- pubspec.lock // 记录当前项目依赖的包和版本
|-- pubspec.yaml // 包管理文件
首先,对组件式开发和函数式编程有了更深的见解:
样式差不多的组件,一定要封装,用起来会非常爽的,
对常用的组件:加载中,加载完成,showModal---,图片,一定要封装.....
写了dart之后,才深深的了解到自己之前写代码时眼界的浅短,
此后,写代码时我会考虑的更多。
尽力写出优雅的代码。