area_item_table.dart 4.21 KB
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/area.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/widgets/h_empty_view.dart';

class AreaItemTable extends StatefulWidget {
  final String currentArea; //当前选中区域名称
  final Area area;
  final ValueChanged selectCallback;
  final bool showBadge;

  AreaItemTable(this.area, this.currentArea, this.selectCallback,
      {this.showBadge = true});

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new AreaItemTableState();
  }
}

class AreaItemTableState extends State<AreaItemTable> {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    Area area = widget.area;
    bool isSelected = area.name == widget.currentArea;
    return GestureDetector(
        onTap: () {
          if (widget.selectCallback != null) {
            widget.selectCallback(widget.area);
          }
        },
        child: Stack(
          overflow: Overflow.visible,
          alignment: Alignment.topLeft,
          children: <Widget>[
            Container(
              width: ScreenUtil().setWidth(104 * 2),
              height: ScreenUtil().setWidth(80),
              margin: EdgeInsets.only(
                right: ScreenUtil().setWidth(20),
                top: ScreenUtil().setWidth(20),
              ),
              padding: EdgeInsets.symmetric(
                  horizontal: ScreenUtil().setWidth(20),
                  vertical: ScreenUtil().setWidth(10)),
              alignment: Alignment.center,
              decoration: BoxDecoration(
                  // borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10)),
                  color: isSelected
                      ? MyColours.color_199095
                      : MyColours.color_ffffff,
                  border: Border.all(
                      color: MyColours.color_E0E0E0,
                      width: ScreenUtil().setWidth(2))),
              child: Text(
                area.name,
                overflow: TextOverflow.ellipsis,
                style: TextStyle(
                    color: isSelected
                        ? MyColours.color_ffffff
                        : MyColours.color_333333,
                    fontSize: ScreenUtil().setSp(28),
                    decoration: TextDecoration.none,
                    fontWeight: FontWeight.normal),
              ),
            ),
            !widget.showBadge
                ? SizedBox()
                : area.count == -1
                    ? Container()
                    : Positioned(
                        right: ScreenUtil().setWidth(12),
                        top: ScreenUtil().setWidth(6),
                        child: Container(
                          padding: EdgeInsets.symmetric(
                              vertical: ScreenUtil().setWidth(6),
                              horizontal: ScreenUtil().setWidth(4)),
                          // width: ScreenUtil().setWidth(78),
                          // height: ScreenUtil().setWidth(30),
                          alignment: Alignment.center,
                          decoration: BoxDecoration(
                            color: area.count <= 0
                                ? MyColours.color_999999
                                : MyColours.color_199095,
                            // borderRadius: BorderRadius.only(
                            //     topLeft: Radius.circular(ScreenUtil().setWidth(10)),
                            //     topRight: Radius.circular(ScreenUtil().setWidth(15)),
                            //     bottomRight:
                            //         Radius.circular(ScreenUtil().setWidth(15)))
                          ),
                          child: Text(area.count <= 0 ? "满座" : "${area.count}",
                              style: TextStyle(
                                  color: MyColours.color_ffffff,
                                  fontSize: ScreenUtil().setSp(26),
                                  decoration: TextDecoration.none,
                                  fontWeight: FontWeight.normal)),
                        ),
                      ),
          ],
        ));
  }
}