message_page.dart 12.9 KB
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/pages/message/message_online_check_page.dart';
import 'package:one_key/pages/message/message_treated_page.dart';
import 'package:one_key/pages/message/message_untreated_page.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/message_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../utils/screen_util.dart';
import 'message_online_page.dart';
import 'message_order_page.dart';

/*
  消息中心
*/
class MessagePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new MessagePageState();
  }
}

class MessagePageState extends State<MessagePage>
    with TickerProviderStateMixin {
  Color selectedColor = MyColours.color_ffffff;
  Color unSelectedColor = MyColours.color_BFC4D4;

  TabController tabController;

  MessageModel messageModel;
  UserModel userModel;
  MessageDialogModel messageDialogModel;
  // int selectIndex = 0;

  @override
  void initState() {
    super.initState();
    tabController = TabController(length: 2, vsync: this);

    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      // getMessage(index: 0);
    });
    //刷新未读数
    bus.on("refresh_untreated_num", (arg) {
      _getUnMsgNum();
    });
    //移除在线预订消息
    bus.on("remove_untreated_message", (args) {
      messageModel.removeUntreatedMessageByMid(args.toString());
      messageDialogModel.removeMessage(args.toString());
    });
    tabController.addListener(() {
      //点击tab时或滑动tab回调一次
      // if (tabController.index.toDouble() == tabController.animation.value) {
      // getMessage(index: tabController.index);
      // selectIndex = tabController.index;
      setState(() {});
      // }
    });
  }

  //三种分类各自的未读消息数目
  _getUnMsgNum() async {
    if (mounted) {
      Map<String, String> params = {
        "sid": userModel.user.sellerid,
        // "type_id": "10", //1提前点餐2内部预订10在线预订
        // "status": '0',
        "offset": '0',
        "limit": "1000",
      };

      await messageModel.getNewGetUntreatedMsgNum(context, params,
          showLoading: false);
    }
  }

  //获取在线预订消息status 0未处理 1已处理
  // getMessage({bool showLoading = true, int index}) async {
  //   String typeId = '';
  //   if (index == 0) {
  //     typeId = '10';
  //   } else if (index == 1) {
  //     typeId = '1';
  //   } else if (index == 2) {
  //     typeId = '12';
  //   }
  //   Map<String, String> params = {
  //     "sid": userModel.user.sellerid,
  //     "type_id": typeId, //1提前点餐2内部预订10在线预订
  //     "status": '0',
  //     "offset": '0',
  //     "limit": "20",
  //   };
  //   await messageModel.getMessages(context, params, showLoading: showLoading);
  //   _getUnMsgNum();
  // }
  @override
  void dispose() {
    super.dispose();
    messageModel.pageStateUn = PageState.Loading;
    messageModel.pageState = PageState.Loading;
    // messageModel.notifyListeners();
    bus.off("refresh_untreated_num");
    bus.off("remove_untreated_message");
  }

  @override
  Widget build(BuildContext context) {
    messageModel = Provider.of<MessageModel>(context, listen: true);
    userModel = Provider.of<UserModel>(context, listen: false);
    messageDialogModel =
        Provider.of<MessageDialogModel>(context, listen: false);
    return Container(
      width: double.infinity,
      height: double.infinity,
      color: MyColours.color_ffffff,
      child: Column(
        children: <Widget>[
          MyAppBar(
            "消息中心",
            showBack: false,
            rightImgName: '消息清理',
            onTapRight: () {
              if (messageModel.messagesUn.length == 0) {
                Utils.showToast('没有未处理过期消息');

                return;
              }
              //弹框确认是否删除
              DialogUtil.cupertinoAlertDialog(context,
                  title: "消息清理",
                  content: "过期消息将会标记为已处理,您可以从已处理消息中查询相关消息",
                  isBoldContent: false,
                  contentColor: MyColours.color_999999,
                  rTitle: "确定", rCallback: () async {
                bool sucess = await messageModel.setClearMessage(context);
                if (sucess) {
                  //清理消息成功,
                  //刷新未处理
                  bus.emit('refresh_untreated_list');
                  //刷新已处理列表
                  bus.emit('refresh_treated_list');
                  // 刷新未读数
                  bus.emit('refresh_untreated_num');
                }
              });
            },
          ),
          Padding(
              padding: EdgeInsets.symmetric(
                  horizontal: ScreenUtil().setWidth(24 * 2)),
              child: TabBar(
                controller: tabController,
                isScrollable: true,
                labelPadding: EdgeInsets.zero, //tabs控件之间的间距
                tabs: [
                  Tab(
                    child: Container(
                      width: (ScreenUtil().screenWidth -
                              ScreenUtil().setWidth(24 * 2 * 2)) /
                          2,
                      height: ScreenUtil().setWidth(36 * 2),
                      decoration: BoxDecoration(
                          border: Border(
                              bottom: BorderSide(
                                  width: ScreenUtil().setWidth(2),
                                  color: tabController.index == 0
                                      ? MyColours.color_438E93
                                      : MyColours.color_BFC4D4),
                              left: BorderSide(
                                  width: ScreenUtil().setWidth(2),
                                  color: tabController.index == 0
                                      ? MyColours.color_438E93
                                      : MyColours.color_BFC4D4),
                              top: BorderSide(
                                  width: ScreenUtil().setWidth(2),
                                  color: tabController.index == 0
                                      ? MyColours.color_438E93
                                      : MyColours.color_BFC4D4),
                              right: BorderSide(
                                  width: ScreenUtil().setWidth(2),
                                  color: tabController.index == 0
                                      ? MyColours.color_438E93
                                      : MyColours.color_BFC4D4)),
                          borderRadius: BorderRadius.only(
                              topLeft:
                                  Radius.circular(ScreenUtil().setWidth(16)),
                              bottomLeft:
                                  Radius.circular(ScreenUtil().setWidth(16))),
                          color: tabController.index == 0
                              ? MyColours.color_438E93
                              : MyColours.color_ffffff),
                      alignment: Alignment.center,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Text("未处理",
                              style: TextStyle(
                                color: tabController.index == 0
                                    ? selectedColor
                                    : unSelectedColor,
                                fontSize: tabController.index == 0
                                    ? ScreenUtil().setSp(32)
                                    : ScreenUtil().setSp(24),
                              )),
                          messageModel.allUnNum > 0
                              ? Container(
                                  // width: ScreenUtil().setWidth(36),
                                  constraints: BoxConstraints(
                                      minWidth: ScreenUtil().setWidth(36)),
                                  height: ScreenUtil().setWidth(36),
                                  padding:
                                      EdgeInsets.symmetric(horizontal: w(4)),
                                  margin: EdgeInsets.only(
                                      left: ScreenUtil().setWidth(20)),
                                  decoration: BoxDecoration(
                                      borderRadius: BorderRadius.circular(
                                          ScreenUtil().setWidth(36)),
                                      color: MyColours.color_E34D59),
                                  alignment: Alignment.center,
                                  child: Text("${messageModel.allUnNum}",
                                      style: TextStyle(
                                        color: MyColours.color_ffffff,
                                        fontSize: ScreenUtil().setSp(28),
                                      )),
                                )
                              : SizedBox(),
                        ],
                      ),
                    ),
                  ),
                  Tab(
                    child: Container(
                        width: (ScreenUtil().screenWidth -
                                ScreenUtil().setWidth(24 * 2 * 2)) /
                            2,
                        height: ScreenUtil().setWidth(36 * 2),
                        decoration: BoxDecoration(
                            border: Border(
                                left: BorderSide(
                                    width: ScreenUtil().setWidth(2),
                                    color: tabController.index == 1
                                        ? MyColours.color_438E93
                                        : MyColours.color_BFC4D4),
                                bottom: BorderSide(
                                    width: ScreenUtil().setWidth(2),
                                    color: tabController.index == 1
                                        ? MyColours.color_438E93
                                        : MyColours.color_BFC4D4),
                                right: BorderSide(
                                    width: ScreenUtil().setWidth(2),
                                    color: tabController.index == 1
                                        ? MyColours.color_438E93
                                        : MyColours.color_BFC4D4),
                                top: BorderSide(
                                    width: ScreenUtil().setWidth(2),
                                    color: tabController.index == 1
                                        ? MyColours.color_438E93
                                        : MyColours.color_BFC4D4)),
                            borderRadius: BorderRadius.only(
                                topRight:
                                    Radius.circular(ScreenUtil().setWidth(16)),
                                bottomRight:
                                    Radius.circular(ScreenUtil().setWidth(16))),
                            color: tabController.index == 1
                                ? MyColours.color_438E93
                                : MyColours.color_ffffff),
                        alignment: Alignment.center,
                        child: Text(
                          "已处理",
                          style: TextStyle(
                              color: tabController.index == 1
                                  ? selectedColor
                                  : unSelectedColor,
                              fontSize: tabController.index == 1
                                  ? ScreenUtil().setSp(32)
                                  : ScreenUtil().setSp(24)),
                        )),
                  ),
                ],
                indicatorColor: Colors.transparent,
                indicatorSize: TabBarIndicatorSize.tab,

                // indicatorPadding: EdgeInsets.only(
                //     left: ScreenUtil().setWidth(16),
                //     right: ScreenUtil().setWidth(32)),
                // indicatorWeight: ScreenUtil().setWidth(6.0),
              )),
          VEmptyView(11),
          Expanded(
            child: TabBarView(controller: tabController, children: [
              MessageUntreatedPage(),
              MessageTreatedPage(),
              // MessageOnlineCheckPage()
            ]),
          )
        ],
      ),
    );
  }
}