flutter 分割线_Flutter之踩坑的日子(8)

3125346f77753f33a6a7fca4f456b1c7.png

今天要进行笔记本内容列表相关的页面制作。当用户选择了一个笔记本之后,我们应当将对应笔记本中的笔记依次列出来。

那么这里就涉及了一件事情:

我们目前还没有设计具体的笔记文件格式,因此也无法在测试时提供具体的笔记文件内容。

那么这部分的工作应当怎么进行下去呢?

答案是:

预先占位。

在实际的开发工作中,我们一定不要让尚未实现的工作阻碍整体的进度。我们应当使用对接的方式,来分离正在处理的部分,和尚未实现的内容。

具体说来,就是设计一个接口,人为地将代码分为当前部分和预留部分。比如设计一个占位函数 int getNoteCatlogs(); 用这个占位函数来返回笔记中的内容数量。当然了,你也可以直接定义一个 NoteCatlog类,来返回具体的笔记内容的目录。

那么在这种思路的指导下,我们先来看设计草图。

e4655226d91ba5103ab61dab54870cb7.png

最上方是顶部标题栏,包括笔记本图标、笔记本名称、通过日期搜索笔记内容的图标和通过内容来搜索笔记的图标。

下面是显示笔记内容的区域,毫无疑问这一部分应当使用有状态组件来处理。

最后是添加内容的浮动按钮图标,和底部的导航栏图标。

顶部的导航栏选用AppBar来处理,但是AppBar似乎并不支持我们的这种样式,这里应当需要进行修改。

显示笔记内容的区域明显是一个多行的区域,可以用ListView来处理。由于ListView本身支持ListTile形式的组件,所以我们暂时先用这个ListTitle来看一下效果。

01b3c7ef72c4cd35541096246867a5c2.png

从图上可以看出,使用默认组件的时候,这个界面并没有完全达到我们想要的效果。

1. 顶部没有放置我们需要的两个搜索按钮。

2. 没有按照月份显示分割线。

3. 内容列表没有放置我们需要显示的日期,而是用图标代替。

4. 没有显示添加新内容的浮动按钮。

下面我们一个一个地解决这些问题。

最简单的是问题4,我们只需增加一个浮动按钮即可。

floatingActionButton:
 

然后是问题1,顶部标题栏的问题。我们首先看一下AppBar的源代码,这是为了看看flutter提供的组件本身,能不能解决我们的问题。

 AppBar({
 Key key,
 this.leading,
 this.automaticallyImplyLeading = true,
 this.title,
 this.actions,

在AppBar的构造方法中,leading和actions这两个参数引起了我的注意。

对于leading参数,官方的介绍是这样的:一个显示在title之前的组件,类型可以是图标或者图标按钮。

A widget to display before the [title].
Typically the [leading] widget is an [Icon] or an [IconButton].

对于actions参数,官方的介绍是这样的:一行显示在title之后的组件。这些组件的类型是IconButton表达常见操作。

Widgets to display in a row after the [title] widget.
Typically these widgets are [IconButton]s representing common operations. 

这不就妥了么?

我在图标资源里增加了两个图标,分别是日期选择图标和搜索图标。然后我更新了代码,增加了leading和2个action按钮。

      appBar: AppBar(
        leading: Icon(IconData(0xe632, fontFamily: 'NoteIcons')),
        title: Text("我的笔记本"),
        actions: <Widget>[
 IconButton(
            icon: Icon(IconData(0xe7b6, fontFamily: 'NoteIcons')),
            onPressed: () {},
          ),
 IconButton(
            icon: Icon(IconData(0xe723, fontFamily: 'NoteIcons')),
            onPressed: () {},
          )
        ],
      ),
 

一件奇怪的事情出现了,0xe632对应的图标可以正常显示,但是0xe7b6,0xe723对应的图标都没有显示出来。

4a1832235159307c7dfcb8b40f13e928.png

而我用0xe632图标的时候,这两个位置的图标又可以显示?

4b79ed005228c881e73c498452285884.png

我将模拟器上已安装的包卸载,又重新启动了vscode。

这次成功显示了正确的图标。看来问题是更新的资源没有被读取到项目中,或者模拟器没有接受到新的资源。

100592e764a7b272356ba2127cab001b.png

那么只有问题2和问题3了。

Listview显示分割线很简单,但是怎么才能按照我们的要求显示分割线,这就是需要考虑的问题了。

当和实际内容进行对接的时候,如果用户使用软件的频率比较高,每天都有笔记被记录,使用软件的日期又比较久,超过了1年,那么如何在这个笔记本上体现出所有的内容列表呢?

以年、月区分,大体上是合适的。

年份是第一级。

月是在年份之下的第二级。

月份之内的笔记,就可以按照时间顺序依次排列了。

以上是初步的考虑,而且不在这个版本中实现。

另一种合理的思路,是提供笔记内容列表给ListView的时候,先按照时间顺序进行排序,然后软件遍历内容列表的时候,按照时间顺序自动生成分割线。

今天很晚了,就先到这里。我们在下一篇文章,再讨论问题2和3的解决方案吧。

千里笔记测试版的GIT地址​github.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值