다음 하위 범주의 주요 업적 목록에 전환 다음을 클릭합니다
전송 하위 범주의 ID 범주를 통과해야하는 정보의 목록 아래 오른쪽에 엎드려, 그래서 ID의 왼쪽에있는 카테고리에 필요한 것은 제공해야
인터페이스는 웹 사이트에서 찾아보실 수 있습니다 :
이드의 넓은 종류를 제공
우리는 시간의 왼쪽에있는 카테고리를 클릭하면, 우리는 현재 카테고리 ID를 유지해야합니다.
category_page.dart
우리는 오류가 category_page.dart 될 것입니다 경우 위의 매개 변수는 다음 페이지를 통과 수정 이상의 후
우리의 카테고리는 각각 ID를 전달
우리는 비동기 제거하고 수정을 기다리고 얻을
우리는 다음 _getGoodsList에이 방법을 복사
다음과 같은 방법으로 복사 _rightInkWell
이미이 데이터 액세스 방법을 가지고, 다음 단계는 우리의 접근 방식을 호출하는 것입니다
데이터 쇼 :
마지막 코드 :
/ child_category.dart을 제공
및 addAll (목록); 오퍼레이션과 addAll (목록) notifyListeners (); // 듣고 } 서브 클래스 인덱스를 변경 //, 그것의 올 indexs? 우리의 특정 클래스 전송에서 changeChildIndex (색인) { childIndex에 = 인덱스; //는 우리가 childIndex에 할당 된 인덱스를 통해 통과 notifyListeners (); // 통지 } }
category_page.dart
수입 '패키지 : / material.dart 플러터'; 수입 '../service/service_method.dart'; 수입 '다트 : 변환'; 수입 '../model/category.dart'; 수입 '../model/categoryGoodsList.dart'; 수입 '패키지 : / flutter_screenutil.dart flutter_screenutil'; 수입 '패키지 : / provide.dart를 제공하는'; 수입 '../provide/child_category.dart'; 수입 '../provide/category_goods_list.dart'; 클래스는 {CategoryPage StatefulWidget 연장 @Override _CategoryPageState createState () => _CategoryPageState (); } 클래스 _CategoryPageState이 주를 확장 <CategoryPage> appBar : AppBar (제목 : 텍스트 ( '商品分类'),), 몸 : 컨테이너 ( 아이 : 행 ( 어린이 : <위젯> [ LeftCategoryNav (), 열 ( 어린이 : <위젯> [ RightCategoryNav (), CategoryGoodsList () ] , ) ] ) ) ); } } //左侧大类导航 클래스 LeftCategoryNav가 StatefulWidget 연장 { @Override _LeftCategoryNavState createState () => _LeftCategoryNavState (); } 클래스 _LeftCategoryNavState이 확장 주 <LeftCategoryNav> { 일람 = []; var에 ListIndex = 0; @Override 공극 InitState () { super.initState (); _getCategory (); // 요청 데이터 인터페이스 _getGoodsList (); // 기본 파라미터 그래서 여기 선택적 4 값을 전달할 수 없다 } @Override 위젯 빌드 (BuildContext 컨텍스트) { 반환 컨테이너 ( 폭 :. ScreenUtil () setWidth (180), 장식 : BoxDecoration ( 테두리 : 경계 ( 오른쪽 : BorderSide (폭 : 1.0 : 컬러 Colors.black12) // 테두리 ) ), 아동 : ListView.builder ( ITEMCOUNT : 크고 List.length, ) ); itemBuilder : (텍스, 인덱스) { _leftInkWell (인덱스)를 반환; } } 위젯 _leftInkWell (INT 인덱스) { BOOL isClick = 거짓; isClick = (인덱스 == listIndex)가 true : false입니다? 잉크 병 (리턴 ONTAP을 () { setState를 (() { listIndex = 인덱스; }) VAR의 childList =리스트 [인덱스] .bxMallSubDto //当前大类的子类的列表 VAR 카테고리 ID =리스트 [인덱스] .mallCategoryId; //大类的ID Provide.value <ChildCategory> (컨텍스트) .getChildCategory (childList, 카테고리 ID) _getGoodsList (카테고리 ID : 카테고리 ID) } 아이 : 컨테이너 ( . 신장 ScreenUtil () setHeight (100) 패딩 : 왼쪽 EdgeInsets.only (10.0, 상위 10.0) , 장식 : BoxDecoration ( 색상 : isClick Color.fromRGBO (236, 236, 236, 1.0) Colors.white, 테두리 : 테두리 ( 하단 : BorderSide (폭 : 1.0 : 컬러 Colors.black12) ) ), 아이 : 텍스트 ( 목록 [인덱스] .mallCategoryName, 스타일 : 문자 유형 (fontSize는 :. ScreenUtil () setSp (28)), //设置字体大小,为了兼容使用setSp ), ), ); } 공극 _getCategory () {비동기 . 요청 ( '주는 getCategory')을 ((발) {기다리고 , VAR 데이터 = json.decode (val.toString ()) // 인쇄 (데이터) CategoryModel 카테고리 = CategoryModel.fromJson (데이터 ); 와 setState을 (() { 목록 카테고리 = .DATA; }); // setState를 (() { //리스트 = goodsList.data; //}); Provide.value <CategoryGoodsListProvide> (컨텍스트) .getGoodsList (goodsList.data); }); } } 클래스는 {RightCategoryNav StatefulWidget 연장 @Override _RightCategoryNavState createState () => _RightCategoryNavState (); } 클래스 _RightCategoryNavState 연장 상태 <RightCategoryNav> { //리스트리스트 = '名酒', '宝丰', '北京二锅头', '舍得', '五粮液', '茅台', '散白']; @Override 위젯 구축 (BuildContext 컨텍스트) { 반환 제공 <ChildCategory> ( 빌더 : (문맥, 아이, childCategory가) { 컨테이너 (반환 높이 :. ScreenUtil ()를 setHeight (80) 폭 : ScreenUtil () setWidth (570), //总的宽度是750 -180. 장식 : BoxDecoration ( 색상 : Colors.white, //白色背景 국경 : 국경 ( 하단 : BorderSide (폭 : 1.0, 색상 : 색상. black12) //边界线 ) ), 아이 : ListView.builder ( scrollDirection : Axis.horizontal, ITEMCOUNT : childCategory.childCategoryList.length, itemBuilder (문맥 색인) { _rightInkWell (인덱스를 리턴 childCategory.childCategoryList [인덱스]); } ) ); } ); } 위젯 _rightInkWell (INT 인덱스 항목 BxMallSubDto) { BOOL isClick = 거짓; isClick = (인덱스 == Provide.value <ChildCategory> (컨텍스트) .childIndex) 오류가 true로 :?, 잉크 병 (반환 에 ONTAP을 () { <Provide.value ChildCategory> (컨텍스트) .changeChildIndex (인덱스) _getGoodsList (item.mallSubId); } // 이벤트 빈 아이 : 컨테이너 (// 컨테이너를 추가하는 무엇, 그래서 좋은 레이아웃 패딩 : EdgeInsets.fromLTRB (5.0, 10.0, 5.0, 10.0), 아래로 5.0 10 //입니다 텍스트 : 아이 ( item.mallSubName, 스타일 : 문자 유형 ( fontSize는 :. ScreenUtil () setSp (28), 색상 : isClick Colors.pink :? Colors.black ) ) ) ); } 무효 _getGoodsList (문자열 categorySubId) { 바르는 {데이터 = : Provide.value <ChildCategory> (컨텍스트) .categoryId // 분류 ID '카테고리 ID' categorySubId, 'categorySubId' '페이지':. 1 } 요청 ( 'getMallGoods' formData : 데이터) 그 때는 ((발) { var에가 JSON.decode 데이터 (val.toString는 ()) =; CategoryGoodsListModel goodsList = CategoryGoodsListModel.fromJson (데이터); // 그래서 JSON에서 '모델 클래스는 변환 Provide.value을 <CategoryGoodsListProvide는> .getGoodsList (goodsList.data) (콘텍스트) }); } } LAC을 업로드 할 상품 //리스트 클래스는 {StatefulWidget 연장 CategoryGoodsList @Override을 _CategoryGoodsListState createState () => _CategoryGoodsListState (); ITEMCOUNT : data.goodsList.length, } 클래스 _CategoryGoodsListState이 주를 확장 <CategoryGoodsList> { @Override 무효 initState () { // _ getGoodsList (); super.initState (); } @Override의 위젯 빌드 (BuildContext 컨텍스트) { 반환 <CategoryGoodsListProvide> (제공 (문맥, 아이, 데이터) {: 빌더 확장 (반환 아이 : 컨테이너 ( 폭 : ScreenUtil () setWidth (570). // 높이 : ScreenUtil을 ( ) .setHeight (974), 아이 : ListView.builder ( itemBuilder : (텍스, 인덱스) { _listWidget (data.goodsList, 인덱스)을 반환; } ), ) ) } ) } 위젯 _goodsImage (목록 newList, 인덱스) { 컨테이너 (반환 폭 : ScreenUtil () setWidth (200), (200 개) // 설정된 한계 폭. 어린이 : Image.network (newList [인덱스]. 이미지) ) } 위젯 _goodsName (목록 newList, 인덱스) { 컨테이너 (반환 패딩 : EdgeInsets.all (5.0), 수직 및 수평 패딩 // 5.0 폭 : ScreenUtil () setWidth (370 ), /. / 370 정도의 값이다 어린이 : 텍스트 ( newList [인덱스] .goodsName, maxLines : 2, 라인 (2)가 표시 // 오버플 : TextOverflow.ellipsis, 스타일 다음 TEXTSTYLE합니다 (fontSize는 : ScreenUtil () setSp (28)), 폰트 크기 //. ) ); } 위젯 (목록 newList, 인덱스) _GoodsPrice { 컨테이너 (반환 마진 : EdgeInsets.only (최고 : 20.0) 및 위 // 외부 피치 폭 :. ScreenUtil () setWidth ( 370), // 370 정도의 값이다 아이 : 행 ( 자녀 : <위젯> [ 텍스트 ( '$ {newList 가격 ¥ [인덱스] .presentPrice}', 스타일 다음 텍스트 스타일 (색상 : Colors.pink의 fontSize는 :. ScreenUtil () setSp (30)), ), 텍스트 ( '$ {newList 가격 ¥ [인덱스] .oriPrice}', 스타일 다음 텍스트 스타일 ( } 색상 : Colors.black26, 장식 : TextDecoration.lineThrough ), //删除线的样式 ) , ), ); 위젯 _listWidget (목록 newList, INT 지수) { 잉크 병 (반환 () {} : ONTAP 아이 : 컨테이너 ( 패딩 : 최고 EdgeInsets.only (5.0, 하단 : 5.0), 장식 : BoxDecoration ( 색상 : Colors.white, 국경을 : 경계 ( 하단 : BorderSide (폭 : 1.0 : 컬러 Colors.black12) ) ), 아이 : 행 ( 어린이 <위젯> [ _goodsImage (newList, 인덱스), 열 ( 아이들 <위젯> [ _goodsName (newList 인덱스) _goodsPrice (newList, 인덱스) ] ) ], ) ) ); } }
.