• Flutter 商城实例 个人中心


    今天开始布局会员中心的UI

    1、会员中心_首页头部布局

    页面大体架构的编写

    打开以前建立的/lib/pages/member_page.dart文件,先删除里边的代码,然后引入我们需要的package代码。

    import 'package:flutter/material.dart';
    import 'package:flutter_screenutil/flutter_screenutil.dart';

    引入package后,就可以编写一个StatelessWidget,代码如下:

    import 'package:flutter/material.dart';
    import 'package:flutter_screenutil/flutter_screenutil.dart';
    
    class MemberPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
       
      }
    }

    然后返回一个Scaffold,在body区域里加入一个ListView。

    import 'package:flutter/material.dart';
    import 'package:flutter_screenutil/flutter_screenutil.dart';
    
    class MemberPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
         appBar: AppBar(
           title: Text('会员中心'),
         ),
         body:ListView(
           children: <Widget>[
    
           ],
         ) ,
       );
      }
    }

    这样大体结构就已经编写完成了,编写完成后我们把ListView的进行分离出来,编写成不同的方法。

    顶部头像区域编写

    头像区域我们外边套一层Container,然后里边放入Column,圆形头像这个部分,我们使用ClipOval Widget。代码我直接放在下面了。

    Widget _topHeader(){
        return Container(
           ScreenUtil().setWidth(750),
          padding: EdgeInsets.all(20.0),
          color: Colors.redAccent,
          child: Column(
            children: <Widget>[
              Container(
                margin: EdgeInsets.only(top:20.0),
                child: ClipOval( //圆形头像
                  child: Image.network(
                    'https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg',
                     80.0,
                  ),
                ),
              ),
              Container(
                margin: EdgeInsets.only(top:10.0),
                child: Text('个人',style: TextStyle(color:Colors.white,fontSize: ScreenUtil().setSp(36))),
              )
            ],
          ),
        );
      }

    写完后把这个组件加入到build的ListView里就可以了。然后就可以进行一个预览了。

    2、会员中心_订单区域UI编写

    头部区域编写好后,我们就可以编写订单区域了,这部分我们简单分成两个方法来进行编写。

    订单标题区域

    //我的订单顶部标题
      Widget _orderTitle(){
        return Container(
          margin: EdgeInsets.only(top:10),
          decoration: BoxDecoration(
            color: Colors.white,
            border: Border(
              bottom:BorderSide( 1,color:Colors.black12)
            )
          ),
          child: ListTile(
            leading: Icon(Icons.list),
            title:Text('我的订单'),
            trailing: Icon(Icons.arrow_right),
          ),
        );
      }

    订单列表区域

    Widget _orderType(){
        return Container(
          margin: EdgeInsets.only(top:5),
           ScreenUtil().setWidth(750),
          height: ScreenUtil().setHeight(150),
          padding: EdgeInsets.only(top:20),
          color: Colors.white,
          child: Row(
            children: <Widget>[
              Container(
                 ScreenUtil().setWidth(187),
                child: Column(
                  children: <Widget>[
                    Icon(
                      Icons.party_mode,
                      size: 30,
                    ),
                    Text('待付款'),
                  ],
                ),
              ),
              //-----------------
              Container(
                 ScreenUtil().setWidth(187),
                child: Column(
                  children: <Widget>[
                    Icon(
                      Icons.query_builder,
                      size: 30,
                    ),
                    Text('待发货'),
                  ],
                ),
              ),
               //-----------------
              Container(
                 ScreenUtil().setWidth(187),
                child: Column(
                  children: <Widget>[
                    Icon(
                      Icons.directions_car,
                       size: 30,
                    ),
                    Text('待收货'),
                  ],
                ),
              ),
              Container(
                 ScreenUtil().setWidth(187),
                child: Column(
                  children: <Widget>[
                    Icon(
                      Icons.content_paste,
                       size: 30,
                    ),
                    Text('待评价'),
                  ],
                ),
              ),
            ],
          ),
        );
    
      }

    这两个方法写完后,直接加到Build里就可以了。

    3、会员中心_编写ListTile的通用方法

    下面把会员中心的剩下UI做完,可以看到,订单下面就全部都是类似List的形式了。那我们可以编写一个通用的方法,然后传递不同的值,来快速布局出下面的部分。

    ListTile通用方法

    我们利用方法传递参数的形式,创建一个可以通用的方法,只要传递不同的参数,就可以形成不同的组件。代码如下

    Widget _myListTile(String title){
        return Container(
           decoration: BoxDecoration(
            color: Colors.white,
            border: Border(
              bottom:BorderSide( 1,color:Colors.black12)
            )
          ),
          child: ListTile(
            leading: Icon(Icons.blur_circular),
            title: Text(title),
            trailing: Icon(Icons.arrow_right),
          ),
        );
      }
    
    //也可以把图标同样作为参数
    Widget _myListTile(myicon,String title){
        return Container(
          decoration: BoxDecoration(
            color: Colors.white,
            border: Border(
              bottom: BorderSide( 1,color: Colors.black12)
            )
          ),
          child: ListTile(
            leading: Icon(myicon),
            title: Text(title),
            trailing: Icon(Icons.arrow_right),
          ),
        );
      }

    组合List布局

    有了通用的方法后,我们就可以进行组合List布局,代码如下

    Widget _actionList(){
        return Container(
          margin: EdgeInsets.only(top: 10),
          child: Column(
            children: <Widget>[
                _myListTile('领取优惠券'),
                _myListTile('已领取优惠券'),
                _myListTile('地址管理'),
                _myListTile('客服电话'),
                _myListTile('关于我们'),
            ],
          ),
        );
      }

    这个组件编写完成后,再组合到Build方法里面。这步完成后,就形成了一个完成的会员中心页面。

  • 相关阅读:
    架构之美阅读笔记05
    架构之美阅读笔记04
    已经导入到VS工具箱中的DevExpress如何使用
    C#中遇到的方法总结
    vs下C# WinForm 解决方案里面生成的文件都是什么作用?干什么的?
    ssh关于含有外键的传值中无法识别正确的action的原因和解决办法
    MVC模式在Java Web应用程序中的实例分析
    浅谈对MVC的理解
    简述23种设计模式
    浅谈对可用性和易用性的认识以及对如何增加系统功能的理解
  • 原文地址:https://www.cnblogs.com/joe235/p/11395192.html
Copyright © 2020-2023  润新知