美文网首页
13.列表页分类列表

13.列表页分类列表

作者: 冰点雨 | 来源:发表于2019-12-24 16:29 被阅读0次
    8c99df70f245798ec3126457cd1d8c0.png

    https://javiercbk.github.io/json_to_dart/
    这个链接可以由json格式自动生成model

    大概看看就行

    class CategoryModel {
      String code;
      String message;
      List<Data> data;
    
      CategoryModel({this.code, this.message, this.data});
    
      CategoryModel.fromJson(Map<String, dynamic> json) {
        code = json['code'];
        message = json['message'];
        if (json['data'] != null) {
          data = new List<Data>();
          json['data'].forEach((v) {
            data.add(new Data.fromJson(v));
          });
        }
      }
    
      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        data['code'] = this.code;
        data['message'] = this.message;
        if (this.data != null) {
          data['data'] = this.data.map((v) => v.toJson()).toList();
        }
        return data;
      }
    }
    
    class Data {
      String mallCategoryId;
      String mallCategoryName;
      List<BxMallSubDto> bxMallSubDto;
      Null comments;
      String image;
    
      Data(
          {this.mallCategoryId,
            this.mallCategoryName,
            this.bxMallSubDto,
            this.comments,
            this.image});
    
      Data.fromJson(Map<String, dynamic> json) {
        mallCategoryId = json['mallCategoryId'];
        mallCategoryName = json['mallCategoryName'];
        if (json['bxMallSubDto'] != null) {
          bxMallSubDto = new List<BxMallSubDto>();
          json['bxMallSubDto'].forEach((v) {
            bxMallSubDto.add(new BxMallSubDto.fromJson(v));
          });
        }
        comments = json['comments'];
        image = json['image'];
      }
    
      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        data['mallCategoryId'] = this.mallCategoryId;
        data['mallCategoryName'] = this.mallCategoryName;
        if (this.bxMallSubDto != null) {
          data['bxMallSubDto'] = this.bxMallSubDto.map((v) => v.toJson()).toList();
        }
        data['comments'] = this.comments;
        data['image'] = this.image;
        return data;
      }
    }
    
    class BxMallSubDto {
      String mallSubId;
      String mallCategoryId;
      String mallSubName;
      String comments;
    
      BxMallSubDto(
          {this.mallSubId, this.mallCategoryId, this.mallSubName, this.comments});
    
      BxMallSubDto.fromJson(Map<String, dynamic> json) {
        mallSubId = json['mallSubId'];
        mallCategoryId = json['mallCategoryId'];
        mallSubName = json['mallSubName'];
        comments = json['comments'];
      }
    
      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        data['mallSubId'] = this.mallSubId;
        data['mallCategoryId'] = this.mallCategoryId;
        data['mallSubName'] = this.mallSubName;
        data['comments'] = this.comments;
        return data;
      }
    }
    

    这里使用类的形式建立一个动态菜单,所以用快捷键stful,快速建立了一个名字为LeftCategoryNav的StatefulWidget。并声明了一个List数据,起名就叫list。具体代码如下:

    //左侧导航菜单
    class LeftCategoryNav extends StatefulWidget {
    
      _LeftCategoryNavState createState() => _LeftCategoryNavState();
    }
    
    class _LeftCategoryNavState extends State<LeftCategoryNav> {
       List list=[];
    
      @override
      Widget build(BuildContext context) {
        return Container();
      }
    }
    

    大类子项(相当于oc的cell)

    Widget _leftInkWel(int index){
        return InkWell(
          onTap: (){},
          child: Container(
            height: ScreenUtil().setHeight(100),
            padding:EdgeInsets.only(left:10,top:20),
            decoration: BoxDecoration(
              color: Colors.white,
              border:Border(
                bottom:BorderSide(width: 1,color:Colors.black12)
              )
            ),
            child: Text(list[index].mallCategoryName,style: TextStyle(fontSize:ScreenUtil().setSp(28)),),
          ),
        );
    }
    

    当子类别写好后,可以对build方法进行完善,build方法我们采用动态的ListView来写,代码如下:

    @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 _leftInkWel(index);
              },
            ),
      );
    }
    

    获取数据代码

    void _getCategory()async{
        await request('getCategory').then((val){
          var data = json.decode(val.toString());
          CategoryModel category = CategoryModel.fromJson(data);
          setState(() {
            list = category.data;
          });
        });
      }
    

    我们希望获取数据只在Widget初始化的时候进行,所以再重写一个initState方法。

    @override
      void initState() {
        _getCategory();
        super.initState();
      }
    

    全部代码

    import 'dart:convert';
    
    import 'package:flutter/material.dart';
    import 'package:flutter_screenutil/flutter_screenutil.dart';
    import 'package:flutter_shop/service/service_method.dart';
    import '../model/category.dart';
    
    
    class CategoryPage extends StatefulWidget {
      _CategoryPageState createState() => _CategoryPageState();
    }
    
    class _CategoryPageState extends State<CategoryPage> {
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text('分类页面'),
          ),
            body: Container(
              child: Row(
                children: <Widget>[
                  LeftCategoryNav()
                ],
              ),
            )
        );
      }
    }
    
    
    
    
    //左侧分类列表
    class LeftCategoryNav extends StatefulWidget {
    
      LeftCategoryNavState createState() => new LeftCategoryNavState();
    }
    
    class LeftCategoryNavState extends State<LeftCategoryNav> {
    
      List list = [];
    
      @override
      void initState() {
        _getCategory();
        super.initState();
      }
    
      @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,
              itemCount: 20,
              itemBuilder: (context, index) {
                return _leftInWel(index);
              }
          ),
        );
      }
    
    
      Widget _leftInWel(int index){
        return InkWell(
          onTap: (){},
          child: Container(
            height: ScreenUtil().setHeight(100),
            padding: EdgeInsets.only(left: 10,top: 20),
            decoration: BoxDecoration(
              color: Colors.white,
              border: Border(
                bottom: BorderSide(
                  width: 1,
                  color: Colors.black12,
                )
              )
            ),
            child: Text(
    //         list[index].mallCategoryName,
              '分类名称',
              style: TextStyle(
                fontSize: ScreenUtil().setSp(28),
              ),
            ),
    
          ),
        );
      }
    
    
    
      void _getCategory()async{
        await request('getCategory').then((val){
          var data = json.decode(val.toString());
          CategoryModel category = CategoryModel.fromJson(data);
          setState(() {
            list = category.data;
          });
        });
      }
    }
    

    相关文章

      网友评论

          本文标题:13.列表页分类列表

          本文链接:https://www.haomeiwen.com/subject/agdfoctx.html