这是我的第一篇博客,测试文章
大家好,我是一名flutter爱好者,ahyang
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:baixingg/service/service_method.dart'; import 'package:baixingg/model/category.dart'; import 'package:baixingg/model/goods_list.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:provide/provide.dart'; import 'package:baixingg/provide/child_category.dart'; import 'package:baixingg/provide/category_goods_list.dart'; class CategoryPage extends StatefulWidget { @override _CategoryPageState createState() => _CategoryPageState(); } class _CategoryPageState extends State<CategoryPage> { String _data = '加载中'; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('商品分类'), centerTitle: true, elevation: 0, ), body: Row( children: <Widget>[ LeftCategoryNav(), Column( children: <Widget>[ RightCategoryNav(), CategoryGoodsList(), ], ), ], ), ); } } // 左侧大类导航 class LeftCategoryNav extends StatefulWidget { @override _LeftCategoryState createState() => _LeftCategoryState(); } class _LeftCategoryState extends State<LeftCategoryNav> { List list = List(); var listIndex = 0; void initState() { super.initState(); _getCategory(); getGoodsList(); } @override Widget build(BuildContext context) { return Container( width: ScreenUtil().setWidth(180), decoration: BoxDecoration( border: Border( right: BorderSide(width: 1, color: Colors.black12), )), child: ListView.builder( itemCount: list.length, itemBuilder: (context, index) { return _leftInkWell(index); }, ), ); } Widget _leftInkWell(int index) { bool isClick = false; isClick = (index == listIndex) ? true : false; return InkWell( onTap: () { setState(() { listIndex = index; }); var childList = list[index].bxMallSubDto; var categoryId = list[index].mallCategoryId; Provide.value<ChildCategory>(context) .getChildCategory(childList, categoryId); getGoodsList(categoryId: categoryId); }, child: Container( height: ScreenUtil().setHeight(100), padding: EdgeInsets.only(left: 10, top: 20), decoration: BoxDecoration( color: isClick ? Color.fromRGBO(236, 236, 236, 1.0) : Colors.white, border: Border( bottom: BorderSide(width: 1, color: Colors.black12), )), child: Text( list[index].mallCategoryName, style: TextStyle( fontSize: ScreenUtil().setSp(28), ), ), ), ); } _getCategory() async { await request('getCategory').then((val) { var data = json.decode(val.toString()); CategoryModle category = CategoryModle.fromJson(data); setState(() { list = category.data; }); Provide.value<ChildCategory>(context) .getChildCategory(list[0].bxMallSubDto, list[0].mallCategoryId); }); } getGoodsList({String categoryId}) { var data = { 'categoryId': categoryId == null ? '4' : categoryId, 'categorySubId': '', 'page': 1, }; request('getMallGoods', formData: data).then((val) { var data = json.decode(val.toString()); CategoryGoodsListModel _listModel = CategoryGoodsListModel.fromJson(data); Provide.value<CategoryGoodsListProvide>(context) .getGoodsList(_listModel.data); // setState(() { // list = _listModel.data; // }); }); } } // 顶部状态管理分类 class RightCategoryNav extends StatefulWidget { @override _RightCategoryNavState createState() => _RightCategoryNavState(); } class _RightCategoryNavState extends State<RightCategoryNav> { // List list = ['零度', '雪花', '动力', '名酒', '白酒', '红酒', '烈酒', '葡萄酒']; @override Widget build(BuildContext context) { return Provide<ChildCategory>( builder: (context, child, childCategory) { return Container( height: ScreenUtil().setHeight(80), width: ScreenUtil().setWidth(570), child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: childCategory.childCategoryList.length, itemBuilder: (context, index) { return _rightInWell( index, childCategory.childCategoryList[index]); }, ), decoration: BoxDecoration( color: Colors.white, border: Border( bottom: BorderSide( width: 1, color: Colors.black12, ), ), ), ); }, ); } Widget _rightInWell(int index, BxMallSubDto item) { bool isClick = false; isClick = (index == Provide.value<ChildCategory>(context).childIndex) ? true : false; return InkWell( onTap: () { Provide.value<ChildCategory>(context).changeChildIndex(index, item.mallSubId); getGoodsList(item.mallSubId); }, child: Container( padding: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 10.0), child: Text( item.mallSubName, style: TextStyle( fontSize: ScreenUtil().setSp(28), color: isClick ? Colors.pink : null), ), ), ); } getGoodsList(String categorySubId) { var data = { 'categoryId': Provide.value<ChildCategory>(context).categoryId, 'categorySubId': categorySubId, 'page': 1, }; request('getMallGoods', formData: data).then((val) { var data = json.decode(val.toString()); CategoryGoodsListModel _listModel = CategoryGoodsListModel.fromJson(data); if (_listModel.data == null) { Provide.value<CategoryGoodsListProvide>(context).getGoodsList([]); } else { Provide.value<CategoryGoodsListProvide>(context) .getGoodsList(_listModel.data); } // setState(() { // list = _listModel.data; // }); }); } } // 商品列表,可以上拉加载 class CategoryGoodsList extends StatefulWidget { @override _CategoryGoodsListState createState() => _CategoryGoodsListState(); } class _CategoryGoodsListState extends State<CategoryGoodsList> { // List list = []; @override void initState() { super.initState(); // getGoodsList(); } @override Widget build(BuildContext context) { return Provide<CategoryGoodsListProvide>( builder: (context, child, data) { if(data.goodsList.length > 0) { return Expanded( child: Container( width: ScreenUtil().setWidth(570), child: ListView.builder( itemCount: data.goodsList.length, itemBuilder: (context, index) { return _listView(data.goodsList, index); }, ), ), ); } else { return Text('没有数据,嗯好义熙'); } }, ); } Widget _goodsImage(newList, index) { return Container( padding: EdgeInsets.only(left: 10), width: ScreenUtil().setWidth(200), child: Image.network(newList[index].image), ); } Widget _goodsName(newList, index) { return Container( padding: EdgeInsets.only(left: 10), width: ScreenUtil().setWidth(370), child: Text( newList[index].goodsName, maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: ScreenUtil().setSp(28), ), ), ); } Widget _goodsPrice(newList, index) { return Container( width: ScreenUtil().setWidth(370), margin: EdgeInsets.only(top: 20), padding: EdgeInsets.only(left: 10), child: Row( children: <Widget>[ Text( '价格:¥${newList[index].presentPrice}', style: TextStyle( fontSize: ScreenUtil().setSp(30), color: Colors.pink, ), ), Text( '${newList[index].oriPrice}', style: TextStyle( color: Colors.black26, decoration: TextDecoration.lineThrough, ), ) ], ), ); } Widget _listView(newList, index) { return InkWell( child: Container( padding: EdgeInsets.only(top: 10, bottom: 10), decoration: BoxDecoration( border: Border( bottom: BorderSide( width: 1, color: Colors.black12, ), ), ), child: Row( children: <Widget>[ _goodsImage(newList, index), Column( children: <Widget>[ _goodsName(newList, index), _goodsPrice(newList, index), ], ), ], ), ), onTap: () {}, ); } }
这是分割线,
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:baixingg/service/service_method.dart';
import 'package:baixingg/model/category.dart';
import 'package:baixingg/model/goods_list.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provide/provide.dart';
import 'package:baixingg/provide/child_category.dart';
import 'package:baixingg/provide/category_goods_list.dart';
class CategoryPage extends StatefulWidget {
@override
_CategoryPageState createState() => _CategoryPageState();
}
class _CategoryPageState extends State<CategoryPage> {
String _data = '加载中';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('商品分类'),
centerTitle: true,
elevation: 0,
),
body: Row(
children: <Widget>[
LeftCategoryNav(),
Column(
children: <Widget>[
RightCategoryNav(),
CategoryGoodsList(),
],
),
],
),
);
}
}
// 左侧大类导航
class LeftCategoryNav extends StatefulWidget {
@override
_LeftCategoryState createState() => _LeftCategoryState();
}
class _LeftCategoryState extends State<LeftCategoryNav> {
List list = List();
var listIndex = 0;
void initState() {
super.initState();
_getCategory();
getGoodsList();
}
@override
Widget build(BuildContext context) {
return Container(
width: ScreenUtil().setWidth(180),
decoration: BoxDecoration(
border: Border(
right: BorderSide(width: 1, color: Colors.black12),
)),
child: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return _leftInkWell(index);
},
),
);
}
Widget _leftInkWell(int index) {
bool isClick = false;
isClick = (index == listIndex) ? true : false;
return InkWell(
onTap: () {
setState(() {
listIndex = index;
});
var childList = list[index].bxMallSubDto;
var categoryId = list[index].mallCategoryId;
Provide.value<ChildCategory>(context)
.getChildCategory(childList, categoryId);
getGoodsList(categoryId: categoryId);
},
child: Container(
height: ScreenUtil().setHeight(100),
padding: EdgeInsets.only(left: 10, top: 20),
decoration: BoxDecoration(
color: isClick ? Color.fromRGBO(236, 236, 236, 1.0) : Colors.white,
border: Border(
bottom: BorderSide(width: 1, color: Colors.black12),
)),
child: Text(
list[index].mallCategoryName,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
),
),
),
);
}
_getCategory() async {
await request('getCategory').then((val) {
var data = json.decode(val.toString());
CategoryModle category = CategoryModle.fromJson(data);
setState(() {
list = category.data;
});
Provide.value<ChildCategory>(context)
.getChildCategory(list[0].bxMallSubDto, list[0].mallCategoryId);
});
}
getGoodsList({String categoryId}) {
var data = {
'categoryId': categoryId == null ? '4' : categoryId,
'categorySubId': '',
'page': 1,
};
request('getMallGoods', formData: data).then((val) {
var data = json.decode(val.toString());
CategoryGoodsListModel _listModel = CategoryGoodsListModel.fromJson(data);
Provide.value<CategoryGoodsListProvide>(context)
.getGoodsList(_listModel.data);
// setState(() {
// list = _listModel.data;
// });
});
}
}
// 顶部状态管理分类
class RightCategoryNav extends StatefulWidget {
@override
_RightCategoryNavState createState() => _RightCategoryNavState();
}
class _RightCategoryNavState extends State<RightCategoryNav> {
// List list = ['零度', '雪花', '动力', '名酒', '白酒', '红酒', '烈酒', '葡萄酒'];
@override
Widget build(BuildContext context) {
return Provide<ChildCategory>(
builder: (context, child, childCategory) {
return Container(
height: ScreenUtil().setHeight(80),
width: ScreenUtil().setWidth(570),
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: childCategory.childCategoryList.length,
itemBuilder: (context, index) {
return _rightInWell(
index, childCategory.childCategoryList[index]);
},
),
decoration: BoxDecoration(
color: Colors.white,
border: Border(
bottom: BorderSide(
width: 1,
color: Colors.black12,
),
),
),
);
},
);
}
Widget _rightInWell(int index, BxMallSubDto item) {
bool isClick = false;
isClick = (index == Provide.value<ChildCategory>(context).childIndex)
? true
: false;
return InkWell(
onTap: () {
Provide.value<ChildCategory>(context).changeChildIndex(index, item.mallSubId);
getGoodsList(item.mallSubId);
},
child: Container(
padding: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 10.0),
child: Text(
item.mallSubName,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: isClick ? Colors.pink : null),
),
),
);
}
getGoodsList(String categorySubId) {
var data = {
'categoryId': Provide.value<ChildCategory>(context).categoryId,
'categorySubId': categorySubId,
'page': 1,
};
request('getMallGoods', formData: data).then((val) {
var data = json.decode(val.toString());
CategoryGoodsListModel _listModel = CategoryGoodsListModel.fromJson(data);
if (_listModel.data == null) {
Provide.value<CategoryGoodsListProvide>(context).getGoodsList([]);
} else {
Provide.value<CategoryGoodsListProvide>(context)
.getGoodsList(_listModel.data);
}
// setState(() {
// list = _listModel.data;
// });
});
}
}
// 商品列表,可以上拉加载
class CategoryGoodsList extends StatefulWidget {
@override
_CategoryGoodsListState createState() => _CategoryGoodsListState();
}
class _CategoryGoodsListState extends State<CategoryGoodsList> {
// List list = [];
@override
void initState() {
super.initState();
// getGoodsList();
}
@override
Widget build(BuildContext context) {
return Provide<CategoryGoodsListProvide>(
builder: (context, child, data) {
if(data.goodsList.length > 0) {
return Expanded(
child: Container(
width: ScreenUtil().setWidth(570),
child: ListView.builder(
itemCount: data.goodsList.length,
itemBuilder: (context, index) {
return _listView(data.goodsList, index);
},
),
),
);
} else {
return Text('没有数据,嗯好义熙');
}
},
);
}
Widget _goodsImage(newList, index) {
return Container(
padding: EdgeInsets.only(left: 10),
width: ScreenUtil().setWidth(200),
child: Image.network(newList[index].image),
);
}
Widget _goodsName(newList, index) {
return Container(
padding: EdgeInsets.only(left: 10),
width: ScreenUtil().setWidth(370),
child: Text(
newList[index].goodsName,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
),
),
);
}
Widget _goodsPrice(newList, index) {
return Container(
width: ScreenUtil().setWidth(370),
margin: EdgeInsets.only(top: 20),
padding: EdgeInsets.only(left: 10),
child: Row(
children: <Widget>[
Text(
'价格:¥${newList[index].presentPrice}',
style: TextStyle(
fontSize: ScreenUtil().setSp(30),
color: Colors.pink,
),
),
Text(
'${newList[index].oriPrice}',
style: TextStyle(
color: Colors.black26,
decoration: TextDecoration.lineThrough,
),
)
],
),
);
}
Widget _listView(newList, index) {
return InkWell(
child: Container(
padding: EdgeInsets.only(top: 10, bottom: 10),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1,
color: Colors.black12,
),
),
),
child: Row(
children: <Widget>[
_goodsImage(newList, index),
Column(
children: <Widget>[
_goodsName(newList, index),
_goodsPrice(newList, index),
],
),
],
),
),
onTap: () {},
);
}
}
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· Ollama系列05:Ollama API 使用指南
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率