要在内容页面上显示的文件信息需要处理一下,比如我们需要一个中文的标题,有些数据也需要格式化一下,或者做点处理才适合显示。
FileMetadataListItem
先定义一个类型,打开 file.dart,在这个文件里定义一个普通的类,名字是 FileMetadataListItem,用它表示要显示的文件信息数据项目。里面添加一个 String 类型的 title,一个 dynamic value ,可以再加上一个 Widget? icon。
添加一个构造方法,名字是 FileMetadataListItem,提供一些带名字的参数 required this.title ,required this.value ,再加上一个 this.icon。
file_show_store.dart
再打开 file_show_store.dart,在里面可以添加一些计算属性,先添加一个属性,类型是 FIleMetadata? ,名字是 metadata ,对应的值就是 file? 里的 metadata 。
下面再添加一个计算属性,返回的类型是 FileMetadataListItem? 名字是 focalLength ,表示焦距,里面声明一个 FileMetadataListItem? 名字是 item。 最后可以 return 这个 item 。
在上面,再声明一个 focalLength ,值是 metadata? 里的 focalLength 。 然后判断一下,如果 focalLength 不等于 null 。声明一个 title ,值是焦距,再声明一个 value ,它是一个字符串,里面可以用一下 focalLength.toInt() 把它转换成整数,后面再加上一个 mm ,表示毫米。下面再声明一个 icon ,值是 Icon,小图标用一下 Icons.lens_outlined 。
设置一下 item 的值,新建一个 FileMetadataListItem ,设置一下title,值是 title ,value 的值是 value,再设置一下 icon ,值是 icon 。
下面可以复制三份这个计算属性,然后修改一下。 选中这几个地方,统一修改一下,名字设置成 fNumber 。
如果 fNumber 不等于 null, title 的值改成 光圈,value 的值,先是一个 f 斜线,后面加上这个 fNumber 的值。使用的小图标修改成 camera_outlined。
选中下面这个计算属性要修改的这几个地方,改成 exposureTime,如果它的值不是 null, title 的值应该是曝光。value 的值要判断一下,exposureTime 是不是大于 1,如果是,它的值就是 exposureTime 后面再加上一个 s,表示秒。如果不大于 1,它的值是 1 斜线,后面要计算一下 1 / exposureTime ,结果可以 round() 一下,再加上一个 s 。使用的小图标修改一下 timer_outlined。
选中下面这个计算属性要改的地方,修改成 iSO ,如果它的值不是 null,title 的值是感光,value 的值就是这个 iSO 的值,小图标用一下 iso_outlined 。
specs
下面再定义一个计算属性,返回的类型是 List
再判断一下 fNumber 不等于 null ,就再添加一个 fNumber! 然后判断 exposureTime 不等于 null ,可以添加一个 exposureTime! ,最后再判断一下 iSO 不等于 null ,可以再添加一个 iSO! 。
return 的东西可以判断一下 items.length > 0 ,如果是就返回 items ,不然就返回 null 。