Flutter-防京东商城项目-编写详情页添加购物车-27

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

代码文档

Flutter防京东商城源码(1-10)链接

Flutter防京东商城源码(11-20)链接

Flutter防京东商城源码(21-30)链接

Flutter防京东商城源码(31-46)链接

本章目标通过商品详情成功把商品添加到购物车,注意下面gif图片控制台打印的数据,成功添加进去,但是在购物车页面还没有显示出来。
请添加图片描述

1.复制一个一模一样的控件下来
在这里插入图片描述
CartNum源码

import 'package:flutter/material.dart';
import 'package:flutter_app/services/screenAdaper.dart';
import 'package:provider/provider.dart';
import '../../provider/Cart.dart';
class CartNum extends StatefulWidget {
  CartNum({Key key}) : super(key: key);

  _CartNumState createState() => _CartNumState();
}

class _CartNumState extends State<CartNum> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: ScreenAdaper.width(164),
      decoration:
      BoxDecoration(border: Border.all(width: 1, color: Colors.black12)),
      child: Row(
        children: <Widget>[
          _leftBtn(),
          _centerArea(),
          _rightBtn()
        ],
      ),
    );
  }

  //左侧按钮

  Widget _leftBtn() {
    return InkWell(
      onTap: () {},
      child: Container(
        alignment: Alignment.center,
        width: ScreenAdaper.width(45),
        height: ScreenAdaper.height(45),
        child: Text("-"),
      ),
    );
  }

  //右侧按钮
  Widget _rightBtn() {
    return InkWell(
      onTap: (){


      },
      child: Container(
        alignment: Alignment.center,
        width: ScreenAdaper.width(45),
        height: ScreenAdaper.height(45),
        child: Text("+"),
      ),
    );
  }

//中间
  Widget _centerArea() {
    return Container(
      alignment: Alignment.center,
      width: ScreenAdaper.width(70),
      decoration: BoxDecoration(
          border: Border(
            left: BorderSide(width: 1, color: Colors.black12),
            right: BorderSide(width: 1, color: Colors.black12),
          )),
      height: ScreenAdaper.height(45),
      child: Text("1"),
    );
  }
}

2.回到
在这里插入图片描述
导入

import 'package:flutter_app/pages/ProductContent/CartNum.dart';

增加下面的代码
在这里插入图片描述
在这里插入图片描述

child: Stack(
  children: <Widget>[
    Container(
      padding: EdgeInsets.all(ScreenAdaper.width(20)),
      child: ListView(
        children: <Widget>[
          Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: _getAttrWidget(setBottomState)),



//--------------------------------------------
          Divider(),
          Container(
            margin: EdgeInsets.only(top: 10),
            height: ScreenAdaper.height(80),
            child: InkWell(
              onTap: () {
                _attrBottomSheet();
              },
              child: Row(
                children: <Widget>[
                  Text("数量: ",
                      style: TextStyle(
                          fontWeight: FontWeight.bold)),
                  SizedBox(width: 10),
                  CartNum(this._productContent)
                ],
              ),
            ),
          )
  //--------------------------------------------






        
        ],
      ),
    ),

写完后会报错,先不用管
在这里插入图片描述

回到
在这里插入图片描述
模型里面增加属性需要加3个地方

//新增
int count;
String selectedAttr;

在这里插入图片描述

this.count,
this.selectedAttr

在这里插入图片描述

//新增
count=1;
selectedAttr='';

在这里插入图片描述

4.回到
在这里插入图片描述
导入

import 'package:flutter_app/model/ProductContentModel.dart';

4.1添加下面的代码
在这里插入图片描述

class CartNum extends StatefulWidget {


//--------------------------------------------
  ProductContentitem _productContent;
//--------------------------------------------  
  
  CartNum(this._productContent,{Key key}) : super(key: key);

  _CartNumState createState() => _CartNumState();
}

class _CartNumState extends State<CartNum> {




//--------------------------------------------
  ProductContentitem _productContent;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    this._productContent=widget._productContent;
  }
//--------------------------------------------  

4.2给 左侧 中间 右侧 部件赋值
在这里插入图片描述

if( this._productContent.count>1){
  setState(() {
    this._productContent.count=this._productContent.count-1;
  });
}

在这里插入图片描述

setState(() {
  this._productContent.count=this._productContent.count+1;
});

在这里插入图片描述

Text("${this._productContent.count}"),

5.创建一个新的文件
在这里插入图片描述

class CartServices{

  static addCart(item){
    //把对象转换成Map类型的数据
    item=CartServices.formatCartData(item);

    print(item);

//     {_id: 5a0425bc010e711234661439, title: 磨砂牛皮男休闲鞋-有属性, price: 688, selectedAttr: 牛皮 ,系带,黄色, count: 3, pic: public\upload\RinsvExKu7Ed-oc
// s_7W1DxYO.png, checked: true}


  }

  //过滤数据
  static formatCartData(item){
    final Map data = new Map<String, dynamic>();
    data['_id'] = item.sId;
    data['title'] = item.title;
    data['price'] = item.price;
    data['selectedAttr'] = item.selectedAttr;
    data['count'] = item.count;
    data['pic'] = item.pic;
    //是否选中
    data['checked'] = true;
    return data;
  }

}

回到
在这里插入图片描述

import 'package:flutter_app/services/CartServices.dart';

5.1初始化
在这里插入图片描述

setState(() {
  this._selectedValue = tempArr.join(',');




//--------------------------------------------
  //给筛选属性赋值
  this._productContent.selectedAttr=this._selectedValue;
  //--------------------------------------------



});

5.2添加购物车
在这里插入图片描述

child: JdButton(
  color: Color.fromRGBO(253, 1, 0, 0.9),
  text: "加入购物车",
  cb: () {




//--------------------------------------------
    CartServices.addCart(this._productContent);
    //关闭底部筛选属性
    Navigator.of(context).pop();
//--------------------------------------------




  },
),
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯汉栩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值