Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

购物车的图标嵌套在statck组件里面

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

外层套了一个stack组件

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

数量我们需要用Provide

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

 

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

返回一个container来做样式

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

气泡效果,中间是个数字外面 是一个圆

如果想组成一个圆的形式,内边距就必须用formLRB这种形式

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

 

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

 

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

点击加入购物车后,数量发生变化provide/cart.dart

provide/cart.dart

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

 

效果展示:

Flutter实战视频-移动电商-63.购物车_详细页显示购物车商品数量

 

最终代码

 

details_page/detail.dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provide/provide.dart';
import '../../provide/cart.dart';
import '../../provide/details_info.dart';
import '../../provide/currentIndex.dart';

class DetailsBottom extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var goodsInfo=Provide.value<DetailsInfoProvide>(context).goodsInfo.data.goodInfo;//当前商品的详情
    var goodsId=goodsInfo.goodsId;
    var goodsName=goodsInfo.goodsName;
    var count=1;//默认为1
    var price=goodsInfo.presentPrice;
    var images=goodsInfo.image1;


    return Container(
      width: ScreenUtil().setWidth(750),
      color: Colors.white,
      height: ScreenUtil().setHeight(80),
      child: Row(
        children: <Widget>[
          Stack(
            children: <Widget>[
              InkWell(
                onTap: (){
                  Provide.value<CurrentIndexProvide>(context).changeIndex(2);
                  Navigator.pop(context);
                },
                child: Container(
                  width: ScreenUtil().setWidth(110),
                  alignment: Alignment.center,
                  child: Icon(
                    Icons.shopping_cart,
                    size:35,//图标没有自适应 要是设置size的大小
                    color: Colors.red,
                  ),
                ),            
              ),
              Provide<CartProvide>(
                builder: (context,child,val){
                  int goodsCount = Provide.value<CartProvide>(context).allGoodsCount;
                  return Positioned(
                    top: 0,
                    right: 10,
                    child: Container(
                      padding: EdgeInsets.fromLTRB(6, 3, 6, 3),
                      decoration: BoxDecoration(
                        color: Colors.pink,
                        border: Border.all(width: 2,color: Colors.white),
                        borderRadius: BorderRadius.circular(12.0),//圆角
                      ),
                      child: Text(
                        '${goodsCount}',
                        style: TextStyle(
                          color: Colors.white,
                          fontSize: ScreenUtil().setSp(22)
                        ),
                      ),
                    ),
                  );
                },
              )
            ],
          ),
          
          InkWell(
            onTap: () async{
              await Provide.value<CartProvide>(context).save(goodsId, goodsName, count, price, images);
            },
            child: Container(
              alignment: Alignment.center,
              width: ScreenUtil().setWidth(320),//750 - 110 再除以2 评分
              height: ScreenUtil().setHeight(80),
              color: Colors.green,
              child: Text(
                '加入购物车',
                style:TextStyle(color:Colors.white,fontSize: ScreenUtil().setSp(28)),
              ),
            ),
          ),
          InkWell(
            onTap: () async{
              await Provide.value<CartProvide>(context).remove();
            },
            child: Container(
              alignment: Alignment.center,
              width: ScreenUtil().setWidth(320),//750 - 110 再除以2 评分
              height: ScreenUtil().setHeight(80),
              color: Colors.red,
              child: Text(
                '立即购买',
                style:TextStyle(color:Colors.white,fontSize: ScreenUtil().setSp(28)),
              ),
            ),
          )
        ],
      ),
    );
  }
}
View Code

相关文章:

  • 2021-06-29
  • 2021-12-19
  • 2021-04-07
  • 2022-12-23
  • 2021-12-04
  • 2021-07-01
  • 2021-12-29
  • 2021-10-13
猜你喜欢
  • 2022-02-05
  • 2021-10-07
  • 2021-11-21
  • 2022-01-28
  • 2021-12-15
  • 2021-06-18
  • 2021-12-24
相关资源
相似解决方案