Flutter实战(交流群:452892873)

本项目是一个实战项目,根据目录建文件,并复制从第一节到最新更新的文章,可以构成完整的一个请求后台数据的项目:

CateModel.dart

  1. class CateModel {
  2. List<CateItemModel> result;
  3.  
  4. CateModel({this.result});
  5.  
  6. CateModel.fromJson(Map<String, dynamic> json) {
  7. if (json['result'] != null) {
  8. result = new List<CateItemModel>();
  9. json['result'].forEach((v) {
  10. result.add(new CateItemModel.fromJson(v));
  11. });
  12. }
  13. }
  14.  
  15. Map<String, dynamic> toJson() {
  16. final Map<String, dynamic> data = new Map<String, dynamic>();
  17. if (this.result != null) {
  18. data['result'] = this.result.map((v) => v.toJson()).toList();
  19. }
  20. return data;
  21. }
  22. }
  23.  
  24. class CateItemModel {
  25. String sId;
  26. String title;
  27. Object status;
  28. String pic;
  29. String pid;
  30. String sort;
  31.  
  32. CateItemModel({this.sId, this.title, this.status, this.pic, this.pid, this.sort});
  33.  
  34. CateItemModel.fromJson(Map<String, dynamic> json) {
  35. sId = json['_id'];
  36. title = json['title'];
  37. status = json['status'];
  38. pic = json['pic'];
  39. pid = json['pid'];
  40. sort = json['sort'];
  41. }
  42.  
  43. Map<String, dynamic> toJson() {
  44. final Map<String, dynamic> data = new Map<String, dynamic>();
  45. data['_id'] = this.sId;
  46. data['title'] = this.title;
  47. data['status'] = this.status;
  48. data['pic'] = this.pic;
  49. data['pid'] = this.pid;
  50. data['sort'] = this.sort;
  51. return data;
  52. }
  53. }

  Category.dart

  1. import 'package:flutter/material.dart';
  2. import '../../services/ScreenAdaper.dart';
  3. import '../../config/Config.dart';
  4. import 'package:dio/dio.dart';
  5. import '../../model/CateModel.dart';
  6.  
  7. class CategoryPage extends StatefulWidget {
  8. CategoryPage({Key key}) : super(key: key);
  9.  
  10. _CategoryPageState createState() => _CategoryPageState();
  11. }
  12.  
  13. class _CategoryPageState extends State<CategoryPage> {
  14. int _selectIndex = ;
  15. List _leftCateList = [];
  16. List _rightCateList = [];
  17. @override
  18. void initState() {
  19. super.initState();
  20. _getLeftCateData();
  21. }
  22.  
  23. //左侧数据:
  24. _getLeftCateData() async {
  25. var api = '${Config.domain}api/pcate';
  26. var result = await Dio().get(api);
  27. var leftCateList = CateModel.fromJson(result.data);
  28. setState(() {
  29. this._leftCateList = leftCateList.result;
  30. });
  31. _getRightCateData(leftCateList.result[].sId);
  32. }
  33.  
  34. //右侧数据:
  35. _getRightCateData(pid) async {
  36. var api = '${Config.domain}api/pcate?pid=${pid}';
  37. var result = await Dio().get(api);
  38. var rightCateList = CateModel.fromJson(result.data);
  39. print();
  40. setState(() {
  41. this._rightCateList = rightCateList.result;
  42. });
  43. }
  44.  
  45. //左侧组件
  46. Widget _leftCateWidget(leftWidth) {
  47. if (this._leftCateList.length > ) {
  48. return Container(
  49. width: leftWidth,
  50. height: double.infinity,
  51. // color: Colors.red,
  52. child: ListView.builder(
  53. itemCount: this._leftCateList.length,
  54. itemBuilder: (context, index) {
  55. return Column(
  56. children: <Widget>[
  57. InkWell(
  58. onTap: () {
  59. setState(() {
  60. // setState(() {
  61. _selectIndex = index;
  62. this._getRightCateData(this._leftCateList[index].sId);
  63. });
  64. print(_selectIndex);
  65. },
  66. child: Container(
  67. width: double.infinity,
  68. height: ScreenAdaper.height(),
  69. padding: EdgeInsets.only(top: ScreenAdaper.height()),
  70. child: Text("${this._leftCateList[index].title}",
  71. textAlign: TextAlign.center),
  72. color: _selectIndex == index
  73. ? Color.fromRGBO(, , , 0.9)
  74. : Colors.white,
  75. ),
  76. ),
  77. Divider(height: ),
  78. ],
  79. );
  80. },
  81. ),
  82. );
  83. } else {
  84. return Container(
  85. width: leftWidth,
  86. height: double.infinity,
  87. );
  88. }
  89. }
  90.  
  91. //右侧组件:
  92. Widget _rightCateWidget(rightItemWidth, rightItemHeigth) {
  93. if (this._rightCateList.length > ) {
  94. return Expanded(
  95. flex: ,
  96. child: Container(
  97. padding: EdgeInsets.all(),
  98. height: double.infinity,
  99. color: Color.fromRGBO(, , , 0.9),
  100. // color: Colors.blue,
  101. child: GridView.builder(
  102. gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
  103. crossAxisCount: ,
  104. childAspectRatio: rightItemWidth / rightItemHeigth,
  105. crossAxisSpacing: ,
  106. mainAxisSpacing: ),
  107. itemCount: this._rightCateList.length,
  108. itemBuilder: (context, index) {
  109. //处理图片:
  110. String pic=this._rightCateList[index].pic;
  111. pic=Config.domain+pic.replaceAll('\\','/');
  112. return Container(
  113. // padding: EdgeInsets.all(ScreenAdaper.width(20)),
  114. child: Column(
  115. children: <Widget>[
  116. AspectRatio(
  117. aspectRatio: / ,
  118. child: Image.network(
  119. "${pic}",
  120. fit: BoxFit.cover),
  121. ),
  122. Container(
  123. height: ScreenAdaper.height(),
  124. child: Text("${this._rightCateList[index].title}"),
  125. )
  126. ],
  127. ),
  128. );
  129. },
  130. ),
  131. ),
  132. );
  133. } else {
  134. return Expanded(
  135. flex: ,
  136. child: Container(
  137. padding: EdgeInsets.all(),
  138. height: double.infinity,
  139. color: Color.fromRGBO(, , , 0.9),
  140. child: Text('加载中...'),
  141. ));
  142. }
  143. }
  144.  
  145. Widget build(BuildContext context) {
  146. ScreenAdaper.init(context);
  147.  
  148. //计算右侧GridView宽高比:
  149. var leftWidth = ScreenAdaper.getScreenWidth() / ;
  150. //右侧宽高=总宽度-左侧宽度-Gridview外层元素左右的Padding值-GridView中间的间距
  151. var rightItemWidth =
  152. (ScreenAdaper.getScreenWidth() - leftWidth - - ) / ;
  153. rightItemWidth = ScreenAdaper.width(rightItemWidth);
  154. var rightItemHeigth = rightItemWidth + ScreenAdaper.height();
  155.  
  156. return Row(
  157. children: <Widget>[
  158. _leftCateWidget(leftWidth),
  159. _rightCateWidget(rightItemWidth, rightItemHeigth)
  160. ],
  161. );
  162. }
  163. }

07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染的更多相关文章

  1. 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现

    前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ...

  2. 商城项目实战 | 2.1 Android 仿京东商城——自定义 Toolbar (一)

    前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 现在很多的 APP 里面都有自己的自定义风格,特别是京东商城中自 ...

  3. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

  4. 仿联想商城laravel实战---1、仿联想商城需求和数据库设计(lavarel如何搭建项目)

    仿联想商城laravel实战---1.仿联想商城需求和数据库设计(lavarel如何搭建项目) 一.总结 一句话总结: composer引入lavarel.配置域名.配置apache 1.项目名 le ...

  5. http://www.blogjava.net/xylz/archive/2010/07/08/325587.html

    http://www.blogjava.net/xylz/archive/2010/07/08/325587.html

  6. Flutter入门教程(四)第一个flutter项目解析

    一.创建一个Flutter工程 1.1 命令行创建 首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd: 使用 flutter create <projectname ...

  7. ASP.NET Core Web API + Angular 仿B站(一) 目的分析以及创建 WebAPI + Angular7 项目

    前言: 本系列文章主要为对所学 Angular 框架的一次微小的实践,对 b站页面作简单的模仿. 本系列文章主要参考资料: 微软文档: https://docs.microsoft.com/zh-cn ...

  8. 前端练手小项目——网页版qq音乐仿写

    qq音乐网页版仿写 一些步骤与注意事项 一开始肯定就是html+css布局和页面了,这段特别耗时间,耐心写完就好了 首先要说一下大致流程: 一定要先布局html!,所以一定要先分析页面布局情况,用不同 ...

  9. React Native开源项目如何运行(附一波开源项目)

    学习任何技术,最快捷的方法就是学习完基础语法,然后模仿开源项目进行学习,React Native也不例外.React Native推出了1年多了, 开源项目太多了,我们以其中一个举例子.给大家演示下如 ...

  10. 怎么将linux下的项目转换成windows的VS2010下的项目?

    怎么将linux下的项目转换成windows的VS2010下的项目?             不显示删除回复             显示所有回复             显示星级回复        ...

随机推荐

  1. powerlink的Windows-DEMO生成笔记

    资料准备: 1.Visual studio 2010 2.Cmake 3.Powerlink 2.7.1源码 具体下载请到相关页面去获取. 新版的powerlink分为两个部分: 1.协议栈 2.应用 ...

  2. select函数的详细使用(C语言)

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序( ...

  3. go语言defer关键字背后的实现,语法,用法

    原文: https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html ------------------------------ ...

  4. oracle 给表字段把VARCHAR2 换成 CLOB

    select * from TableName -- 添加一个字段 alter table TableName add 字段2 clob; --复制数据到此字段update TableName set ...

  5. app连接线上数据库进行本地接口测试

    1.将开发环境下数据库配置改为生产环境下的数据库连接 2.备份生产环境下的数据库数据以及结构,使用Postman请求开发(本地)环境下的接口 3.打开手机上安装的线上app改动接口时查看app是否发生 ...

  6. 题解 [JOI 2019 Final] 硬币收藏

    题面 解析 首先题目可以理解为把一些点放进一个框里,每个格子只能放一个. 那么显然你可以先把这个点移到框里离它最近的格子里, (这个时候格子里可以放很多个) 然后再在框里乱跑移动. 那么我们先考虑只有 ...

  7. Excel2013下拉框选择自动填充颜色

    图一写判断公式,图二选择应用范围.

  8. web超大文件上传

    文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...

  9. 【原创】go语言学习(一)

    一.go发展历史 1.1诞生历史 1.诞生于2006年1月下午15点4分5秒 2.2009发布并正式开园 3.2012年第一个正式版本Go1.0发布 4.截止2019年10月8日,Go1.13.1 1 ...

  10. shell 重定向0,1,2

    .1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 >a.txt 表示将错误信息输出到文件a.txt中. #将1,2输出转发给/dev/null设 ...