栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Flutter质感设计之列表项

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flutter质感设计之列表项

本文为大家分享了Flutter实现列表项的具体代码,供大家参考,具体内容如下

创建achievement_view_list_item.dart文件,具体的实现每一个列表项。

import 'package:flutter/material.dart';
// 创建类,成就目标
class Target {
 // 常量,构建函数
 const Target({
  // 自变量,目标名称
  this.name,
  // 自变量,目标奖励
  this.reward
 });
 // 最终值,成就目标名称
 final String name;
 // 最终值,成就目标奖励
 final String reward;
}
// 定义数据类型,目标改变回调
typedef void TargetChangedCallback(
 // 类型参数,目标
 Target target,
 // 类型参数,是否新目标
 bool nowTarget
);
// 创建类,成就视图列表项目,继承StatelessWidget(无状态的控件)
class AchievementViewItem extends StatelessWidget {
 // 构造函数
 AchievementViewItem({
  // 目标参数,传递目标
  Target target,
  // 自变量,是否新目标
  this.nowTarget,
  // 自变量,对目标的改变
  this.onTargetChanged
 }) :
  // 接收传递的目标
  target = target,
  // 调用父类
  super(
   
   key: new ObjectKey(target)
  );
 // 类成员,存储目标
 final Target target;
 // 类成员,存储是否新目标
 final bool nowTarget;
 // 类成员,对目标的改变
 final TargetChangedCallback onTargetChanged;
 // 类函数,获得颜色
 Color _getColor(BuildContext context) {
  
  return nowTarget ? Colors.black54 : Theme.of(context).primaryColor;
 }
 // 类函数,获得文本样式
 TextStyle _getNameTextStyle(BuildContext context) {
  // 如果不是新目标,返回文本样式控件
  if (!nowTarget) return new TextStyle(
   // 绘制文本的大小:16.0
   fontSize: 16.0,
   // 绘制文本时使用的颜色:黑色
   color: Colors.black,
   // 绘制文本时加粗字体
   fontWeight: FontWeight.bold,
  );
  // 返回文本样式控件
  return new TextStyle(
   fontSize: 16.0,
   // 绘制文本时使用的颜色:灰色
   color: Colors.black54,
   // 绘制文本时加粗字体
   fontWeight: FontWeight.bold,
   // 在文本附近绘制的装饰:文本中绘制一条横线
   decoration: TextDecoration.lineThrough,
  );
 }
 // 类函数,获得文本样式
 TextStyle _getRewardTextStyle(BuildContext context) {
  // 如果不是新目标,返回文本样式控件
  if (!nowTarget) return new TextStyle(
   // 绘制文本的大小:13.0
   fontSize: 13.0,
   // 绘制文本时使用的颜色:黑色
   color: Colors.black,
  );
  // 返回文本样式控件
  return new TextStyle(
   // 绘制文本的大小:13.0
   fontSize: 13.0,
   // 绘制文本时使用的颜色:灰色
   color: Colors.black54,
   // 在文本附近绘制的装饰:文本中绘制一条横线
   decoration: TextDecoration.lineThrough,
  );
 }
 // 覆盖此函数以构建控件
 @override
 Widget build(BuildContext context) {
  // 返回值:创建列表项,通常包含图标和一些文本
  return new ListItem(
   // 当用户点击此列表项时调用
   onTap: () {
    // 调用对目标的改变函数
    onTargetChanged(target, !nowTarget);
   },
   // 要在标题之前显示的控件:创建圆形头像控件
   leading: new CircleAvatar(
    // 填充圆形的颜色:获得颜色函数
    backgroundColor: _getColor(context),
    // 子控件:文字控件
    child: new Text('囧'),
   ),
   // 列表项目的主要内容:创建堆栈布局控件
   title: new Stack(
    
    children:  [
     new Positioned(
left: 0.0,
top: 0.0,
child: new Text(
 target.name,
 style: _getNameTextStyle(context),
)
     ),
     new Positioned(
left: 0.0,
top: 20.0,
child: new Text(
 '奖励'+'n'+target.reward,
 style: _getRewardTextStyle(context),
)
     ),
    ]
   )
  );
 }
}

创建achievement_view_list.dart文件,创建列表。

import 'package:flutter/material.dart';
import 'achievement_view_list_item.dart';
// 创建类,成就视图列表项目,继承StatefulWidget(有状态的控件)
class AchievementViewList extends StatefulWidget {
 // 构造函数
 AchievementViewList({
  // 自变量,目标列表
  this.targets,
  // 控件和元素的标识符
  Key key,
 }) :
  // 调用父类
  super(
   // 使用父类的控件和元素标识符
   key: key
  );
 // 最终值,目标列表
 final List targets;
 
 @override
 _AchievementViewState createState() => new _AchievementViewState();
}

class _AchievementViewState extends State {
 // 类成员,存储成就集合
 Set _achievements = new Set();
 
 void _achievementsChanged(Target target, bool nowTarget) {
  // 通知框架此对象的内部状态已更改
  setState((){
   
   if (nowTarget)
    _achievements.add(target);
   else
    _achievements.remove(target);
  });
 }
 // 覆盖此函数以构建依赖于动画的当前状态的控件
 @override
 Widget build(BuildContext context) {
  // 返回值,创建包含列表项的可滚动列表
  return new ListTile(
   
   children: widget.targets.map(
    (Target target) {
     // 返回值,创建成就目标类
     return new AchievementViewItem(
      // 传递目标:本轮迭代中的目标
      target: target,
      // 是否新目标:如果目标在成就集合中,则返回true
      nowTarget: _achievements.contains(target),
      // 对目标的改变:类函数,成就改变
      onTargetChanged: _achievementsChanged,
     );
    }
   ).toList()
  );
 }
}

创建achievement_view.dart文件,传递列表中显示的数据。

import 'package:flutter/material.dart';
import 'achievement_view_list.dart';
import 'achievement_view_list_item.dart';
class AchievementView extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return new AchievementViewList(targets: _kTargets);
 }
}
final List _kTargets = [
 new Target(name: '生存100天', reward: "金钱¥2500t最高能量+20"),
 new Target(name: '大学毕业', reward: "获得毕业学位t金钱¥5000t最高情绪+30"),
 new Target(name: '获得¥5000', reward: "获得信用卡"),
 new Target(name: '购买廉价的公寓', reward: "最高能量+60t最高饥饿度+30"),
 new Target(name: '购买普通的公寓', reward: "最高能量+80t最高饥饿度+50"),
 new Target(name: '生存100天', reward: "金钱¥2500t最高能量+20"),
 new Target(name: '大学毕业', reward: "获得毕业学位t金钱¥5000t最高情绪+30"),
 new Target(name: '获得¥5000', reward: "获得信用卡"),
 new Target(name: '购买廉价的公寓', reward: "最高能量+60t最高饥饿度+30"),
 new Target(name: '购买普通的公寓', reward: "最高能量+80t最高饥饿度+50"),
];

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/155565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号