import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
import 'package:flutter_picker/flutter_picker.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:liftmanager/internal/bbs/bbs_router.dart';
import 'package:liftmanager/internal/bbs/model/banner_model.dart' as banner;
import 'package:liftmanager/internal/bbs/model/mix_model.dart';
import 'package:liftmanager/internal/bbs/model/search_model.dart';
import 'package:liftmanager/internal/means/page/means_pdf.dart';
import 'package:liftmanager/internal/news/model/news_comm_entity.dart';
import 'package:liftmanager/internal/news/news_router.dart';
import 'package:liftmanager/internal/work/work_router.dart';
import 'package:liftmanager/res/iconfont.dart';
import 'package:liftmanager/res/resources.dart';
import 'package:liftmanager/routers/fluro_navigator.dart';
import 'package:liftmanager/utils/image_utils.dart';
import 'package:liftmanager/utils/theme_utils.dart';
import 'package:liftmanager/utils/time_format.dart';
import 'package:liftmanager/utils/utils.dart';
import 'package:liftmanager/widgets/load_image.dart';
import 'package:path_provider/path_provider.dart';

class SwipeWidget extends StatelessWidget {
  const SwipeWidget({Key key, this.banners}) : super(key: key);
  final List<banner.Records> banners;

  // List<String> bannersLL = <String> [
  //   'tab_first/banner',
  //   'tab_first/banner',
  //   'tab_first/banner',
  // ];

  Future<File> createFileOfPdfUrl(url) async {
    final filename = url.substring(url.lastIndexOf("/") + 1);
    var request = await HttpClient().getUrl(Uri.parse(url));
    var response = await request.close();
    var bytes = await consolidateHttpClientResponseBytes(response);
    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = new File('$dir/$filename');
    await file.writeAsBytes(bytes);
    return file;
  }

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;
    double height = 180;
    return Container(
        width: width,
        height: height,
        child: ClipRRect(
          borderRadius: BorderRadius.all(Radius.circular(10)),
          child: Swiper(
            index: 0,
            itemBuilder: (BuildContext context, index) {
              return GestureDetector(
                onTap: () {
                  if (banners[index].jumpType == 2) {
                    print('${banners[index].jumpType}');
                    NavigatorUtils.push(
                        context,
                        "${WorkRouter.webview}?title=" +
                            Uri.encodeComponent("详情") +
                            "&url=" +
                            Uri.encodeComponent(banners[index].url));
                  } else if (banners[index].jumpType == 1) {
                    print('777');
                    createFileOfPdfUrl(banners[index].url).then((f) {
                      // setState(() {
                      // pathPDF = f.path;
                      Navigator.push(
                          context,
                          MaterialPageRoute(
                              builder: (context) =>
                                  PDFScreen(f.path, "null", "null")));
                      // });
                    });
                  }
                },
                child: Container(
                  width: width,
                  height: height,
                  key: UniqueKey(),
                  // margin:EdgeInsets.only(left:15,right:15),
                  child: LoadNetworkImage(
                    banners[index].image,
                    width: width,
                    height: height,
                    fit: BoxFit.fill,
                  ),
                ),
              );
            },
            pagination: SwiperPagination(
              builder: RectSwiperPaginationBuilder(
                color: Colors.grey,
                activeColor: Colors.white,
                size: Size(12, 10),
                activeSize: Size(16, 10),
              ),
            ),
            itemCount: banners.length,
            scrollDirection: Axis.horizontal,
            autoplay: true,
            onTap: (index) {
              // print(index);
            },
          ),
        ));
  }
}

class Diagnosis extends StatelessWidget {
  Diagnosis({Key key, this.fun}) : super(key: key);
  List<dynamic> diagnosisObj = [
    {
      "title": "快速问诊",
      "img": "tab_first/Diagnosis_first",
      "desc": "搜电梯品牌 找专家咨询",
    },
    {
      "title": "出诊",
      "img": "tab_first/Diagnosis_second",
      "desc": "在线预约 上门服务",
    },
  ];
  Function fun;

  List<Widget> listWidget(context) => diagnosisObj.asMap().keys.map((i) {
        return GestureDetector(
          child: Container(
            color: ThemeUtils.getTabsBg(context),
            padding: EdgeInsets.only(
                left: 15,
                right: 15,
                // top: ScreenUtil().setHeight(15),
                bottom: 20),
            child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Row(
                    children: <Widget>[
                      LoadAssetImage(
                        // image: AssetImage(i['img']),
                        diagnosisObj[i]["img"],
                        width: 40,
                        height: 40,
                        // alignment: Alignment.centerLeft,
                      ),
                      SizedBox(width: 10),
                      Container(
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: <Widget>[
                            Text(
                              diagnosisObj[i]["title"],
                              style: TextStyle(fontSize: 22),
                              textAlign: TextAlign.start,
                            ),
                            Text(
                              diagnosisObj[i]["desc"],
                              style: TextStyle(
                                  color: Color(0xff999999), fontSize: 14),
                              textAlign: TextAlign.start,
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                  Container(
                    child: Icon(
                      Icons.keyboard_arrow_right,
                      color: Color(0xffcccccc),
                    ),
                  )
                ]),
          ),
          onTap: () {
            if (i == 0 &&
                !Utils.getAuthByRouter(context, 'quick_consultation')) {
              return false;
            }
            if (i == 1 && !Utils.getAuthByRouter(context, 'quich_visit')) {
              return false;
            }
            String index = i.toString();
            NavigatorUtils.push(context, "${BbsRouter.brandPage}?index=$index");
          },
        );
      }).toList();

  @override
  Widget build(BuildContext context) {
    return Card(
      margin: EdgeInsets.all(ScreenUtil().setWidth(10)),

      //设置圆角度，也可以不设置有默认值
      shape: RoundedRectangleBorder(
        //形状
        //修改圆角
        borderRadius: BorderRadius.all(Radius.circular(10)),
      ),
      //阴影颜色
      // color: Colors.orangeAccent,
      //阴影高度
      elevation: 1.0,
      child: ClipRRect(
        borderRadius: BorderRadius.all(Radius.circular(10)),
        child: Container(
          padding: EdgeInsets.only(top: 20),
          child: Column(children: listWidget(context)),
        ),
      ),
    );
  }
}

class QuestionCell extends StatelessWidget {
  QuestionCell({this.item});

  final dynamic item;

  @override
  Widget build(BuildContext context) {
    if (item is Records || item is InfoList) {
    } else {
      return Container();
      // data = NewsItems();
    }
    return GestureDetector(
      child: Container(
        padding: EdgeInsets.only(
          top: 10,
          bottom: 10,
        ),
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text(
                "${item.title ?? ''}",
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: 14,
                  color: Color(0xff333333),
                ),
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
              ),
              SizedBox(
                height: 5,
              ),
              Row(
                children: <Widget>[
                  ClipRRect(
                      borderRadius: BorderRadius.circular(15),
                      child: Container(
                        child: LoadNetworkImage(
                          item?.avatarUrl,
                          // fit: BoxFit.fitWidth,
                          width: 31,
                          height: 31,
                        ),
                      )),
                  SizedBox(
                    width: 5,
                  ),
                  Text(
                    item.userName ?? '',
                    style: TextStyle(
                      fontSize: 14,
                      fontWeight: FontWeight.w500,
                      color: Color(0xff565A64),
                    ),
                  ),
                  SizedBox(width: 5),
                  _clipText(
                      title: 'LV1',
                      bgcolor: Color(0xffFD5E62),
                      textcolor: Colors.white),
                ],
              ),
              SizedBox(
                height: 10,
              ),
              Text(
                item.expression ?? '',
                textAlign: TextAlign.left,
                style: TextStyle(
                  color: Color(0xff999999),
                  fontSize: 12,
                ),
                maxLines: 2,
                overflow: TextOverflow.ellipsis,
              ),
              Container(
                padding: EdgeInsets.only(
                    top: ScreenUtil().setHeight(5),
                    bottom: ScreenUtil().setHeight(5)),
                child: Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: item.imgs != null && item.imgs.isNotEmpty
                        ? List<Widget>.from(
                            item.imgs.split(",").asMap().keys.map((index) {
                            // print(item);
                            return index < 3
                                ? Container(
                                    padding:
                                        index < item.imgs.split(",").length - 1
                                            ? EdgeInsets.only(right: 6)
                                            : EdgeInsets.only(right: 0),
                                    // color:Colors.red,
                                    // decoration: BoxDecoration(
                                    //   borderRadius: BorderRadius.circular(20.0),
                                    // ),
                                    child: ClipRRect(
                                      borderRadius: BorderRadius.circular(10),
                                      child: LoadNetworkImage(
                                        item.imgs.split(",")[index],
                                        fit: BoxFit.fill,
                                        height: ScreenUtil().setWidth(80),
                                        width: ScreenUtil().setWidth(110),
                                        isWater: true,
                                      ),
                                    ),
                                  )
                                : Container(child: null);
                          }).toList())
                        : <Widget>[]),
              ),
              Row(
                children: [
                  _clipText(
                      title: "${item.brandName ?? ''}",
                      bgcolor: Color.fromRGBO(67, 141, 250, .16),
                      textcolor: Color(0xFF5887FF)),
                  Expanded(child: Container()),
                  Text(
                    "${item.browseNum ?? '0'}浏览·${item.likeNum ?? '0'}赞",
                    textAlign: TextAlign.right,
                    style: TextStyle(
                      color: Color(0xFFCCCCCC),
                      fontSize: 11,
                    ),
                  )
                ],
              ),
              SizedBox(
                height: 10,
              ),
            ]),
      ),
      onTap: () {
        NavigatorUtils.push(
            context, "${BbsRouter.questionDetail}?id=${item.id.toString()}");
      },
    );
  }

  _clipText({title, bgcolor, textcolor}) {
    return ClipRRect(
      borderRadius: BorderRadius.all(Radius.circular(3)),
      child: Container(
        color: bgcolor,
        padding: EdgeInsets.all(3),
        alignment: Alignment.center,
        child: Text(
          title,
          style: TextStyle(fontSize: 11, color: textcolor),
        ),
      ),
    );
  }
}

class HotQuestion extends StatelessWidget {
  const HotQuestion({Key key, this.initList}) : super(key: key);
  final List<dynamic> initList;

  @override
  Widget build(BuildContext context) {
    List<Widget> widgetList = [];
    for (int i = 0; i < initList.length; i++) {
      widgetList.add(Column(children: [
        QuestionCell(item: initList[i]),
        if (i != initList.length - 1) Divider(),
      ]));
    }

    return Container(
      color: Colors.white,
      padding: EdgeInsets.symmetric(horizontal: 10),
      child: Column(children: widgetList),
    );
  }
}

class HotClass {
  const HotClass({Key key, this.videoList});

  final List<dynamic> videoList;

  List<Widget> listWidget(context) => videoList.asMap().keys.map((i) {
        return GestureDetector(
          child: Container(
              child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                Expanded(
                    flex: 1,
                    child: AspectRatio(
                        aspectRatio: 177 / 113,
                        child: Stack(
                          alignment: Alignment.center,
                          children: <Widget>[
                            Container(
                              // color: Colors.red,
                              child: SizedBox.expand(
                                  child: ClipRRect(
                                borderRadius: BorderRadius.circular(10),
                                child: LoadNetworkImage(
                                  videoList[i].cover,
                                  isWater: true,
                                ),
                              )),
                            ),
                            Image.asset(ImageUtils.getImgPath('play_button')),
                          ],
                        ))),
                Container(
                    padding: EdgeInsets.only(top: 5, left: 5),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          videoList[i].title ?? "",
                          textAlign: TextAlign.left,
                          style:
                              TextStyle(fontSize: 14, color: Color(0xff565A64)),
                          maxLines: 1,
                          overflow: TextOverflow.ellipsis,
                        ),
                        Text(
                          videoList[i].descr ?? "",
                          textAlign: TextAlign.left,
                          overflow: TextOverflow.ellipsis,
                          maxLines: 1,
                          style: TextStyle(
                            fontSize: 12,
                            color: Color(0xff9a9a9a),
                          ),
                        ),
                        SizedBox(height: 10),
                        Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          children: [
                            Container(
                                padding: EdgeInsets.all(3),
                                decoration: BoxDecoration(
                                  color: Color(0x33448EFA),
                                  borderRadius: BorderRadius.circular(4),
                                ),
                                child: Text(
                                  videoList[i].brandName != null
                                      ? videoList[i].brandName.toString()
                                      : "",
                                  textAlign: TextAlign.left,
                                  overflow: TextOverflow.ellipsis,
                                  style: TextStyle(
                                    fontSize: 11,
                                    color: Color(0xff5888FF),
                                  ),
                                )),
                            Text(
                              "${videoList[i].browseNum ?? '0'}浏览·${videoList[i].likeNum ?? '0'}赞",
                              textAlign: TextAlign.left,
                              maxLines: 1,
                              overflow: TextOverflow.ellipsis,
                              style: TextStyle(
                                fontSize: 11,
                                color: Color(0xffCCCCCC),
                              ),
                            ),
                          ],
                        ),
                      ],
                    ))
              ])),
          onTap: () {
            print(i);
            NavigatorUtils.push(context,
                "${BbsRouter.videoDetail}?id=${videoList[i].id.toString()}");
          },
        );
      }).toList();

  List<Widget> listVideo(context) => videoList.map((e) {
        return VideoCell(e);
      }).toList();
}

class VideoCell extends StatelessWidget {
  dynamic data;

  VideoCell(this.data);

  @override
  Widget build(Object context) {
    if (data is Records || data is InfoList) {
    } else {
      return Container();
      // data = NewsItems();
    }
    return GestureDetector(
      child: Container(
          height: 116,
          padding: EdgeInsets.symmetric(vertical: 10),
          decoration: BoxDecoration(
            border: Border(
              bottom: BorderSide(width: 0.5, color: Colours.line),
            ),
          ),
          child: LayoutBuilder(
              builder: (context, constraints) => Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: <Widget>[
                        Container(
                            // padding: EdgeInsets.only(top: 5, left: 5),
                            width: constraints.maxWidth - 167,
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Text(
                                  data.title ?? "",
                                  textAlign: TextAlign.left,
                                  style: TextStyle(
                                      fontSize: 14, color: Color(0xff565A64)),
                                  maxLines: 1,
                                  overflow: TextOverflow.ellipsis,
                                ),
                                Expanded(
                                    child: Text(
                                  data.descr ?? "",
                                  textAlign: TextAlign.left,
                                  overflow: TextOverflow.ellipsis,
                                  maxLines: 1,
                                  style: TextStyle(
                                    fontSize: 12,
                                    color: Color(0xff9a9a9a),
                                  ),
                                )),
                                Row(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: [
                                    Container(
                                        padding: EdgeInsets.all(3),
                                        decoration: BoxDecoration(
                                          color: Color(0x33448EFA),
                                        ),
                                        child: Text(
                                          data.brandName != null
                                              ? data.brandName.toString()
                                              : "",
                                          textAlign: TextAlign.left,
                                          overflow: TextOverflow.ellipsis,
                                          style: TextStyle(
                                            fontSize: 11,
                                            color: Color(0xff5888FF),
                                          ),
                                        )),
                                    Text(
                                      "${data.browseNum ?? '0'}浏览·${data.likeNum ?? '0'}赞",
                                      textAlign: TextAlign.left,
                                      maxLines: 1,
                                      overflow: TextOverflow.ellipsis,
                                      style: TextStyle(
                                        fontSize: 11,
                                        color: Color(0xffCCCCCC),
                                      ),
                                    ),
                                  ],
                                ),
                              ],
                            )),
                        Stack(
                          alignment: Alignment.center,
                          children: <Widget>[
                            SizedBox(
                                width: 147,
                                height: 96,
                                child: ClipRRect(
                                  borderRadius: BorderRadius.circular(10),
                                  child: LoadNetworkImage(
                                    data.cover,
                                    isWater: true,
                                  ),
                                )),
                            Image.asset(ImageUtils.getImgPath('play_button')),
                          ],
                        ),
                      ]))),
      onTap: () {
        NavigatorUtils.push(
            context, "${BbsRouter.videoDetail}?id=${data.id.toString()}");
      },
    );
  }
}

class HotProduct extends StatelessWidget {
  HotProduct({Key key, this.productList}) : super(key: key);
  final List<dynamic> productList;

  List<Widget> listWidget(context) => productList.map((i) {
        return ProductCell(i);
      }).toList();

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(children: listWidget(context)),
    );
  }
}

class ProductCell extends StatelessWidget {
  final dynamic data;

  ProductCell(this.data);

  @override
  Widget build(Object context) {
    if (data is Records || data is InfoList) {
    } else {
      return Container();
      // data = NewsItems();
    }
    return InkWell(
      child: Container(
        height: 110,
        padding: EdgeInsets.only(left: 0, right: 0, top: 10, bottom: 10),
        decoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(color: Color(0xffF9F9F9)),
          ),
        ),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            ClipRRect(
              borderRadius: BorderRadius.circular(10),
              child: LoadNetworkImage(
                (data?.imgs ?? '').split(",")[0],
                width: ScreenUtil().setWidth(90),
                height: ScreenUtil().setWidth(90),
                isWater: true,
              ),
            ),
            SizedBox(
              width: 10,
            ),
            Expanded(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Container(
                      child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Expanded(
                        child: Text(
                          data.name ?? "",
                          textAlign: TextAlign.left,
                          // overflow: TextOverflow.ellipsis,
                          style: TextStyle(
                            fontSize: 14,
                          ),
                          maxLines: 1,
                          overflow: TextOverflow.ellipsis,
                        ),
                      ),
                      if (data.discountPrice != null)
                        Text(
                          '¥${data.discountPrice.toInt()}',
                          style: TextStyle(
                            color: Color(0xffFF5C00),
                            fontSize: 16,
                          ),
                        ),
                      if (data.discountPrice == null)
                        Text(
                          '¥${data.price?.toInt() ?? '暂无'}',
                          style: TextStyle(
                            color: Color(0xffFF5C00),
                            fontSize: 16,
                          ),
                        ),
                      if (data.discountPrice != null)
                        Text(
                          '¥${data.price.toInt()}',
                          style: TextStyle(
                            color: Color(0xff999999),
                            fontSize: 11,
                            decoration: TextDecoration.lineThrough,
                          ),
                        ),
                    ],
                  )),
                  if (data.brandName != null)
                    Container(
                      padding: EdgeInsets.all(3),
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(3),
                        color: Color(0x33448EFA),
                      ),
                      child: Text(
                        data.brandName,
                        textAlign: TextAlign.left,
                        style: TextStyle(
                          fontSize: 11,
                          color: Color(0xff5887FF),
                        ),
                        maxLines: 1,
                        overflow: TextOverflow.ellipsis,
                      ),
                    ),
                  Spacer(),
                  Container(
                    child: Row(
                      children: [
                        Icon(Iconfont.shangjia, size: 15, color: Colors.orange),
                        SizedBox(width: 5),
                        Text(
                          "${data.manufacturer}",
                          textAlign: TextAlign.left,
                          style: TextStyle(
                            fontSize: 11,
                            color: Color(0xff666666),
                          ),
                          maxLines: 1,
                          overflow: TextOverflow.ellipsis,
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
      onTap: () {
        NavigatorUtils.push(
            context, "${BbsRouter.productDetail}?id=${data.id.toString()}");
      },
    );
  }
}

class HotNews extends StatelessWidget {
  HotNews({Key key, this.newsList}) : super(key: key);
  final List<dynamic> newsList;

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(
          children: newsList.map((i) {
        return NewsCell(i);
      }).toList()),
    );
  }
}

class NewsCell extends StatelessWidget {
  final dynamic data;

  NewsCell(this.data);

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;
    if (data is NewsItems || data is InfoList) {
    } else {
      return Container();
      // data = NewsItems();
    }
    return InkWell(
      onTap: () {
        NavigatorUtils.push(context, "${NewsRouter.newsDetail}?id=${data.id}");
      },
      child: Container(
        width: width,
        padding: EdgeInsets.symmetric(vertical: 10),
        decoration: BoxDecoration(
            border: Border(
              bottom: BorderSide(width: 1, color: Colours.line),
            ),
            color: ThemeUtils.getTabsBg(context)),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Text(
              data.title,
              style: TextStyle(fontSize: 15),
              //                                        overflow: TextOverflow.ellipsis,
            ),
            Gaps.vGap12,
            Text(
              "${data?.releaseUser ?? ''}·阅读${data?.lookNum ?? 0}次·点赞${data?.likeNum ?? 0}",
              style: TextStyle(fontSize: 11, color: Colours.text_gray),
            ),
          ],
        ),
      ),
    );
  }
}

class HotPosition extends StatelessWidget {
  HotPosition({Key key, this.positionList}) : super(key: key);
  final List<dynamic> positionList;

  List<Widget> listWidget(context) => positionList.map((i) {
        return PositionCell(i);
      }).toList();

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Column(children: listWidget(context)),
    );
  }
}

class PositionCell extends StatelessWidget {
  final dynamic data;

  PositionCell(this.data);

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;

    if (data is Records || data is InfoList) {
    } else {
      return Container();
      // data = NewsItems();
    }

    return InkWell(
      child: Container(
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Container(
                width: width,
                padding: EdgeInsets.only(bottom: ScreenUtil().setHeight(5)),
                child: Row(
                  children: <Widget>[
                    if (data.hotFlag == 1) ...[
                      Container(
                        padding: EdgeInsets.all(2),
                        decoration: BoxDecoration(
                          color: Color(0xffFBC247),
                          borderRadius: BorderRadius.only(
                            topLeft: Radius.circular(5),
                            bottomRight: Radius.circular(5),
                          ),
                        ),
                        child: Text(
                          '热招',
                          style: TextStyle(
                            color: Colors.white,
                            fontSize: 11,
                          ),
                        ),
                      ),
                      SizedBox(
                        width: 5,
                      ),
                    ],
                    Container(
                      child: Text(
                        data.job ?? "",
                        style: TextStyle(
                          fontSize: 14,
                          color: Color(0xff565A64),
                          fontWeight: FontWeight.w600,
                        ),
                        overflow: TextOverflow.ellipsis,
                      ),
                    ),
                    Spacer(),
                    Container(
                      width: width * 0.4,
                      child: Text(
                        '${data.lowerSalary?.toInt()}-${data.upperSalary?.toInt()}/月',
                        textAlign: TextAlign.right,
                        style: TextStyle(
                          fontSize: 14,
                          color: Color(0xffFF5C00),
                        ),
                        overflow: TextOverflow.ellipsis,
                      ),
                    )
                  ],
                ),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Text(
                    "${data.provinceName ?? ''}${data.cityName ?? ''}",
                    textAlign: TextAlign.right,
                    style: TextStyle(
                      fontSize: 13,
                      color: Color(0xff9A9A9A),
                    ),
                    overflow: TextOverflow.ellipsis,
                  ),
                  Text(
                    DateUtils.instance.getFormartData(
                        timeSamp: data.createTime, format: "yyyy-MM-dd"),
                    textAlign: TextAlign.left,
                    style: TextStyle(
                      fontSize: 12,
                      color: Color(0xff9A9A9A),
                    ),
                  ),
                ],
              ),
              Text(
                data.company?.name ?? "",
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: 14,
                  color: Color(0xff666666),
                ),
                overflow: TextOverflow.ellipsis,
              ),
              SizedBox(
                height: 10,
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Text(
                    '${data.company?.corporator ?? ""} ${data.company?.telephone ?? ""}',
                    textAlign: TextAlign.left,
                    style: TextStyle(
                      fontSize: 13,
                      color: Color(0xff565A64),
                    ),
                    overflow: TextOverflow.ellipsis,
                  ),
                  Spacer(),
                  Container(
                    alignment: Alignment.center,
                    padding: EdgeInsets.symmetric(horizontal: 15),
                    height: 25,
                    decoration: BoxDecoration(
                      color: Color.fromRGBO(67, 141, 250, .16),
                      borderRadius: BorderRadius.circular(12),
                    ),
                    child: Text(
                      '申请',
                      style: TextStyle(color: Color(0xff5888FF), fontSize: 13),
                    ),
                  ),
                ],
              ),
              SizedBox(
                height: 10,
              ),
              Divider(thickness: 0.5, height: 0.5),
              SizedBox(
                height: 10,
              ),
            ]),
      ),
      onTap: () {
        NavigatorUtils.push(
            context, "${BbsRouter.positionDetail}?id=${data.id}");
      },
    );
  }
}

class LabelTitle extends StatelessWidget {
  LabelTitle(
      {Key key,
      this.title,
      this.userTap,
      this.isMore = true,
      this.hasArrow = false,
      this.titleStyle})
      : super(key: key);
  final String title;
  final Function userTap;
  final bool isMore;
  final bool hasArrow;
  TextStyle titleStyle;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        userTap();
      },
      child: Container(
        height: ScreenUtil().setHeight(45),
        padding: EdgeInsets.symmetric(horizontal: 10),
        alignment: Alignment.centerLeft,
        decoration: BoxDecoration(
          color: ThemeUtils.getTabsBg(context),
          border: Border(
            bottom: BorderSide(
                width: 0.5, color: ThemeUtils.getDialogTextFieldColor(context)),
          ),
        ),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                Container(
                  decoration: BoxDecoration(
                      border: Border(
                          // left: BorderSide(width: 3, color: Colours.app_main),
                          )),
                  child: Text(
                    title,
                    style: titleStyle,
                  ),
                ),
              ],
            ),
            Container(
                child: Row(children: <Widget>[
              Text(
                isMore == true ? "更多" : '',
                style: TextStyle(
                    fontSize: ScreenUtil().setSp(12), color: Color(0xFF666666)),
              ),
              hasArrow
                  ? Container(
                      child: Images.arrowRight,
                    )
                  : Container(child: null)
            ]))
          ],
        ),
      ),
    );
  }
}

class CommonSectionHeader extends StatelessWidget {
  final String title;
  final double fontSize;
  bool isMust;

  CommonSectionHeader(
      {this.title = '', this.fontSize = 15, this.isMust = false});

  @override
  Widget build(BuildContext context) {
    return Container(
        child: Row(
      children: [
        Container(
          width: 2,
          height: 15,
          decoration: BoxDecoration(
            border: Border(left: BorderSide(width: 2, color: Colors.blue)),
          ),
        ),
        SizedBox(
          width: 10,
        ),
        Text(
          title,
          style: TextStyle(
            fontSize: fontSize,
            color: Color(0xff333333),
          ),
        ),
        isMust
            ? Text(
                '*',
                style: TextStyle(
                  fontSize: fontSize,
                  color: Colors.red,
                ),
              )
            : Container(),
      ],
    ));
  }
}

class SectionHeader extends StatelessWidget {
  final String title;
  final Function onTap;
  final bool showMore;

  SectionHeader({this.title, this.onTap, this.showMore = false});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        onTap: () {
          if (onTap != null) {
            onTap();
          }
        },
        child: Container(
            height: 40,
            child: Row(
              children: [
                Container(
                  height: 13,
                  width: 0,
                  decoration: BoxDecoration(
                    border: Border(
                      left: BorderSide(
                        width: 2,
                        color: Color(0xff568AFF),
                      ),
                    ),
                  ),
                ),
                SizedBox(
                  width: 10,
                ),
                Expanded(
                  child: Text(
                    title,
                    style: TextStyle(color: Color(0xff343434), fontSize: 15),
                  ),
                ),
                if (showMore)
                  Text(
                    '更多',
                    style: TextStyle(color: Color(0xff999999), fontSize: 12),
                  ),
                SizedBox(
                  width: 10,
                ),
              ],
            )));
  }
}

class FilterHeader extends StatelessWidget {
  final List<String> filterNameList;
  final Function(int index) onTap;
  final int activeIndex;

  FilterHeader({
    @required this.filterNameList,
    this.onTap,
    this.activeIndex = 0,
  });

  @override
  Widget build(BuildContext context) {
    var widgetList = [
      GestureDetector(
        child: Container(
          padding: EdgeInsets.symmetric(
            vertical: 13,
            // horizontal: 10,
          ),
          decoration: BoxDecoration(
            border: activeIndex == 0
                ? Border(
                    bottom: BorderSide(
                      width: 2,
                      color: Color(0xff568AFF),
                    ),
                  )
                : null,
          ),
          child: Text(
            '全部',
            style: TextStyle(
              color: Color(0xff343434),
              fontSize: 14,
            ),
          ),
        ),
        onTap: () {
          if (onTap != null) onTap(0);
        },
      ),
    ];

    if (filterNameList != null) {
      widgetList.addAll(
        filterNameList.map(
          (e) => GestureDetector(
            child: Container(
              padding: EdgeInsets.symmetric(
                vertical: 13,
                // horizontal: 10,
              ),
              decoration: BoxDecoration(
                border: activeIndex == (filterNameList.indexOf(e) + 1)
                    ? Border(
                        bottom: BorderSide(
                          width: 2,
                          color: Color(0xff568AFF),
                        ),
                      )
                    : null,
              ),
              child: Text(
                e,
                style: TextStyle(
                  color: Color(0xff343434),
                  fontSize: 14,
                ),
              ),
            ),
            onTap: () {
              var index = filterNameList.indexOf(e) + 1;
              if (onTap != null) onTap(index);
            },
          ),
        ),
      );
    }

    return Container(
      height: 45,
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: widgetList,
      ),
    );
  }
}

class CustomFilterHeader extends StatelessWidget {
  final List<String> filterNameList;
  final Function(int index) onTap;
  final int activeIndex;

  CustomFilterHeader({
    @required this.filterNameList,
    this.onTap,
    this.activeIndex,
  });

  @override
  Widget build(BuildContext context) {
    var widgetList = [
      LayoutId(
        id: 0,
        child: GestureDetector(
          child: Container(
            padding: EdgeInsets.symmetric(
              vertical: 13,
              // horizontal: 10,
            ),
            decoration: BoxDecoration(
              border: activeIndex == 0
                  ? Border(
                      bottom: BorderSide(
                        width: 2,
                        color: Color(0xff568AFF),
                      ),
                    )
                  : null,
            ),
            child: Text(
              '全部',
              style: TextStyle(
                color: Color(0xff343434),
                fontSize: 14,
              ),
            ),
          ),
          onTap: () {
            if (onTap != null) onTap(0);
          },
        ),
      ),
    ];

    if (filterNameList != null) {
      int loopCount = 0;

      for (var name in filterNameList) {
        var layoutId = ++loopCount;
        widgetList.add(
          LayoutId(
            id: layoutId,
            child: GestureDetector(
              child: Container(
                padding: EdgeInsets.symmetric(
                  vertical: 13,
                  // horizontal: 10,
                ),
                decoration: BoxDecoration(
                  border: activeIndex == layoutId
                      ? Border(
                          bottom: BorderSide(
                            width: 2,
                            color: Color(0xff568AFF),
                          ),
                        )
                      : null,
                ),
                child: Text(
                  name,
                  style: TextStyle(
                    color: Color(0xff343434),
                    fontSize: 14,
                  ),
                ),
              ),
              onTap: () {
                if (onTap != null) onTap(layoutId);
              },
            ),
          ),
        );
      }
    }

    return Container(
      height: 45,
      child: CustomMultiChildLayout(
        children: widgetList,
        delegate: CustomFilterHeaderLayoutDelegate(
          widgetList.map<int>((e) => e.id).toList(),
        ),
      ),
    );
  }
}

class CustomFilterHeaderLayoutDelegate extends MultiChildLayoutDelegate {
  List<int> childIds;

  CustomFilterHeaderLayoutDelegate(this.childIds);

  @override
  void performLayout(Size size) {
    Size leaderSize = Size.zero;

    if (hasChild(0)) {
      leaderSize = layoutChild(0, BoxConstraints.loose(size));
      positionChild(0, Offset.zero);
    }

    var subIds = childIds.sublist(1);
    const spacing = 20;
    const threshold = 0;
    var offset = Offset.zero;

    for (var id in subIds) {
      if (hasChild(id)) {
        offset = Offset(offset.dx + leaderSize.width + spacing, 0);

        leaderSize = layoutChild(
          id,
          BoxConstraints.loose(size),
        );

        if (size.width - offset.dx - leaderSize.width > threshold) {
          positionChild(id, offset);
        } else {
          positionChild(id, Offset.infinite);
        }
      }
    }
  }

  @override
  bool shouldRelayout(covariant MultiChildLayoutDelegate oldDelegate) {
    return false;
  }
}

class ChioseThis extends StatelessWidget {
  ChioseThis(
      {Key key,
      this.list,
      this.value,
      this.label,
      this.isMust: false,
      this.fun,
      this.labelText = '请选择'})
      : super(key: key);
  List<dynamic> list;
  String value;
  String label;
  bool isMust;
  Function fun;
  String labelText;

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;
    return InkWell(
      onTap: () {
        showModalBottomSheet(
            context: context,
            builder: (context) {
              return Container(
                height: 80,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: list.asMap().keys.map((index) {
                    return InkWell(
                      onTap: () {
                        fun(index);
                      },
                      child: Container(
                        width: width,
                        padding: EdgeInsets.only(
                            bottom: ScreenUtil().setWidth(10),
                            top: ScreenUtil().setWidth(5)),
                        decoration: BoxDecoration(
                          border: Border(
                            bottom: BorderSide(width: 0.5, color: Colours.line),
                          ),
                        ),
                        child: Text(
                          list[index],
                          style: TextStyle(
                              color: Color(0xff333333),
                              fontSize: ScreenUtil().setSp(16)),
                          textAlign: TextAlign.center,
                        ),
                      ),
                    );
                  }).toList(),
                ),
              );
            });
      },
      child: Container(
        padding: EdgeInsets.only(
            top: ScreenUtil().setWidth(15), bottom: ScreenUtil().setWidth(15)),
        margin: EdgeInsets.only(left: ScreenUtil().setWidth(15)),
        decoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(width: 0.5, color: Colours.line),
          ),
        ),
        child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Text(
                label,
                style: TextStyle(
                  color: Color(0xff222222),
                  // fontSize: ScreenUtil().setSp(14)
                ),
                textAlign: TextAlign.start,
              ),
              Offstage(
                offstage: !this.isMust,
                child: Text(
                  " *",
                  style: TextStyle(color: Colors.red),
                ),
              ),
              Expanded(flex: 1, child: Container()),
              value.isEmpty
                  ? Container(
                      child: Row(children: <Widget>[
                        Text(
                          labelText,
                          style: TextStyle(
                            color: Color(0xffcccccc),
                            // fontSize: ScreenUtil().setSp(14)
                          ),
                          textAlign: TextAlign.start,
                        ),
                        Container(
                          padding: EdgeInsets.only(top: 3),
                          child: Icon(
                            Icons.keyboard_arrow_right,
                            size: 20.0,
                            color: Color(0xffcccccc),
                          ),
                        ),
                        SizedBox(width: 10)
                      ]),
                    )
                  : Container(
                      padding:
                          EdgeInsets.only(right: ScreenUtil().setWidth(15)),
                      child: Row(children: <Widget>[
                        Text(
                          value,
                          style: TextStyle(
                              color: Color(0xff222222),
                              fontSize: ScreenUtil().setSp(14)),
                          textAlign: TextAlign.start,
                        ),
                      ]),
                    ),
            ]),
      ),
    );
  }
}

class DatePickerInputField extends StatelessWidget {
  DatePickerInputField(
      {Key key,
      this.value = '',
      this.label,
      this.isMust: false,
      this.onSelectionConfirmed,
      this.labelText = '请选择'})
      : super(key: key);
  final String value;
  final String label;
  final bool isMust;
  final Function(String birthday) onSelectionConfirmed;
  final String labelText;

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        DatePicker.showDatePicker(context,
            // pickerMode: DateTimePickerMode.date,
            dateFormat: 'yyyy-MM',
            locale: DateTimePickerLocale.zh_cn,
            // initialDateTime: DateTime.now(),
            maxDateTime: DateTime.now(),
            // onChange: (datetime, _){
            //
            // },
            onConfirm: (datetime, _) {
          this.onSelectionConfirmed(DateUtils()
              .getFormattedDateTimeStr(datetime: datetime, format: 'yyyy-MM'));
        });
      },
      child: Container(
        padding: EdgeInsets.only(
            top: ScreenUtil().setWidth(15), bottom: ScreenUtil().setWidth(15)),
        margin: EdgeInsets.only(left: ScreenUtil().setWidth(15)),
        decoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(width: 0.5, color: Colours.line),
          ),
        ),
        child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Text(
                label,
                style: TextStyle(
                  color: Color(0xff222222),
                  // fontSize: ScreenUtil().setSp(14)
                ),
                textAlign: TextAlign.start,
              ),
              Offstage(
                offstage: !this.isMust,
                child: Text(
                  "*",
                  style: TextStyle(color: Colors.red),
                ),
              ),
              Expanded(flex: 1, child: Container()),
              value.isEmpty
                  ? Container(
                      child: Row(children: <Widget>[
                        Text(
                          labelText,
                          style: TextStyle(
                            color: Color(0xffcccccc),
                            // fontSize: ScreenUtil().setSp(14)
                          ),
                          textAlign: TextAlign.start,
                        ),
                        Container(
                          padding: EdgeInsets.only(top: 3),
                          child: Icon(
                            Icons.keyboard_arrow_right,
                            size: 20.0,
                            color: Color(0xffcccccc),
                          ),
                        ),
                        SizedBox(width: 10)
                      ]),
                    )
                  : Container(
                      padding:
                          EdgeInsets.only(right: ScreenUtil().setWidth(15)),
                      child: Row(children: <Widget>[
                        Text(
                          value,
                          style: TextStyle(
                              color: Color(0xff222222),
                              fontSize: ScreenUtil().setSp(14)),
                          textAlign: TextAlign.start,
                        ),
                      ]),
                    ),
            ]),
      ),
    );
  }
}

class IsvideoList extends StatelessWidget {
  IsvideoList({Key key, this.list, this.fun}) : super(key: key);
  List<dynamic> list;
  Function fun;

  List<Widget> listWidget(context) => list.asMap().keys.map((i) {
        double width = MediaQuery.of(context).size.width;
        return GestureDetector(
          onTap: () {
            fun();
          },
          child: Container(
              padding: EdgeInsets.only(left: 10, right: 10, bottom: 5),
              width: width / 2,
              child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                        child: Stack(
                      children: <Widget>[
                        ClipRRect(
                          borderRadius: BorderRadius.circular(5),
                          child: Container(
                            child: LoadAssetImage(
                              list[i]["image"],
                              width: 190,
                              height: 140,
                            ),
                          ),
                        ),
                        Positioned(
                          left: 77,
                          top: 57,
                          child: Icon(
                            IconData(0xe607, fontFamily: "Iconfont"),
                            size: 26.0,
                            color: Colors.white,
                          ),
                        )
                      ],
                    )),
                    Text(
                      list[i]["title"],
                      style: TextStyle(
                          color: Color(0xff222222),
                          fontSize: ScreenUtil().setSp(16)),
                      textAlign: TextAlign.start,
                    ),
                    Text(
                      list[i]["brand"],
                      style: TextStyle(
                          color: Color(0xff999999),
                          fontSize: ScreenUtil().setSp(14)),
                      textAlign: TextAlign.start,
                    ),
                    Text(
                      "${list[i]["num"]}人点赞",
                      style: TextStyle(
                          color: Color(0xff999999),
                          fontSize: ScreenUtil().setSp(14)),
                      textAlign: TextAlign.start,
                    ),
                  ])),
        );
      }).toList();

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Wrap(
          // children:null
          children: listWidget(context)),
    );
  }
}

class Heng extends StatelessWidget {
  Heng({Key key, this.left, this.right, this.leftColor, this.rightColor})
      : super(key: key);
  String left;
  String right;
  int leftColor;
  int rightColor;

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.only(
          left: ScreenUtil().setWidth(15),
          right: ScreenUtil().setWidth(15),
          top: ScreenUtil().setWidth(10),
          bottom: ScreenUtil().setWidth(10)),
      decoration: BoxDecoration(
        border: Border(
          bottom: BorderSide(width: .5, color: Color(0xfff5f5f5)),
        ),
      ),
      child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Text(
              left,
              style: TextStyle(color: Color(leftColor), fontSize: 14),
              textAlign: TextAlign.start,
            ),
            Text(
              right,
              style: TextStyle(color: Color(rightColor), fontSize: 14),
              textAlign: TextAlign.start,
            ),
          ]),
    );
  }
}

// 选择下拉
class ChiosePicker extends StatefulWidget {
  ChiosePicker({
    Key key,
    this.range,
    this.value,
    this.label,
    this.isMust: false,
    this.onConfirm,
    this.placeholder = '请选择',
  }) : super(key: key);

  final List range;
  String value;
  final String label;
  final bool isMust;
  final String placeholder;
  final Function(String, int) onConfirm;

  @override
  _ChiosePickerState createState() => _ChiosePickerState();
}

class _ChiosePickerState extends State<ChiosePicker> {
  // String _value;

  showPickerModal(BuildContext context) {
    new Picker(
      cancelText: "取消",
      confirmText: "确认",
      adapter: PickerDataAdapter<String>(
        pickerdata: widget.range,
      ),
      changeToFirst: true,
      hideHeader: false,
      onConfirm: (Picker picker, List value) {
        widget.value = picker.getSelectedValues()[0];
        widget.onConfirm(picker.getSelectedValues()[0], value[0]);
        setState(() {});
      },
    ).showModal(this.context);
  }

  @override
  Widget build(BuildContext context) {
    // _value = widget.value;

    return InkWell(
      onTap: () {
        FocusScope.of(context).requestFocus(FocusNode());
        showPickerModal(context);
      },
      child: Container(
        padding: EdgeInsets.only(
          top: ScreenUtil().setWidth(15),
          bottom: ScreenUtil().setWidth(15),
        ),
        margin: EdgeInsets.only(left: ScreenUtil().setWidth(15)),
        decoration: BoxDecoration(
          border: Border(
            bottom: BorderSide(width: 0.5, color: Colours.line),
          ),
        ),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Text(
              widget.label,
              style: TextStyle(
                  // fontSize: ScreenUtil().setSp(14)
                  ),
              textAlign: TextAlign.start,
            ),
            Offstage(
              offstage: !widget.isMust,
              child: Text(
                " *",
                style: TextStyle(color: Colors.red),
              ),
            ),
            Expanded(flex: 1, child: Container()),
            widget.value == null || widget.value.isEmpty
                ? Container(
                    child: Row(
                      children: <Widget>[
                        Text(
                          widget.placeholder,
                          style: TextStyle(
                            color: Color(0xffcccccc),
                            // fontSize: ScreenUtil().setSp(14)
                          ),
                          textAlign: TextAlign.start,
                        ),
                        Container(
                          padding: EdgeInsets.only(top: 3),
                          child: Icon(
                            Icons.keyboard_arrow_right,
                            size: 20.0,
                            color: Color(0xffcccccc),
                          ),
                        ),
                        SizedBox(width: 10)
                      ],
                    ),
                  )
                : Container(
                    padding: EdgeInsets.only(right: ScreenUtil().setWidth(15)),
                    child: Row(
                      children: <Widget>[
                        Text(
                          widget.value,
                          style: TextStyle(
                              color: Color(0xff222222),
                              fontSize: ScreenUtil().setSp(14)),
                          textAlign: TextAlign.start,
                        ),
                      ],
                    ),
                  ),
          ],
        ),
      ),
    );
  }
}

class CommonActionBar extends StatelessWidget {
  final isFavorited;
  final Function onTapSharing;
  final Function onTapFavoriting;
  final Function onTapAction;
  final String actionText;
  final Widget actionWidget;

  CommonActionBar(
      {this.isFavorited = false,
      this.actionText = '',
      this.onTapSharing,
      this.onTapFavoriting,
      this.onTapAction,
      this.actionWidget});

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;

    return Container(
      width: width,
      color: Colors.white,
      padding: EdgeInsets.all(10),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          Expanded(
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                GestureDetector(
                  onTap: () {
                    if (this.onTapSharing != null) this.onTapSharing();
                  },
                  child: Container(
                      // padding: EdgeInsets.only(left:25,right:30),
                      child: Column(children: <Widget>[
                    Icon(
                      const IconData(0xe693, fontFamily: "Iconfont"),
                      size: 20.0,
                      color: Color(0xff333333),
                    ),
                    Text(
                      "分享",
                      style: TextStyle(
                        color: Color(0xff555A64),
                        fontSize: 12,
                      ),
                      textAlign: TextAlign.start,
                    ),
                  ])),
                ),
                GestureDetector(
                  onTap: () {
                    if (this.onTapFavoriting != null) this.onTapFavoriting();
                  },
                  child: Container(
                      child: Column(children: <Widget>[
                    Icon(
                      isFavorited ? Iconfont.shoucang1 : Iconfont.shoucang,
                      size: 20.0,
                      color: Color(isFavorited ? 0xff5589FF : 0xff555A64),
                    ),
                    Text(
                      isFavorited ? "已收藏" : "收藏",
                      style: TextStyle(
                        color: Color(isFavorited ? 0xff5589FF : 0xff555A64),
                        fontSize: 12,
                      ),
                      textAlign: TextAlign.start,
                    ),
                  ])),
                ),
              ],
            ),
          ),
          Container(
            height: 45,
            width: 240,
            decoration: BoxDecoration(
              color: Color(0xff5589FF),
              borderRadius: BorderRadius.circular(30),
            ),
            child: FlatButton(
              // padding: EdgeInsets.all(15.0),
              child: actionWidget != null
                  ? actionWidget
                  : Text(
                      actionText,
                      style: TextStyle(
                        fontSize: 16,
                      ),
                    ),
              textColor: Colors.white,
              onPressed: () {
                if (onTapAction != null) onTapAction();
              },
            ),
          ),
        ],
      ),
    );
  }
}

class AlphabeticIndexBar extends StatelessWidget {
  final Map<String, double> positionAnchors;
  final ScrollController controller;

  const AlphabeticIndexBar({Key key, this.positionAnchors, this.controller})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    var alphabetAnchors = positionAnchors.keys
        .map(
          (e) => GestureDetector(
            child: Text(
              e,
              style: TextStyle(color: Color(0xff5589FF), fontSize: 15),
            ),
            onTap: () => controller.animateTo(positionAnchors[e],
                duration: Duration(milliseconds: 500),
                curve: Curves.decelerate),
          ),
        )
        .toList();

    return Column(
      // mainAxisAlignment: MainAxisAlignment.spaceBetween,
      // crossAxisAlignment: CrossA,
      children: [
        ...alphabetAnchors,
        Text(
          '#',
          style: TextStyle(color: Color(0xff5589FF), fontSize: 15),
        )
      ],
    );
  }

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties
        .add(DiagnosticsProperty<ScrollController>('controller', controller));
  }
}

class CircularLoading extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.only(top: 10, bottom: 10),
      color: ThemeUtils.getTabsBg(context),
      child: Center(
        child: SpinKitFadingCircle(
          color: Colors.blueAccent,
          size: 30.0,
        ),
      ),
    );
  }
}
