message_order_menu.dart 15.2 KB
import 'package:cached_network_image/cached_network_image.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/order_food_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';

/*
  已选菜品
*/
class MessageHasOrderFoodPage extends StatefulWidget {
  final String rid;
  final bool fromNotify;
  MessageHasOrderFoodPage({Key key, this.rid, this.fromNotify = false})
      : super(key: key);

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

class _MessageHasOrderFoodPageState extends State<MessageHasOrderFoodPage> {
  final ItemScrollController itemScrollController = ItemScrollController();
  final ItemPositionsListener itemPositionsListener =
      ItemPositionsListener.create();
  OrderFoodProvider _orderFoodProvider;
  @override
  void initState() {
    super.initState();
    // if (widget.fromNotify) {
    //   _setMessageStatus();
    // }
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _getOrderFoodData();
      _getTableInfoData();
    });
  }

  _setMessageStatus() {
    Future.delayed(Duration(milliseconds: 200), () async {
      Map<String, String> params = {
        "sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
        "id": widget.rid,
        "status": "is_read"
      };
      MessageDialogModel messageDialogModel =
          Provider.of<MessageDialogModel>(context, listen: false);
      await messageDialogModel.setMessageStatus(context, params);
      bus.emit("refresh_untreated_num"); //刷新未读消息数目
    });
  }

  ///接口获取菜单信息
  _getOrderFoodData() async {
    Map<String, String> params = {
      'rid': widget.rid,
      'status': '1',
      'identity': '2'
    };
    await _orderFoodProvider.getOrderFoodData(context, params);
  }

  ///接口获取桌位信息
  _getTableInfoData() async {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    Map<String, String> params = {
      "openid": userModel.user.openid,
      "rid": widget.rid
    };
    //明天完成  桌位名称信息
    await _orderFoodProvider.getTableInfoData(context, params);
  }

//人数、桌位、订单编号、下单时间
  Widget _getRow(String leftTitle, String rightTitle) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Text(leftTitle,
            style: TextStyle(
                color: MyColours.color_999999,
                fontSize: ScreenUtil().setSp(30))),
        Text(rightTitle,
            style: TextStyle(
                color: MyColours.color_333333,
                fontSize: ScreenUtil().setSp(30))),
      ],
    );
  }

  Widget list(List data) => ScrollablePositionedList.builder(
        itemCount: data.length + 1,
        itemBuilder: (context, index) {
          if (index == data.length) {
            return Column(
              crossAxisAlignment: CrossAxisAlignment.end,
              children: [
                VEmptyView(40),
                Padding(
                  padding: EdgeInsets.symmetric(
                      horizontal: ScreenUtil().setWidth(40)),
                  child: MyDivider(
                    double.infinity,
                    ScreenUtil().setWidth(2),
                    color: MyColours.color_F0F0F0,
                  ),
                ),
                VEmptyView(40),
                Padding(
                    padding: EdgeInsets.symmetric(
                        horizontal: ScreenUtil().setWidth(40)),
                    child: Text(
                      '共计:  ¥${_orderFoodProvider.createdOrderSunModel.price}',
                      textAlign: TextAlign.right,
                      style: TextStyle(
                          fontSize: ScreenUtil().setSp(34),
                          color: MyColours.color_333333,
                          fontWeight: FontWeight.bold),
                    )),
                VEmptyView(40),
                Container(
                    width: double.infinity,
                    height: ScreenUtil().setWidth(20),
                    color: MyColours.color_f5f5f5),
                Container(
                  padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
                  child: Column(
                    children: [
                      _getRow(
                          '人数', _orderFoodProvider.createdOrderSunModel.pnum),
                      VEmptyView(30),
                      _orderFoodProvider.reserveDetailSunModel != null
                          ? _getRow(
                              '桌位',
                              _orderFoodProvider
                                          .reserveDetailSunModel.tables.length >
                                      0
                                  ? _orderFoodProvider
                                      .reserveDetailSunModel.tables[0].name
                                  : '')
                          : Container(),
                    ],
                  ),
                ),
                Container(
                    width: double.infinity,
                    height: ScreenUtil().setWidth(20),
                    color: MyColours.color_f5f5f5),
                Container(
                  padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
                  child: Column(
                    children: [
                      _getRow(
                          '订单编号', _orderFoodProvider.createdOrderSunModel.no),
                      VEmptyView(30),
                      _getRow(
                          '下单时间',
                          DateUtil.formatDate(
                              DateTime.fromMillisecondsSinceEpoch(int.parse(
                                      _orderFoodProvider
                                          .createdOrderSunModel.cdate) *
                                  1000),
                              format: DateFormats.y_mo_d))
                    ],
                  ),
                ),
              ],
            );
          }
          return Padding(
              padding:
                  EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(40)),
              child: item(index));
        },
        itemScrollController: itemScrollController,
        itemPositionsListener: itemPositionsListener,
        reverse: false,
        scrollDirection: Axis.vertical,
      );

  Widget item(int i) {
    return Container(
        color: MyColours.color_ffffff,
        height: ScreenUtil().setWidth(50 * 2) *
                _orderFoodProvider
                    .orderList[i][_orderFoodProvider.orderList[i].keys.first]
                    .length +
            ScreenUtil().setWidth(40 * 2 + 20),
        child: Column(
          children: [
            Container(
              alignment: Alignment.centerLeft,
              margin: EdgeInsets.only(top: ScreenUtil().setWidth(20)),
              height: ScreenUtil().setWidth(40 * 2),
              child: Text(_orderFoodProvider.orderList[i].keys.first,
                  style: TextStyle(
                      fontSize: ScreenUtil().setWidth(30),
                      color: MyColours.color_999999)),
            ),
            Container(
                height: ScreenUtil().setWidth(50 * 2) *
                    _orderFoodProvider
                        .orderList[i]
                            [_orderFoodProvider.orderList[i].keys.first]
                        .length,
                child: ListView.builder(
                    shrinkWrap: true,
                    physics: NeverScrollableScrollPhysics(),
                    itemCount: _orderFoodProvider
                        .orderList[i]
                            [_orderFoodProvider.orderList[i].keys.first]
                        .length,
                    itemBuilder: (BuildContext context, int index) {
                      return Container(
                        height: ScreenUtil().setWidth(50 * 2),
                        child: Row(
                          children: [
                            ClipRRect(
                              borderRadius: BorderRadius.circular(
                                  ScreenUtil().setWidth(30)),
                              child: _orderFoodProvider
                                              .orderList[i][_orderFoodProvider
                                                  .orderList[i]
                                                  .keys
                                                  .first][index]
                                              .cookimage ==
                                          null ||
                                      _orderFoodProvider
                                              .orderList[i][_orderFoodProvider
                                                  .orderList[i]
                                                  .keys
                                                  .first][index]
                                              .cookimage ==
                                          ''
                                  ? Image.asset(Utils.getImgPath('menu_place'),
                                      width: ScreenUtil().setWidth(30 * 2),
                                      height: ScreenUtil().setWidth(30 * 2))
                                  : CachedNetworkImage(
                                      // placeholder: (context, url) =>
                                      //     new CircularProgressIndicator(),
                                      // errorWidget: (context, url, error) => new Icon(Icons.error),
                                      imageUrl: _orderFoodProvider
                                          .orderList[i][_orderFoodProvider
                                              .orderList[i].keys.first][index]
                                          .cookimage,
                                      fit: BoxFit.cover,
                                      width: ScreenUtil().setWidth(30 * 2),
                                      height: ScreenUtil().setWidth(30 * 2),
                                    ),
                            ),
                            HEmptyView(20),
                            Container(
                                width: ScreenUtil().setWidth(150 * 2),
                                child: Text(
                                  _orderFoodProvider
                                      .orderList[i][_orderFoodProvider
                                          .orderList[i].keys.first][index]
                                      .cookname,
                                  style: TextStyle(
                                      color: MyColours.color_333333,
                                      fontSize: ScreenUtil().setWidth(30)),
                                )),
                            HEmptyView(20),
                            Spacer(),
                            Text(
                              '¥' +
                                  _orderFoodProvider
                                      .orderList[i][_orderFoodProvider
                                          .orderList[i].keys.first][index]
                                      .price +
                                  '/' +
                                  _orderFoodProvider
                                      .orderList[i][_orderFoodProvider
                                          .orderList[i].keys.first][index]
                                      .cookunit,
                              style: TextStyle(
                                  color: MyColours.color_333333,
                                  fontSize: ScreenUtil().setWidth(30)),
                            ),
                            HEmptyView(40),
                            Text(
                              'x' +
                                  _orderFoodProvider
                                      .orderList[i][_orderFoodProvider
                                          .orderList[i].keys.first][index]
                                      .number,
                              style: TextStyle(
                                  color: MyColours.color_333333,
                                  fontSize: ScreenUtil().setWidth(30)),
                            ),
                          ],
                        ),
                      );
                    })),
          ],
        ));
  }

  @override
  Widget build(BuildContext context) {
    _orderFoodProvider = Provider.of<OrderFoodProvider>(context, listen: true);
    return Scaffold(
      backgroundColor: MyColours.color_ffffff,
      appBar: SystemAppBar(
        '已点菜品',
        onTap: () {
          if (widget.fromNotify) {
            NavigatorUtil.goHomePage(context, initialIndex: 0);
          } else {
            Navigator.of(context).pop();
          }
        },
      ),
      body: Consumer<OrderFoodProvider>(
        builder: (context, model, _) {
          if (model.pageState != PageState.Success) {
            return ExceptionPage(
              pageState: model.pageState,
              callback: () {
                _getOrderFoodData();
                _getTableInfoData();
              },
              emptyMsg: "暂时没有已选菜品哦",
              emptyImg: "empty_search",
              showMsg: "加载中,请稍后...",
            );
          } else {
            return Padding(
              padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(40)),
              child: Column(
                children: [
                  Expanded(
                    child: list(_orderFoodProvider.orderList),
                  ),
                  RoundButton(
                    text: '分享',
                    margin: EdgeInsets.symmetric(
                        horizontal: ScreenUtil().setWidth(40)),
                    width: double.infinity,
                    height: 50,
                    fontSize: 34,
                    isBold: false,
                    gradientStart: MyColours.color_199095,
                    gradientEnd: MyColours.color_199095,
                    radius: ScreenUtil().setWidth(10),
                    onPressed: () {
                      Utils.goShareOrderFoodToWeChat(context,
                          rid: widget.rid,
                          title: '菜品已点好,快来看看都点了什么~',
                          img:
                              'http://nosqn.colorcun.com/reserve/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_201911151148571.jpg');
                    },
                  )
                ],
              ),
            );
          }
        },
      ),
    );
  }
}