utils.dart 11.1 KB
import 'dart:io';

import 'package:common_utils/common_utils.dart';
import 'package:connectivity/connectivity.dart';
import 'package:device_info/device_info.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:flutter/services.dart';
import 'package:fluwx/fluwx.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/widgets/loading.dart';
import 'package:package_info/package_info.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter/webview_flutter.dart';

import '../app.dart';

typedef BookTimeSetCallback = void Function(bool needChange);

class Utils {
  ///value: 文本内容;fontSize : 文字的大小;fontWeight:文字权重;maxWidth:文本框的最大宽度;maxLines:文本支持最大多少行
  static double calculateTextHeight(
      String value,
      fontSize,
      FontWeight fontWeight,
      double maxWidth,
      int maxLines,
      BuildContext context) {
    // value = filterText(value);
    TextPainter painter = TextPainter(

        ///AUTO:华为手机如果不指定locale的时候,该方法算出来的文字高度是比系统计算偏小的。
        locale: Localizations.localeOf(context, nullOk: true),
        maxLines: maxLines,
        textDirection: TextDirection.ltr,
        text: TextSpan(
            text: value,
            style: TextStyle(
              fontWeight: fontWeight,
              fontSize: fontSize,
            )));
    painter.layout(maxWidth: maxWidth);

    ///文字的宽度:painter.width
    return painter.height;
  }

  static getDateStrFromJiekou(String ms) {
    return DateUtil.formatDate(
        DateTime.fromMillisecondsSinceEpoch(int.parse(ms) * 1000),
        format: DateFormats.full);
  }

  static setBarStatus(bool isDarkIcon,
      {Color color: Colors.transparent}) async {
    if (Platform.isAndroid) {
      if (isDarkIcon) {
        SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(
            statusBarColor: color,
            statusBarIconBrightness: Brightness.dark,
            statusBarBrightness: Brightness.dark);
        SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
      } else {
        SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(
            statusBarColor: color,
            statusBarIconBrightness: Brightness.light,
            statusBarBrightness: Brightness.light);
        SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
      }
    }
  }

  static void showToast(String msg) {
    Fluttertoast.showToast(
        msg: msg, toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.CENTER);
  }

  //本地图片资源路径
  static String getImgPath(String name, {String format: 'png'}) {
    return 'assets/$name.$format';
  }

  //给数字前面加0
  static String addZeroNumber(int num) {
    return num < 10 ? "0" + num.toString() : num.toString();
  }

  //转换日期数字
  static String formatWeekDayNum(int num) {
    switch (num) {
      case 1:
        return "一";
      case 2:
        return "二";
      case 3:
        return "三";
      case 4:
        return "四";
      case 5:
        return "五";
      case 6:
        return "六";
      case 7:
        return "日";
      default:
        return "";
    }
  }

  // 改变状态栏背景颜色,默认改变为透明
  static changeStatusColor({Color color: Colors.white}) async {
    try {
      await FlutterStatusbarcolor.setStatusBarColor(color, animate: false);
      if (useWhiteForeground(color)) {
        FlutterStatusbarcolor.setStatusBarWhiteForeground(true);
      } else {
        FlutterStatusbarcolor.setStatusBarWhiteForeground(false);
      }
    } on PlatformException catch (e) {
      debugPrint(e.toString());
    }
  }

  //跳转拨打电话页面
  static goPhone(String phoneNum) async {
    String url = "tel:$phoneNum";
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      LogUtil.e("Could not launch $url");
    }
  }

  //跳转小程序包间类型置满管理
  static goMiniProgramZm(BuildContext context, String subPath) {
    UserModel model = Provider.of<UserModel>(context, listen: false);
    launchWeChatMiniProgram(
        username: "gh_487873d353b3",
        path:
            "pack-book/pages/book/b_index?seller_id=${model.user.sellerid}&seller_openid=seller_openid&manager_id=&goPath=${subPath}",
        miniProgramType: WXMiniProgramType.RELEASE);
  }

  //分享已点菜品
  static goShareOrderFoodToWeChat(BuildContext context,
      {String title, String rid, String img}) async {
    Loading.showLoading(context);
    String _webPageUrl = "http://colorcun.com/";
    String _thumbnail = img;
    String _title = title;
    String _userName = "gh_487873d353b3";
    String _path =
        "pack-cookbook/pages/success?rid=$rid&identity=2&hasOnlyShow=1";
    String _description = "OneKey";
    var model = new WeChatShareMiniProgramModel(
        webPageUrl: _webPageUrl,
        userName: _userName,
        title: _title,
        path: _path,
        description: _description,
        thumbnail: WeChatImage.network(_thumbnail));
    bool isShare = await shareToWeChat(model);
    print(isShare);
    Loading.hideLoading(context);
  }

  //拉起小程序已点菜品
  static goMiniProgramOrderFood({String rid}) {
    launchWeChatMiniProgram(
        username: "gh_487873d353b3",
        path: "pack-cookbook/pages/success?rid=$rid&identity=2",
        miniProgramType: WXMiniProgramType.RELEASE);
  }

  //跳转拨打电话页面
  static goHelp(BuildContext context) async {
    NavigatorUtil.goWebviewPage(context);
  }

  //获取应用版本昊
  static Future<String> getCurrVersion() async {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    String version = packageInfo.version;
    return version;
  }

  //获取当前构建版本号
  static Future<int> getCurrBuildNum() async {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    return int.parse(packageInfo.buildNumber);
  }

  //获取唯一标识
  static Future<String> getUUID() async {
    DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
    if (Platform.isAndroid) {
      AndroidDeviceInfo androidDeviceInfo = await deviceInfoPlugin.androidInfo;
      return androidDeviceInfo.androidId;
    } else {
      IosDeviceInfo iosDeviceInfo = await deviceInfoPlugin.iosInfo;
      return iosDeviceInfo.identifierForVendor;
    }
  }

  //比较两个日期是否同一天
  static isOneDay(DateTime one, DateTime two) {
    if (one.year == two.year && one.month == two.month && one.day == two.day)
      return true;
    return false;
  }

  //分享邀请函
  static goShareInvicationToWeChat(String rid) async {
    String _webPageUrl = "http://colorcun.com/";
    String _thumbnail =
        "https://qn.colorcun.com/reserve/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_201911151148572.jpg";
    String _title = "用餐已为您安排,点击查看详情";
    String _userName = "gh_487873d353b3";
    String _path = "pages/customer/index?id=$rid&hasInvitation=1";
    String _description = "OneKey";
    var model = new WeChatShareMiniProgramModel(
        webPageUrl: _webPageUrl,
        userName: _userName,
        title: _title,
        path: _path,
        description: _description,
        thumbnail: WeChatImage.network(_thumbnail));
    bool isSuccess = await shareToWeChat(model);
    return isSuccess;
  }

  //检查网络连接
  static Future<bool> checkConnectiviy() async {
    var connectivityResult = await (new Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.mobile) {
      // I am connected to a mobile network.
      return true;
    } else if (connectivityResult == ConnectivityResult.wifi) {
      // I am connected to a wifi network.
      return true;
    }
    return false;
  }

  static String listToString(List<String> list) {
    if (list == null) {
      return null;
    }
    String result;
    list.forEach((string) {
      if (result == null) {
        result = string;
      } else {
        result = '$result,$string';
      }
    });
    return result.toString();
  }

  static String listToStringEnglish(List<String> list) {
    if (list == null) {
      return null;
    }
    String result;
    list.forEach((string) {
      if (result == null) {
        result = string;
      } else {
        result = '$result,$string';
      }
    });
    return result.toString();
  }

  /// 获取日期  今天  明天  后天等等
  static int getDdate(List dateList) {
    String ymyStr = ""; //年月日
    //今天 明天 其他天
    for (var item in dateList) {
      if (item['select'] == true) {
        ymyStr = item['title'];
      }
    }
    String timeStr = ymyStr + ' ' + "00:00:00";
    int ddate = DateUtil.getDateMsByTimeStr(timeStr); //筛选日期时间戳
    return ddate;
  }

  /// 获取早餐、午餐、晚餐字段 1 ,2, 3
  static String getDdateSolt(List sunDateList) {
    String ddateSolt = '';
    for (var item in sunDateList) {
      if (item['isSelect']) {
        ddateSolt = '${item['ddateSolt']}';
      }
    }
    return ddateSolt;
  }

  ///  选中前面的按钮获取人数,输入的自己获取
  static String getPnum(List personNumList) {
    String pnum = '6';
    for (var item in personNumList) {
      if (item['isSelect']) {
        pnum = item['dateText'];
      }
    }
    if (pnum == '更多') {
      pnum = '6';
    }
    return pnum;
  }

  ///工具
  ///  组装成07:00
  static getTimeString(dynamic hour, String minute) {
    return '${hour}:${minute}';
  }

  /// 组装成 07:00-10:00
  static getTimelLongString(String start, String end) {
    return '${start}-${end}';
  }

  /// 从07:00中获取07
  static getHourFromhourAndMinute(String hourAndMinute) {
    return hourAndMinute.substring(0, 2);
  }

  ///从深夜00时中获取00
  static getHourFromTitle(String title) {
    return title.substring(2, 4);
  }

  /// 0 还是 30
  /// 从07:00中获取0 或者 30
  static getMinuteFromhourAndMinute(String hourAndMinute) {
    return hourAndMinute.substring(3, 5);
  }

  /// a < b  则 a = b
  static compareDateTime(String a, String b, BookTimeSetCallback callback) {
    String tempa = '${DateUtil.getNowDateStr().substring(0, 10)} ${a}:00';
    String tempb = '${DateUtil.getNowDateStr().substring(0, 10)} ${b}:00';
    int aMs = DateUtil.getDateMsByTimeStr(tempa);
    int bMs = DateUtil.getDateMsByTimeStr(tempb);
    if (aMs < bMs) {
      callback(true);
    } else {
      callback(false);
    }
  }

  ///获取时间选择器数据
  static getPickerData(String lastTime, List dateData) {
    String hour = Utils.getHourFromhourAndMinute(lastTime);
    String minute = Utils.getMinuteFromhourAndMinute(lastTime);
    if (minute == '30') {
      hour = '${int.parse(hour) + 1}';
    }
    List tempList = List();
    tempList.addAll(dateData);
    tempList.removeRange(0, int.parse(hour));
    if (tempList.length == 0) {
      tempList = [
        {
          '晚上23时': [30]
        }
      ];
    }
    return tempList;
  }
}