近期遇到一些很烦的琐事,状态比较down,很多原本计划好的事情都耽搁了,实在是难顶……

看到后台一直有朋友问怎么博客和公众号没有更新,所以我忙完得闲就来更了!

前言

起因是最近重拾以前的旧项目(业余做的,打算有机会自己运营起来)继续完善,然后发现有些界面设计太粗糙了,实在不满意(虽然是因为本来功能就不多),然后就着手开始优化~ 应该会写成一系列文章,今天就从App的"我"页面开始吧~

效果图

话不多说,先上效果图。

修改前页面的顶部只有头像、名称、签名三个元素,显得很空;修改后增加了具有社交属性的等级(经验值)、动态、关注、粉丝等元素,还有二维码图标。看起来高端了一些~

修改前 修改后

不同的主题和夜间模式

看看不同主题下和夜间模式的效果(其实这个夜间模式还有待优化,感觉对比度太高)

主题1 主题2 夜间模式

页面头部改进思路

这个页面的头部我是参考了酷安App的设计,本来打算参考一下B站客户端的,结果发现B站做得有点敷衍,丑就不说了(对我的审美而言),还没有交互效果,感觉是程序员被deadline逼迫之下的产物(摊手)

先来看看我的套娃结构

其实很简单,原本在放名称和签名的Column中间再插一个Container实现等级、经验和进度条就ok了~

代码如下(由于篇幅关系,这里只放关键代码):

Widget _buildHeader() {
return Consumer<UserModel>(
builder: (BuildContext context, UserModel userModel, Widget child) {
var row = Row(
children: <Widget>[
ClipOval(child: daAvatar(userModel.user.avatar)),
Expanded(
child: Column(
children: <Widget>[
// 用户名
Text(userModel.isLogin ? userModel.user.nickname : '注册或登录'),
// 等级、经验
if (userModel.isLogin)
Container(
child: Column(children: [
Row(children: [
Text('LV3')),
Text('9372/27000'),
]),
LinearProgressIndicator(value: 0.3, valueColor: AlwaysStoppedAnimation(Colors.blue)),
]),
),
// 个性签名
Text(userModel.isLogin ? (userModel.user.signature ?? '没有个性签名') : '请先登录以获得专属服务~'),
],
),
),
// 二维码和右箭头
Icon(Icons.qr_code, color: Theme.of(context).primaryTextTheme.headline6.color),
VerticalDivider(width: 10),
Icon(Icons.chevron_right, color: Theme.of(context).primaryTextTheme.headline6.color),
],
);
},
);
}

动态、关注、粉丝组件设计

页面头部下方还有这个组件,用来显示跟社交有关的信息,这个组件是嵌入在下方的listview的,可以随着页面滑动。

实现很简单,我直接放代码:

Widget _buildCard() {
return Container(
margin: EdgeInsets.fromLTRB(5, 10, 5, 10),
child: Card(
child: Container(
margin: EdgeInsets.fromLTRB(5, 10, 5, 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_buildNumberTextWidget('62', '动态'),
_buildNumberTextWidget('18', '关注'),
_buildNumberTextWidget('89', '粉丝'),
],
),
),
),
);
}

_buildNumberTextWidget的实现如下:

Widget _buildNumberTextWidget(String number, String text) {
var foreColor = Global.profile.darkMode ? Colors.white54 : Theme.of(context).primaryColor;
return TextButton(
child: Column(children: [
Text(number, style: TextStyle(fontSize: 30, color: foreColor)),
Text(text, style: TextStyle(color: foreColor)),
]),
style: ButtonStyle(padding: MaterialStateProperty.all(EdgeInsets.symmetric(horizontal: 40))),
onPressed: () => BotToast.showText(text: '妙啊'),
);
}

因为要考虑到交互反馈,所以这里我用了TextButton组件包裹内容。(注:TextButton组件是新版Flutter推出的,用以取代原本的FlatButton

交互效果

录了个动画,看看最终的交互效果:

差强人意吧(没有UI,只能自己凑合搞一搞hh)

后话

时隔半年多,重新来搞Flutter,才发现Flutter已经更新到2.x版本了,新版dart语言也加了空安全特性,离kotlin/c#又进了一步,主流的第三方库也都跟进了,都出了null safety版本的库,总体开发体验还是可以的~

不过做完的成品,给我的感觉,在性能上还是不如原生,很难做到像原生一样的丝滑。不过这flutter搭界面是真的快,而且中文社区很活跃,在国内由于几个大厂的牵头,关注度很高,基本crud的这种场景,flutter毫无压力的胜任,而且还能获得比react native或者uniapp更高的性能和更好的用户体验。唯一的遗憾就是没法做微信小程序了…

这个OneCat App在这么长时间的开发和测试中,一直有各种小问题出现,总有地方不尽如人意,搞得我一度想用原生重写了,不过后来想着flutter写界面快,也就算了,写着玩吧~

欢迎交流

程序设计实验室专注于互联网热门新技术探索与团队敏捷开发实践,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~

使用Flutter设计一个好看的"我"页面的更多相关文章

  1. 用flutter写一个精美的登录页面

    先看效果图: 源代码已上传到github 我们先看一下页面 , 首先这个页面,我们并没有用到AppBar,当然也就没有自带返回功能.然后下面有个Login的文字以及一条横线. 屏幕中上方是填写帐号以及 ...

  2. flutter 制作一个用户登录页面

    flutter 制作一个用户登录页面 用户登录效果图如下: 登录页面如下: import 'package:flutter/material.dart'; import 'package:flutte ...

  3. 设计一个 iOS 控件

    转载自:http://blog.csdn.net/zhangao0086/article/details/45622875 代码的等级:可编译.可运行.可测试.可读.可维护.可复用 前言 一个控件从外 ...

  4. PS网页设计教程XXIV——从头设计一个漂亮的网站

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  5. 如何去设计一个自适应的网页设计或HTMl5

    如何去设计一个自适应的网页设计或HTMl5 如今移动互联网随着3G的普及,越来越火爆,更多需求跟随而来!APP应用市场和APP应用数量成倍成倍的增长!从而给移动互联网带来新的挑战! 移动设备正超过桌面 ...

  6. 如何设计一个RPC系统

    版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/162 来源:腾云阁 https://www.qclou ...

  7. 为 .NET Core 设计一个 3D 图形渲染库

    原文地址:https://mellinoe.wordpress.com/2017/02/08/designing-a-3d-rendering-library-for-net-core/ 作者:ERI ...

  8. UE4笔记:利用Widget设计一个切换材质功能

    UE4引擎中的Widget蓝图是一个重要的工具,可用于场景中的页面叠加,镜头绑定,场景切换等多处地方,在这里笔者介绍一种利用控件蓝图和场景中物体进行信息交互的方法,直观的体现就是进行物体的材质切换. ...

  9. vue 设计一个倒计时秒杀的组件

    简介: 倒计时秒杀组件在电商网站中层出不穷  不过思路万变不离其踪,我自己根据其他资料设计了一个vue版的 核心思路:1.时间不能是本地客户端的时间  必须是服务器的时间这里用一个settimeout ...

随机推荐

  1. 【opencv】Java+eclipse+opencv 环境搭建 helloword入门demo

    文章为博主原创,纯属个人理解,如有错误欢迎指出. 如需转载,请注明出处. 引入jar包 引入配置文件 到此环境配置完成!!! 可能会出现的问题: 1. jdk版本不一致导致发生异常.如图 build ...

  2. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.B)- FlexSPI NOR连接方式大全(RT500)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT500的FlexSPI NOR启动的连接方式. 这个i.MXRT FlexSPI NOR启动连接方式系列文章,痞子衡 ...

  3. 2021ArchSummit全球架构师峰会上,大家在聊些什么

    大会PPT公开下载链接:https://ppt.infoq.cn/list/assh2021 大会主要情况介绍 2021 ArchSummit全球架构师峰会是该大会正式成立的第十年,是极客邦科技旗下I ...

  4. 封装了一些sqlsugar的常用方法 用来动态切换数据库和依赖注入 支持泛型

    接口: /// <summary> /// 数据库操作 /// </summary> public interface IDAL_Services { /// <summ ...

  5. table不能使用jQuery的slideDown的解决方法

    table不能使用jQuery的slideDown的解决方法 一个后台管理项目中遇到了如下场景 要求父级栏目可以收纳子栏目,即折叠功能,而且要有过渡动画,不能太生硬. 它是用table来实现的,但是遇 ...

  6. 1Spring注入小结

    Spring注入小结 (在Application.xml中) Spring学习笔记 周芋杉2021/5/14 1.基本注入类型注入 注入前的准备 <bean id="#配置文件的唯一标 ...

  7. java集合类介绍

    目录 集合类简介 List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap Hashta ...

  8. 快速熟悉windows操作

    快捷键 win + E : 打开我的电脑 Ctrl+Shift+Esc:打开资源管理器 Alt +F4 :关闭当前窗口 Win + R:打开命令窗口 DOS 命令 打开CMD 的方式 Win+R:输入 ...

  9. 015.Python函数名的使用以及函数变量的操作

    一 函数名的使用 python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限 1.1 函数名是个特殊的变量,可以当做变量赋值 def func(): p ...

  10. MyBatis 开启 Log4j 日志调试信息开关

    Log4j 是什么 Log4j 是由 Apache 提供的开源日志框架,用于帮助用户处理日志信息. Log4j 能将日志信息分级打印和存储,而且提供了日志不同的存储方式,我们可以将日志发送到控制台,或 ...