message_online_check_page.dart 6.68 KB
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/pages/message/messsage_item.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/widgets/page_error.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:provider/provider.dart';
import 'package:one_key/utils/event_bus.dart';

/**
 * 在线买单消息
 */
class MessageOnlineCheckPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new MessageOnlineCheckPageState();
  }
}

class MessageOnlineCheckPageState extends State<MessageOnlineCheckPage> {
  EasyRefreshController _controller;

  Color selectedColor = MyColours.color_199095;
  Color unSelectedColor = MyColours.color_999999;

  int selectedIndex = 0;

  int offset = 0;
  MessageModel messageModel;
  UserModel userModel;
  MessageDialogModel messageDialogModel;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    //移除在线买单消息
    // bus.on("remove_untreated_message_check", (args) {
    //   messageModel.removeUntreatedMessageByMid(args.toString());
    //   messageDialogModel.removeMessage(args.toString());
    // });
    _controller = EasyRefreshController();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      // getMessage();
      // setState(() {
      //   messageModel.pageState = PageState.Loading;
      // });
      messageModel.pageState = PageState.Loading;
      messageModel.notifyListeners();
    });
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    // bus.off("remove_untreated_message_check");
  }

  //三种分类各自的未读消息数目
  _getUnMsgNum() async {
    Map<String, String> params = {"sid": userModel.user.sellerid};
    await messageModel.getUnMsgNum(context, params);
  }

  //获取在线预订消息status 0未处理 1已处理
  getMessage({bool showLoading = true}) async {
    Map<String, String> params = {
      "sid": userModel.user.sellerid,
      "type_id": "12", //1提前点餐 2内部预订 10在线预订 12在线买单
      "status": selectedIndex.toString(),
      "offset": offset.toString(),
      "limit": "20",
    };

    await messageModel.getMessages(context, params, showLoading: showLoading);
    _getUnMsgNum();
  }

  @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(
      color: MyColours.color_f5f5f5,
      child: Column(
        children: [
          Container(
            width: double.infinity,
            height: ScreenUtil().setWidth(84),
            color: MyColours.color_ffffff,
            child: Row(
              children: [
                Expanded(
                    child: GestureDetector(
                        behavior: HitTestBehavior.opaque,
                        onTap: () {
                          if (selectedIndex == 0) return;
                          setState(() {
                            selectedIndex = 0;
                            messageModel.messages = [];
                          });
                          getMessage(showLoading: true);
                        },
                        child: Center(
                          child: Text(
                            "未处理",
                            style: TextStyle(
                                color: selectedIndex == 0
                                    ? selectedColor
                                    : unSelectedColor,
                                fontSize: ScreenUtil().setSp(30)),
                          ),
                        ))),
                Expanded(
                    child: GestureDetector(
                        behavior: HitTestBehavior.opaque,
                        onTap: () {
                          if (selectedIndex == 1) return;
                          setState(() {
                            selectedIndex = 1;
                            messageModel.messages = [];
                          });
                          getMessage(showLoading: true);
                        },
                        child: Center(
                          child: Text(
                            "已处理",
                            style: TextStyle(
                                color: selectedIndex == 1
                                    ? selectedColor
                                    : unSelectedColor,
                                fontSize: ScreenUtil().setSp(30)),
                          ),
                        )))
              ],
            ),
          ),
          Expanded(
            child: Consumer<MessageModel>(
              builder: (context, model, _) {
                if (model.pageState != PageState.Success) {
                  return ExceptionPage(
                    pageState: model.pageState,
                    callback: () {
                      offset = 0;
                      getMessage(showLoading: true);
                    },
                    emptyMsg:
                        "暂时没有${selectedIndex == 0 ? '未处理' : '已处理'}的在线买单消息哦",
                    emptyImg: "empty_search",
                    showMsg: "加载中,请稍后...",
                  );
                } else {
                  return EasyRefresh.custom(
                    controller: _controller,
                    slivers: [
                      SliverList(
                        delegate: SliverChildBuilderDelegate(
                            (BuildContext context, int index) {
                          return MessageItem(
                            model.messages[index],
                            isTreated: selectedIndex == 1,
                          );
                        }, childCount: model.messages.length),
                      )
                    ],
                    onRefresh: () async {
                      offset = 0;
                      getMessage(showLoading: false);
                    },
                    onLoad: () async {
                      offset++;
                      getMessage(showLoading: false);
                    },
                  );
                }
              },
            ),
          )
        ],
      ),
    );
  }
}