07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染
Flutter实战(交流群:452892873)
本项目是一个实战项目,根据目录建文件,并复制从第一节到最新更新的文章,可以构成完整的一个请求后台数据的项目:
CateModel.dart
- class CateModel {
- List<CateItemModel> result;
- CateModel({this.result});
- CateModel.fromJson(Map<String, dynamic> json) {
- if (json['result'] != null) {
- result = new List<CateItemModel>();
- json['result'].forEach((v) {
- result.add(new CateItemModel.fromJson(v));
- });
- }
- }
- Map<String, dynamic> toJson() {
- final Map<String, dynamic> data = new Map<String, dynamic>();
- if (this.result != null) {
- data['result'] = this.result.map((v) => v.toJson()).toList();
- }
- return data;
- }
- }
- class CateItemModel {
- String sId;
- String title;
- Object status;
- String pic;
- String pid;
- String sort;
- CateItemModel({this.sId, this.title, this.status, this.pic, this.pid, this.sort});
- CateItemModel.fromJson(Map<String, dynamic> json) {
- sId = json['_id'];
- title = json['title'];
- status = json['status'];
- pic = json['pic'];
- pid = json['pid'];
- sort = json['sort'];
- }
- Map<String, dynamic> toJson() {
- final Map<String, dynamic> data = new Map<String, dynamic>();
- data['_id'] = this.sId;
- data['title'] = this.title;
- data['status'] = this.status;
- data['pic'] = this.pic;
- data['pid'] = this.pid;
- data['sort'] = this.sort;
- return data;
- }
- }
Category.dart
- import 'package:flutter/material.dart';
- import '../../services/ScreenAdaper.dart';
- import '../../config/Config.dart';
- import 'package:dio/dio.dart';
- import '../../model/CateModel.dart';
- class CategoryPage extends StatefulWidget {
- CategoryPage({Key key}) : super(key: key);
- _CategoryPageState createState() => _CategoryPageState();
- }
- class _CategoryPageState extends State<CategoryPage> {
- int _selectIndex = ;
- List _leftCateList = [];
- List _rightCateList = [];
- @override
- void initState() {
- super.initState();
- _getLeftCateData();
- }
- //左侧数据:
- _getLeftCateData() async {
- var api = '${Config.domain}api/pcate';
- var result = await Dio().get(api);
- var leftCateList = CateModel.fromJson(result.data);
- setState(() {
- this._leftCateList = leftCateList.result;
- });
- _getRightCateData(leftCateList.result[].sId);
- }
- //右侧数据:
- _getRightCateData(pid) async {
- var api = '${Config.domain}api/pcate?pid=${pid}';
- var result = await Dio().get(api);
- var rightCateList = CateModel.fromJson(result.data);
- print();
- setState(() {
- this._rightCateList = rightCateList.result;
- });
- }
- //左侧组件
- Widget _leftCateWidget(leftWidth) {
- if (this._leftCateList.length > ) {
- return Container(
- width: leftWidth,
- height: double.infinity,
- // color: Colors.red,
- child: ListView.builder(
- itemCount: this._leftCateList.length,
- itemBuilder: (context, index) {
- return Column(
- children: <Widget>[
- InkWell(
- onTap: () {
- setState(() {
- // setState(() {
- _selectIndex = index;
- this._getRightCateData(this._leftCateList[index].sId);
- });
- print(_selectIndex);
- },
- child: Container(
- width: double.infinity,
- height: ScreenAdaper.height(),
- padding: EdgeInsets.only(top: ScreenAdaper.height()),
- child: Text("${this._leftCateList[index].title}",
- textAlign: TextAlign.center),
- color: _selectIndex == index
- ? Color.fromRGBO(, , , 0.9)
- : Colors.white,
- ),
- ),
- Divider(height: ),
- ],
- );
- },
- ),
- );
- } else {
- return Container(
- width: leftWidth,
- height: double.infinity,
- );
- }
- }
- //右侧组件:
- Widget _rightCateWidget(rightItemWidth, rightItemHeigth) {
- if (this._rightCateList.length > ) {
- return Expanded(
- flex: ,
- child: Container(
- padding: EdgeInsets.all(),
- height: double.infinity,
- color: Color.fromRGBO(, , , 0.9),
- // color: Colors.blue,
- child: GridView.builder(
- gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
- crossAxisCount: ,
- childAspectRatio: rightItemWidth / rightItemHeigth,
- crossAxisSpacing: ,
- mainAxisSpacing: ),
- itemCount: this._rightCateList.length,
- itemBuilder: (context, index) {
- //处理图片:
- String pic=this._rightCateList[index].pic;
- pic=Config.domain+pic.replaceAll('\\','/');
- return Container(
- // padding: EdgeInsets.all(ScreenAdaper.width(20)),
- child: Column(
- children: <Widget>[
- AspectRatio(
- aspectRatio: / ,
- child: Image.network(
- "${pic}",
- fit: BoxFit.cover),
- ),
- Container(
- height: ScreenAdaper.height(),
- child: Text("${this._rightCateList[index].title}"),
- )
- ],
- ),
- );
- },
- ),
- ),
- );
- } else {
- return Expanded(
- flex: ,
- child: Container(
- padding: EdgeInsets.all(),
- height: double.infinity,
- color: Color.fromRGBO(, , , 0.9),
- child: Text('加载中...'),
- ));
- }
- }
- Widget build(BuildContext context) {
- ScreenAdaper.init(context);
- //计算右侧GridView宽高比:
- var leftWidth = ScreenAdaper.getScreenWidth() / ;
- //右侧宽高=总宽度-左侧宽度-Gridview外层元素左右的Padding值-GridView中间的间距
- var rightItemWidth =
- (ScreenAdaper.getScreenWidth() - leftWidth - - ) / ;
- rightItemWidth = ScreenAdaper.width(rightItemWidth);
- var rightItemHeigth = rightItemWidth + ScreenAdaper.height();
- return Row(
- children: <Widget>[
- _leftCateWidget(leftWidth),
- _rightCateWidget(rightItemWidth, rightItemHeigth)
- ],
- );
- }
- }
07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染的更多相关文章
- 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现
前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ...
- 商城项目实战 | 2.1 Android 仿京东商城——自定义 Toolbar (一)
前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 现在很多的 APP 里面都有自己的自定义风格,特别是京东商城中自 ...
- 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)
本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...
- 仿联想商城laravel实战---1、仿联想商城需求和数据库设计(lavarel如何搭建项目)
仿联想商城laravel实战---1.仿联想商城需求和数据库设计(lavarel如何搭建项目) 一.总结 一句话总结: composer引入lavarel.配置域名.配置apache 1.项目名 le ...
- http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
- Flutter入门教程(四)第一个flutter项目解析
一.创建一个Flutter工程 1.1 命令行创建 首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd: 使用 flutter create <projectname ...
- ASP.NET Core Web API + Angular 仿B站(一) 目的分析以及创建 WebAPI + Angular7 项目
前言: 本系列文章主要为对所学 Angular 框架的一次微小的实践,对 b站页面作简单的模仿. 本系列文章主要参考资料: 微软文档: https://docs.microsoft.com/zh-cn ...
- 前端练手小项目——网页版qq音乐仿写
qq音乐网页版仿写 一些步骤与注意事项 一开始肯定就是html+css布局和页面了,这段特别耗时间,耐心写完就好了 首先要说一下大致流程: 一定要先布局html!,所以一定要先分析页面布局情况,用不同 ...
- React Native开源项目如何运行(附一波开源项目)
学习任何技术,最快捷的方法就是学习完基础语法,然后模仿开源项目进行学习,React Native也不例外.React Native推出了1年多了, 开源项目太多了,我们以其中一个举例子.给大家演示下如 ...
- 怎么将linux下的项目转换成windows的VS2010下的项目?
怎么将linux下的项目转换成windows的VS2010下的项目? 不显示删除回复 显示所有回复 显示星级回复 ...
随机推荐
- powerlink的Windows-DEMO生成笔记
资料准备: 1.Visual studio 2010 2.Cmake 3.Powerlink 2.7.1源码 具体下载请到相关页面去获取. 新版的powerlink分为两个部分: 1.协议栈 2.应用 ...
- select函数的详细使用(C语言)
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序( ...
- go语言defer关键字背后的实现,语法,用法
原文: https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html ------------------------------ ...
- oracle 给表字段把VARCHAR2 换成 CLOB
select * from TableName -- 添加一个字段 alter table TableName add 字段2 clob; --复制数据到此字段update TableName set ...
- app连接线上数据库进行本地接口测试
1.将开发环境下数据库配置改为生产环境下的数据库连接 2.备份生产环境下的数据库数据以及结构,使用Postman请求开发(本地)环境下的接口 3.打开手机上安装的线上app改动接口时查看app是否发生 ...
- 题解 [JOI 2019 Final] 硬币收藏
题面 解析 首先题目可以理解为把一些点放进一个框里,每个格子只能放一个. 那么显然你可以先把这个点移到框里离它最近的格子里, (这个时候格子里可以放很多个) 然后再在框里乱跑移动. 那么我们先考虑只有 ...
- Excel2013下拉框选择自动填充颜色
图一写判断公式,图二选择应用范围.
- web超大文件上传
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- 【原创】go语言学习(一)
一.go发展历史 1.1诞生历史 1.诞生于2006年1月下午15点4分5秒 2.2009发布并正式开园 3.2012年第一个正式版本Go1.0发布 4.截止2019年10月8日,Go1.13.1 1 ...
- shell 重定向0,1,2
.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 >a.txt 表示将错误信息输出到文件a.txt中. #将1,2输出转发给/dev/null设 ...