前端开发进阶篇——Flutter实战之商城首页01

举报
小团子999 发表于 2020/08/09 15:51:34 2020/08/09
【摘要】 Flutter实战之商城首页

        首先我们对首页布局进行一个简单介绍,首页我们分为四部分:顶部轮播、顶部导航、新人专享、秒杀商品、火爆商品。它们分别作为一个类进行编写。

        

        页面整体效果如下:

        image.png            image.png

1. 页面主体编写

        Widget build(BuildContext context) {

            return Scaffold(

              appBar: AppBar(

                title: Text('京东商城'),

              ),

              body: FutureBuilder(

                  future: getHomePageContent(),

                  builder: (context, snapshot) {

                    if (snapshot.hasData) {

                      List swiperDataList = snapshot.data['data']['swipers'];

                      List navigatorDataList = snapshot.data['data']['logos'];

                      List quickProductDataList =

                          snapshot.data['data']['quicksProduct'];

                      List newUserDataList = snapshot.data['data']['newUser'];

                      return SingleChildScrollView(

                          child: Column(

                        children: <Widget>[

                          SwiperDisplay(

                            swiperDataList: swiperDataList,

                          ),

                          TopNavigator(navigatorList: navigatorDataList),

                          NewUser(userImage: newUserDataList),

                          QuickProduct(quickProductList: quickProductDataList),

                          _hotGoods(),

                        ],

                      ));

                    } else {

                      return Center(

                        child: Text("加载中"),

                      );

                    }

                  }),

            );

          }

        因为们要使用接口返回的异步数据来动态更新UI,所以我们这里使用了FutureBuilder,它会根据所依赖的Future的状态来动态构建自身。它包括如下参数:

    • future:FutureBuilder依赖的Future,通常是一个异步耗时任务。

    • initialData:初始数据,用户设置默认数据。

    • builder:Widget构建器。

        这里我们使用到了future用来加载后台接口数据,我们定义了一个Future组件getHomePageContent()。下面是其代码:

            Future getHomePageContent() async {

              try {

                // print('开始获取首页数据...............');

                Response response;

                Dio dio = new Dio();

                // dio.options.responseType = ResponseType.plain;

                response = await dio.post(servicePath['homePageContent']);

                if (response.statusCode == 200) {

                  // print("数据返回成功");

                  return response.data;

                } else {

                  throw Exception('后端接口出现异常,请检测代码和服务器情况.........');

                }

              } catch (e) {

                return print(e);

              }

            }

        这里我们使用了Dart的第三方Http请求库dio,我么使用它来访问我们定义的接口数据。由于页面数据请求路径众多,所以我们又进行了一次封装。serviceUrl 是我们在fastmock的远程URl,servicePath是具体不同数据的接口,下面是定义访问路径的具体代码:

        const serviceUrl =

            'https://www.fastmock.site/mock/66ea7ba7bd788d97c976b1c64065ebf9/shop_data';

        const servicePath = {

          'homePageContent': serviceUrl + '/HomePageData',

          'RecommendContent': serviceUrl + '/RecommendData',

          'CategoriesContent': serviceUrl + '/CategoriesData',

          'GoodContent': serviceUrl + '/GoodData',

        };

        当我们使用getHomePageContent()获取到数据时,我们就使用Widget构建器builder进行页面构建。构建器中的snapshot会包含当前异步任务的状态信息及结果信息 。我们通过snapshot.hasData来判断是否返回有数据,如果有我们对其返回的数据进行分模块存储,然后将数据传递到个模块组件进行页面构建。否则显示“加载中”。

       下面就是我们构建器需要返回的组件代码,我们分别用SingleChildScrollView滑动组件、Colum组件对顶部轮播、顶部导航、新人专享、秒杀商品,火爆商品模块进行包裹。

    return SingleChildScrollView(

                              child: Column(

                            children: <Widget>[

                              SwiperDisplay(

                                swiperDataList: swiperDataList,

                              ),

                              TopNavigator(navigatorList: navigatorDataList),

                              NewUser(userImage: newUserDataList),

                              QuickProduct(quickProductList: quickProductDataList),

                              _hotGoods(),

                            ],

                          ));

        以上是对商城首页的整体布局、代码组成进行了简单介绍,后面的文章将对其每一个页面模块进行介绍。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。