flutter书架形式格口的动态创建(行、列数,是否全选的配置)

import 'package:jade/bean/experienceStation/ExpCellSpecsBean.dart'; import 'package:jade/configs/PathConfig.dart'; import 'package:jade/utils/DialogUtils.dart'; import 'package:jade/utils/JadeColors.dart'; import 'package:jade/utils/Utils.dart'; import 'package:util/navigator_util.dart'; import 'package:widget/custom_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class ExperienceStationCreateCellSpecsSet extends StatefulWidget{ final int rowCount; //行数 final int columnCount; //列数 const ExperienceStationCreateCellSpecsSet({this.rowCount,this.columnCount}); State<StatefulWidget> createState() { // TODO: implement createState return _ExperienceStationCreateCellSpecsSet(); } } class _ExperienceStationCreateCellSpecsSet extends State<ExperienceStationCreateCellSpecsSet>{ String _latticeImage = PathConfig.imageLatticeCenter; List<List<ExpCellSpecsBean>> _expCellSpecsList = []; //判断全选 static bool _isSelectAll = false; //判断是否是全选或批量设置状态 bool _isSelectAllBatch = false; void initState() { // TODO: implement initState super.initState(); _setList(); } Widget build(BuildContext context) { // TODO: implement build return Scaffold( resizeToAvoidBottomInset: false, backgroundColor: JadeColors.lightGrey, appBar: CustomAppBar( backgroundColor: Colors.white, elevation: 0.2, leading: GestureDetector( onTap: () { Navigator.pop(context); }, child: Icon(Icons.arrow_back_ios), ), iconTheme: IconThemeData(color: Color(0xff999999)), title: Text( '格口规格', style: TextStyle(color: Colors.black), ), centerTitle: true, ), body: _body(), ); } _body(){ return Container( margin: EdgeInsets.only(top: 100.w,left: 50.w), child: Column( children: [ _selectBtnView(), _bookRackView(), _sureBtn() ], ) ); } _selectBtnView(){ return Row( children: [ GestureDetector( child: Container( height: 45.w, padding: EdgeInsets.symmetric(horizontal: 20.w), alignment: Alignment.center, margin: EdgeInsets.only(right: 30.w), decoration: BoxDecoration( color: _judgeSelectAll() ? JadeColors.grey_10 : JadeColors.blue_2, borderRadius: BorderRadius.circular(10) ), child: Text(_judgeSelectAll() ? '取消':'全选',style: TextStyle(color: Colors.white,fontSize: 22.sp),), ), onTap: (){ _setSelectAll(); } ), GestureDetector( child: Container( height: 45.w, alignment: Alignment.center, padding: EdgeInsets.symmetric(horizontal: 20.w), decoration: BoxDecoration( color: JadeColors.blue_2, borderRadius: BorderRadius.circular(10) ), child: Text('批量设置',style: TextStyle(color: Colors.white,fontSize: 22.sp),), ), onTap: (){ DialogUtils().fillInCellInfoDialog(context, sureCallBack: (result) { ExpCellSpecsBean resultBean = result; ///todo 循环赋给选中的格口 //_expCellSpecsList[row][column] setState(() {}); }); } ) ], ); } _bookRackView(){ return Container( margin: EdgeInsets.only(top: 40.w,bottom: 40.w), width: Utils().screenWidth(context)- 60.w, height: Utils().screenHeight(context) * 0.6, child: InteractiveViewer( constrained: false, scaleEnabled: false, child: Table( columnWidths: <int, TableColumnWidth>{ for (int column = 0; column < widget.columnCount; column += 1) column: const FixedColumnWidth(110), }, children: buildRows(widget.rowCount, widget.columnCount), ) ), ); } List<TableRow> buildRows(int rowCount, int columnCount) { return [ for (int row = 0; row < rowCount; row += 1) TableRow( children: [ for (int column = 0; column < columnCount; column ++) InkWell( child: Container( height: 190.w, decoration: BoxDecoration( image:DecorationImage( image: AssetImage(_setLatticeImage(row,column)), fit: BoxFit.fill, // 完全填充 ), ), child: Stack( children: [ Container( alignment: Alignment.center, margin: EdgeInsets.only( top: row == widget.rowCount -1 ? 0 : 30.w, left: column == 0 ? 30.w : 0, right: column == widget.columnCount -1 ? 20.w : 0, ), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ GestureDetector( child: Container( padding: EdgeInsets.only(left: 20.w,right: 20.w,top: 6.w,bottom: 6.w), decoration: BoxDecoration( color: _isCellFillInfo(_expCellSpecsList[row][column]) ? JadeColors.blue_2 : Colors.white38, borderRadius: BorderRadius.circular(20), border: Border.all(width: 1,color: JadeColors.blue_2) ), child: Text(_isCellFillInfo(_expCellSpecsList[row][column]) ? '查看尺寸':'填写尺寸', style: TextStyle(color: _isCellFillInfo(_expCellSpecsList[row][column]) ? Colors.white : JadeColors.blue_2,fontSize: 24.sp),), ), onTap: (){ DialogUtils().fillInCellInfoDialog(context, viewedExpCellSpecsBean: _isCellFillInfo(_expCellSpecsList[row][column]) ? _expCellSpecsList[row][column] : null, sureCallBack: (result) { ExpCellSpecsBean resultBean = result; _expCellSpecsList[row][column].cellHeight = resultBean.cellHeight; _expCellSpecsList[row][column].cellWidth = resultBean.cellWidth; _expCellSpecsList[row][column].cellDepth = resultBean.cellDepth; _expCellSpecsList[row][column].cellPic = resultBean.cellPic; print('填写后的回填:${_expCellSpecsList[row][column].toJson()}'); setState(() {}); }); } ), SizedBox(height: 10.w), GestureDetector( child: Container( padding: EdgeInsets.only(left: 20.w,right: 20.w,top: 6.w,bottom: 6.w), decoration: BoxDecoration( color: _expCellSpecsList[row][column].cellPublishStatus == 1 ? Colors.white38 : JadeColors.blue_2, borderRadius: BorderRadius.circular(20), border: Border.all(width: 1,color: JadeColors.blue_2) ), child: Text(_expCellSpecsList[row][column].cellPublishStatus == 1 ? '下架格口' : '上架格口', style: TextStyle(color: _expCellSpecsList[row][column].cellPublishStatus == 1 ? JadeColors.blue_2 : Colors.white,fontSize: 24.sp),), ), onTap: (){ if(_expCellSpecsList[row][column].cellPublishStatus == 1){ DialogUtils().commonDescDialog(context, descTitle: '下架格口', desc: '下架后该格口将不能进行交易、售卖。', showCancel: true, sureBtnText: '确认下架', sureBtnTextColor: JadeColors.grey_2, callback: (){ setState(() { _expCellSpecsList[row][column].cellPublishStatus = 0; }); } ); }else{ setState(() { _expCellSpecsList[row][column].cellPublishStatus = 1; }); } } ), ], ) ), GestureDetector( child: Container( padding: EdgeInsets.only(left: 2,top: 1,right: 5,bottom: 5), color: Colors.transparent, child: Container( width: 36.w, height: 36.w, alignment: Alignment.center, margin: EdgeInsets.only(top: 14.w,left: 10.w), decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all(width: 1.w,color: Colors.white), color: _expCellSpecsList[row][column].isSelected ? JadeColors.blue_2 : JadeColors.translucent ), child: _expCellSpecsList[row][column].isSelected ? Image.asset(PathConfig.iconCheckWhite,width: 20.w,height: 20.w) : Text('${_expCellSpecsList[row][column].num}',style: TextStyle(color: Colors.white,fontSize: 15.sp,fontWeight: FontWeight.bold)), ), ), onTap: (){ setState(() { _expCellSpecsList[row][column].isSelected = !_expCellSpecsList[row][column].isSelected; }); _isSelectAll = _judgeSelectAll(); } ) ], ), ), onTap: (){}, ) ], ), ]; } String _setLatticeImage(row,column){ if(row == 0 && column == 0){ //左上角 _latticeImage = PathConfig.imageLatticeTopLeft; }else if(row == 0 && column == widget.columnCount-1){ //右上角 _latticeImage = PathConfig.imageLatticeTopRight; }else if(row == widget.rowCount -1 && column == 0){ //左下角 _latticeImage = PathConfig.imageLatticeBottomLeft; }else if(row == widget.rowCount -1 && column == widget.columnCount-1){ //右下角 _latticeImage = PathConfig.imageLatticeBottomRight; }else if(column==0){ _latticeImage = PathConfig.imageLatticeSecondLeft; }else if(column== widget.columnCount-1){ _latticeImage =
上一篇:11-2.Vue2.x基本列表—列表过滤 filter--computed


下一篇:CommunityToolkit.Mvvm笔记---ObservableValidator