import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/physics.dart'; import 'package:flutter/services.dart'; import 'package:makemoney/utils/ui_constant.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:fluttertoast/fluttertoast.dart'; class UIMethodChannel extends MethodChannel { UIMethodChannel(String name) : super(name) { setMethodCallHandler((call) { switch (call.method) { case "resumePage": {} } return Future.value(); }); } } MethodChannel uiMethodChannel = UIMethodChannel('com.yeshi.video/ui'); setStatusBarLight() { uiMethodChannel.invokeMethod("setStatusBarLight"); } setStatusBarDark() { uiMethodChannel.invokeMethod("setStatusBarDark"); } //跳转页面 jumpAppPage(String type, Map? params) { Map ps = {"type": type}; if (params != null) { ps["params"] = params; } //跳转应用界面 uiMethodChannel.invokeMethod("jumpAppPage", ps); } ///包裹整个页面,下拉刷新,,上拉加载的默认配置 Widget getBasePage(Widget widget) { return RefreshConfiguration( headerBuilder: () => const WaterDropHeader(), // 配置默认头部指示器,假如你每个页面的头部指示器都一样的话,你需要设置这个 footerBuilder: () => const ClassicFooter(), // 配置默认底部指示器 headerTriggerDistance: 80.0, // 头部触发刷新的越界距离 springDescription: const SpringDescription(stiffness: 170, damping: 16, mass: 1.9), // 自定义回弹动画,三个属性值意义请查询flutter api maxOverScrollExtent: 100, //头部最大可以拖动的范围,如果发生冲出视图范围区域,请设置这个属性 maxUnderScrollExtent: 0, // 底部最大可以拖动的范围 enableScrollWhenRefreshCompleted: true, //这个属性不兼容PageView和TabBarView,如果你特别需要TabBarView左右滑动,你需要把它设置为true enableLoadingWhenFailed: true, //在加载失败的状态下,用户仍然可以通过手势上拉来触发加载更多 hideFooterWhenNotFull: false, // Viewport不满一屏时,禁用上拉加载更多功能 enableBallisticLoad: true, // 可以通过惯性滑动触发加载更多 child: MaterialApp( //国际化处理 // localizationsDelegates: const [ // // 这行是关键 // RefreshLocalizations.delegate, // ], // supportedLocales: const [ // Locale('en'), // Locale('zh'), // ], // localeResolutionCallback: // (Locale? locale, Iterable supportedLocales) { // //print("change language"); // return locale; // }, home: widget)); } class ToastUtil { static toast(String text, BuildContext context) { if (Constant.NATIVE) { uiMethodChannel.invokeMethod("toast", text); } else { Fluttertoast.showToast(msg: text, toastLength: Toast.LENGTH_SHORT); } } } class DialogUtil { static Future showDialog(BuildContext context, Dialog dialog) async { return await showGeneralDialog( context: context, pageBuilder: (BuildContext buildContext, Animation animation, Animation secondaryAnimation) { return dialog; }); } static Future showDialogBottom(BuildContext context, Widget widget, {BorderRadius? borderRadius, Color? backgroundColor}) async { return await showModalBottomSheet( backgroundColor: backgroundColor ?? Colors.transparent, shape: RoundedRectangleBorder( borderRadius: borderRadius ?? BorderRadius.zero, ), context: context, builder: (BuildContext context) { return widget; }); } } class DimenUtil { //获取像素比 static double getPixelRatio(BuildContext context) { MediaQueryData mediaQuery = MediaQuery.of(context); return mediaQuery.devicePixelRatio; } //获取1像素的取值 static double getOnePixel(BuildContext context) { return 1 / MediaQuery.of(context).devicePixelRatio; } }