Code前端首页关于Code前端联系我们

Flutter 应用程序开发:创建伟大的列表

terry 2年前 (2023-09-23) 阅读数 76 #移动小程序

Flutter 比我们想象的更强大。本文将介绍如何使用flutter展示漂亮的列表。我们先来看渲染。 flutter app开发:打造炫酷的list

款式还是很漂亮的。一步步完成这个小项目。

开发前准备

  • 我们会使用FadeInImage这样的widget来加载网络图片,需要一个加载图标,所以需要在pubspec.yaml中配置静态资源。项目中只能配置静态资源 使用
assets:
   - assets/images/
复制代码
  • 需要一些假数据和一些mock常用的常量,所以专门创建了constant.dart来管理
    colors  # 颜色
    data  # list的数据
    # ...
复制代码

appBar的部分

  • appBar需要透明背景,这样就可以了可以查看以下图像。看起来非常身临其境。
  • 您必须将高度设置为 0 才能取消 Android 特有的阴影效果。代码如下:
Scaffold(
    appBar: AppBar(
    backgroundColor: Colors.transparent,
    elevation: 0,
    title: Text(
        'flutter awesome list',
        style: TextStyle(
        color: Colors.white,
        ),
    ),
    ),
    body: HomeBody(),
);
复制代码

横幅的部分

  • 我们需要使用 Transform.translate() 工具将横幅的部分向上移动,以便整个appBar显示在横幅上。这里显示的偏移量是offset:Offset(0, -56),56是appBar的身高
  • 下面的倒角形状需要用ClipPath()来完成。用途有点像画布。代码如下:
class MyClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    Path p = Path();
    p.lineTo(size.width, 0.0);
    p.lineTo(size.width, size.height / 4.75);
    p.lineTo(0.0, size.height / 3.75);
    p.close();
    return p;
  }

  @override
  bool shouldReclip(CustomClipper oldClipper) {
    return true;
  }
}
复制代码
  • 用于显示用户信息的Widget有ListTile和CircleAvatar。使用方法比较简单。我直接贴出代码:
ListTile(
    leading: CircleAvatar(
    backgroundImage: NetworkImage(CONSTANT.userAvatar),
    ),
    title: Text(
    CONSTANT.userName,
    style: CONSTANT.defaultTextStyle,
    textScaleFactor: 1.5,
    ),
    subtitle: Text(
    CONSTANT.userProfile,
    style: CONSTANT.defaultTextStyle,
    ),
)
复制代码

部分列表视图

  • 列表视图使用ListView.builder(),必须传递两个参数itemCount和itemBuilder。第一个控制列表的数量,第二个控制项目的显示。因为项目样式很多,所以它们被分成单独的 StatelessWidget 组件: AwesomeListItem
  • 我们使用 InkWell 组件来包装 AwesomeListItem。 InkWell 是一个内置的 Flutter 组件。该组件的一个特点是单击时具有墨水晕染效果。当点击某个item时,我们使用Navigator.push进入详情页面
  • 来显示图像。我们仍然使用FadeInImage。这种淡出效果的用户体验还是非常好的。然后使用Hero()包装FadeInImage,它可以在页面跳转时提供图像之间的过渡动​​画。很强大很酷
Hero(
    tag: index,
    child: FadeInImage(
        image: NetworkImage(data.image),
        fit: BoxFit.cover,
        placeholder: AssetImage('assets/images/loading.gif'),
    ),
)
复制代码

详情页

最后是详情页展示。该页面没有样式说明,但从列表页过渡时显示图像过渡效果。有兴趣的可以丰富网站的风格和内容。

作者:小花立志为王
来源:掘金

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门