떨림 모바일 서비스 제공 업체의 전투 - _ 서브 클래스 및 제품 목록 상호 작용 (33) 목록

다음 하위 범주의 주요 업적 목록에 전환 다음을 클릭합니다

전송 하위 범주의 ID 범주를 통과해야하는 정보의 목록 아래 오른쪽에 엎드려, 그래서 ID의 왼쪽에있는 카테고리에 필요한 것은 제공해야

인터페이스는 웹 사이트에서 찾아보실 수 있습니다 :

https://jspang.com/posts/2019/03/01/flutter-shop.html#%E5%90%8E%E7%AB%AF%E6%8E%A5%E5%8F%A3api%E6%96 % 87 % E6의 %의 %의 A1 A3

이드의 넓은 종류를 제공

우리는 시간의 왼쪽에있는 카테고리를 클릭하면, 우리는 현재 카테고리 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, 인덱스) 
              ] 
            ) 
          ], 
        ) 
      ) 
    ); 
  } 
}

.

추천

출처www.cnblogs.com/crazycode2/p/11442623.html