dialog_util.dart 17.6 KB
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_picker/flutter_picker.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/pages/message/message_dialog_item.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/log_util.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/common_button.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart';

class DialogUtil {

  //显示消息弹框
  static showMessageDialog(BuildContext context) async {
    MessageDialogModel messageModel =
    Provider.of<MessageDialogModel>(context, listen: false);
    if (messageModel.messages.isEmpty) return null;
    messageModel.play();
    messageModel.showMessageDialog=true;
    await showModalBottomSheet<int>(
        context: context,
        isScrollControlled: true,
        builder: (BuildContext dialogContext) {
          Widget widget = Container(
            color: MyColours.app_main,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Consumer<MessageDialogModel>(builder: (BuildContext context,
                    MessageDialogModel model, Widget child) {
                  if(messageModel.messages.isEmpty)return Container();
                  return Column(
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                      Container(
                          margin: EdgeInsets.only(top: ScreenUtil().setWidth(21),bottom: ScreenUtil().setWidth(12)),
                          width: double.infinity,
                          child: Stack(
                            alignment: Alignment.center,
                            children: <Widget>[
                              Text(
                                "您有一条新的消息",
                                style: TextStyle(
                                    color: MyColours.color_ffffff,
                                    fontSize: ScreenUtil().setSp(32)),
                              ),
                              Positioned(
                                  right: ScreenUtil().setWidth(23),
                                  child: GestureDetector(
                                    onTap: () {
                                      Navigator.of(dialogContext).pop();
                                    },
                                    child: Padding(
                                      padding:
                                      EdgeInsets.all(ScreenUtil().setWidth(12)),
                                      child: Image.asset(
                                        "assets/icon_close.png",
                                        width: ScreenUtil().setWidth(28),
                                        height: ScreenUtil().setWidth(28),
                                      ),
                                    ),
                                  ))
                            ],
                          )),
                      model.messages.length>3?Container(
                        margin: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(22),vertical: ScreenUtil().setWidth(11)),
                        padding: EdgeInsets.fromLTRB(
                            ScreenUtil().setWidth(16),
                            ScreenUtil().setWidth(76),
                            ScreenUtil().setWidth(16),
                            ScreenUtil().setWidth(41)),
                        decoration: BoxDecoration(
                            color: MyColours.color_fefefe,
                            borderRadius:
                            BorderRadius.all(Radius.circular(ScreenUtil().setWidth(8)))),
                        child: Column(
                          mainAxisSize: MainAxisSize.min,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: <Widget>[
                            Row(
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: <Widget>[
                                Text(
                                  "在线预订",
                                  style: TextStyle(
                                      color: MyColours.color_353535,
                                      fontSize: ScreenUtil().setSp(32)),
                                ),
                                Spacer(),
                                Text(
                                  "刚刚",
                                  style: TextStyle(
                                      color: MyColours.color_999999,
                                      fontSize: ScreenUtil().setSp(22)),
                                ),
                              ],
                            ),
                            VEmptyView(20),
                            Text(
                              "在线预订:${model.messages.length}个",
                              style: TextStyle(
                                  color: MyColours.color_353535,
                                  fontSize: ScreenUtil().setSp(32)),
                            ),
                            Row(
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: <Widget>[
                                Spacer(),
                                CommonButton(
                                  width: 160,
                                  height: 48,
                                  fontSize: 32,
                                  content: "立即处理",
                                  state: 1,
                                  onPress: () {
                                    NavigatorUtil.goHomePage(context,initialIndex: 0);
                                  },
                                )
                              ],
                            )
                          ],
                        ),
                      ):ListView.builder(
                          itemBuilder: (context, index) {
                            return MessageDialogItem(model.messages[index]);
                          },
                          itemCount: model.messages.length,
                          shrinkWrap: true)
                    ],
                  );
                })
              ],
            ),
          );
          return widget;
        });
    messageModel.showMessageDialog=false;
  }

  //显示日历弹框
  static Future<DateTime> showCalendarDialog(BuildContext context,DateTime selectDateTime) {
    CalendarController _calendarController = CalendarController();
    Map<DateTime, List> _events = {};
    return showModalBottomSheet<DateTime>(
        context: context,
        isScrollControlled:true,
        builder: (BuildContext context) {
          BuildContext dialogContext = context;
          Widget widget = StatefulBuilder(builder: (context, _setState) {
            return Stack(
              children: <Widget>[
                Container(
                  color: MyColours.color_ffffff,
                  child: Column(
                    children: <Widget>[
                      TableCalendar(
                        calendarController: _calendarController,
                        initialSelectedDay: selectDateTime,
                        onDaySelected: (day, _) {
                          Navigator.of(dialogContext).pop(day);
                        },
                        availableGestures: AvailableGestures.none,
                        events: _events,
                        locale: "zh_CN",
                        initialCalendarFormat: CalendarFormat.month,
                        headerStyle: HeaderStyle(
                          decoration: BoxDecoration(
                              color: MyColours.color_2bb5b7),
                          headerPadding: EdgeInsets.zero,
                          formatButtonVisible: true,
                          centerHeaderTitle: false,
                          titleTextBuilder: (dateTime, _) {
                            return dateTime.year.toString() +
                                "年-" +
                                Utils.addZeroNumber(dateTime.month) +
                                "月";
                          },
                          titleTextStyle: TextStyle(
                              color: MyColours.color_ffffff,
                              fontSize: ScreenUtil().setSp(30)),
                          leftChevronIcon:
                          const Icon(Icons.chevron_left, color: Colors.white),
                          rightChevronIcon:
                          const Icon(Icons.chevron_right, color: Colors.white),
                        ),
                        calendarStyle: CalendarStyle(
                          contentPadding: const EdgeInsets.only(bottom: 4.0),
                          weekdayStyle: TextStyle(
                              color: MyColours.color_2bb5b7,
                              fontSize: ScreenUtil().setSp(32)),
                          weekendStyle: TextStyle(
                              color: MyColours.color_f49a5e,
                              fontSize: ScreenUtil().setSp(32)),
                          selectedColor: MyColours.color_2bb5b7,
                          outsideDaysVisible: false,
                        ),
                        builders: CalendarBuilders(
                          dowWeekdayBuilder: (context, weekday) {
                            return Container(
                              color: MyColours.color_2bb5b7,
                              alignment: Alignment.center,
                              padding: EdgeInsets.symmetric(
                                  vertical: ScreenUtil().setHeight(25)),
                              child: Text(
                                weekday,
                                style: TextStyle(
                                    color: MyColours.color_97e9ea,
                                    fontSize: ScreenUtil().setSp(32)),
                              ),
                            );
                          },
                          selectedDayBuilder: (context, date, _) {
                            return Container(
                              decoration: BoxDecoration(
                                  shape: BoxShape.circle,
                                  color: MyColours.color_2bb5b7
                              ),
                              alignment: Alignment.center,
                              margin: const EdgeInsets.all(6.0),
                              padding: const EdgeInsets.only(
                                  bottom: 4.0, left: 8.0, right: 8.0, top: 4.0),
                              child: Text(
                                date.day == DateTime
                                    .now()
                                    .day ? '今' : date.day.toString(),
                                style: TextStyle().copyWith(
                                    fontSize: ScreenUtil().setSp(32),
                                    color: MyColours.color_ffffff),
                              ),
                            );
                          },
                          todayDayBuilder: (context, date, _) {
                            return Container(
                              decoration: BoxDecoration(
                                  shape: BoxShape.circle,
                                  border: Border.all(
                                      color: MyColours.color_2bb5b7, width: 1)),
                              alignment: Alignment.center,
                              margin: const EdgeInsets.all(6.0),
                              padding: const EdgeInsets.only(
                                  bottom: 4.0, left: 8.0, right: 8.0, top: 4.0),
                              child: Text(
                                '今',
                                style: TextStyle().copyWith(
                                    fontSize: ScreenUtil().setSp(32),
                                    color: MyColours.color_2bb5b7),
                              ),
                            );
                          },
                          singleMarkerBuilder: (context, dateTime, event) {
                            return Container(
                              width: ScreenUtil().setWidth(6),
                              height: ScreenUtil().setWidth(6),
                              margin: const EdgeInsets.symmetric(
                                  horizontal: 0.3),
                              decoration: BoxDecoration(
                                shape: BoxShape.circle,
                                color: MyColours.color_ff0000,
                              ),
                            );
                          },
                        ),
                      ),
                    ],
                  ),
                ),
                Positioned(
                  right: ScreenUtil().setWidth(62),
                  bottom: ScreenUtil().setHeight(20),
                  child: Container(
                    child: GestureDetector(
                      onTap: () {
                        _calendarController.setSelectedDay(DateTime.now());
                        _setState(() {});
                      },
                      child: Container(
                        child: ClipOval(
                            child: Container(
                              width: ScreenUtil().setWidth(100),
                              height: ScreenUtil().setWidth(100),
                              alignment: Alignment.center,
                              color: MyColours.color_2bb5b7,
                              child: Text(
                                "今天",
                                style: TextStyle(
                                    color: MyColours.color_ffffff,
                                    fontSize: ScreenUtil().setSp(32)),
                              ),
                            )),
                      ),
                    ),
                  ),
                )
              ],
            );
          });
          return SizedBox(
            width: double.infinity,
            height: ScreenUtil().setWidth(935),
            child: widget,
          );
        });
  }

  //显示分享弹框
  static showShareDialog(BuildContext context) {
    return showModalBottomSheet(context: context, builder: (context) {
      Widget widget = Container(
        width: double.infinity,
        height: ScreenUtil().setHeight(233),
        color: MyColours.color_f1f1f1,
        child: Row(
          children: <Widget>[
            Expanded(
              child: GestureDetector(
                onTap: (){
                  Navigator.of(context).pop(1);
                },
                behavior: HitTestBehavior.opaque,
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Image.asset(
                      "assets/icon_wechat.png", width: ScreenUtil().setWidth(140),
                      height: ScreenUtil().setWidth(140),),
                    Text("微信", style: TextStyle(color: MyColours.color_353535,
                        fontSize: ScreenUtil().setSp(32)),)
                  ],
                ),
              ),
            ),
            Expanded(
              child: GestureDetector(
                onTap: (){
                  Navigator.of(context).pop(2);
                },
                behavior: HitTestBehavior.opaque,
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Image.asset(
                      "assets/icon_sms.png", width: ScreenUtil().setWidth(140),
                      height: ScreenUtil().setWidth(140),),
                    Text("短信", style: TextStyle(color: MyColours.color_353535,
                        fontSize: ScreenUtil().setSp(32)),)
                  ],
                ),
              ),
            ),
            Expanded(
              child: GestureDetector(
                onTap: (){
                  Navigator.of(context).pop(3);
                },
                behavior: HitTestBehavior.opaque,
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Image.asset(
                      "assets/icon_phone.png", width: ScreenUtil().setWidth(140),
                      height: ScreenUtil().setWidth(140),),
                    Text("电话", style: TextStyle(color: MyColours.color_353535,
                        fontSize: ScreenUtil().setSp(32)),)
                  ],
                ),
              ),
            )
          ],
        ),
      );
      return widget;
    });
  }

  //显示选择客户经理弹框
  static Future<List<int>> showSelectCusmanDialog(BuildContext context,List<String> data){
    return Picker(
        adapter: PickerDataAdapter<String>(pickerdata: data),
        hideHeader: false,
        cancelText: "取消",
        cancelTextStyle: TextStyle(color: MyColours.color_828282,fontSize: 20),
        confirmText: "确定",
        confirmTextStyle: TextStyle(color: MyColours.color_2bb5b7,fontSize: 20),
        selectedTextStyle: TextStyle(color: Colors.blue),
        onConfirm: (Picker picker, List value) {
          print(value.toString());
        }
    ).showModal<List<int>>(context).then((value){
      LogUtil.v("value:${value.toString()}");
      return value;
    });
  }
}