dd_js_util

✅ 梁典典的工具插件包

flutter 通用工具类 pub地址: pub.flutter-io.cn/packages/dd_js_util

开始使用

主题能力已拆分(7.1.0 起)

AppThemeUtil / ThemeBuildWidget / ThemeSettingPage / changeThemeWithEnum 已移到独立包 simple_ui_theme,本包不再提供这些 API。

dio 封装

//1.声明接口,域名放在 options 里(BaseApi.host 已移除)
class BlogsApi extends BaseApi {
  BlogsApi() : super("/blogs") {
    options = options.copyWith(baseUrl: 'https://itbug.shop');
  }
}

//2.使用接口
void fetchBlogs(){
  BlogsApi().request(); //发起请求
}

///-----------高级用法
///如果有特殊需求,比如添加拦截器等等
class UserProfileApi extends BaseApi{
  UserProfileApi():super('/user/profile',httpMethod:HttpMethod.post){
    //添加拦截器(interceptions 是 ISet,base 里的拦截器每次请求只会注册一次)
    interceptions = interceptions.add(TokenInterceptor());
  }

  ///获取添加参数
  set token(String tokenValue) => params['token'] = tokenValue
}

//使用
final api = UserProfileApi()..token = 'your token';
api.request(); //发起请求

判断是否微信浏览器

final result = await DdJsUtil.isWeChatBrowser; // true or false

String 扩展

  • 下载图片到本地相册String#downloadImage
// 示例
// [checkPermission]: 下载前是否检测一下是否有访问相册的权限,默认false
// [isAsset]: 是否为本地资产图片,默认false
"https://itbug.shop/logo.png".downloadImage(checkPermission:true,isAsset:false);

组件

  • 倒计时组件
//示例
CountDown(
  endTime: "${data.toIso8601String()}",
  onEnd: (){
    print('倒计时结束');
  },
  autoStart: false,
  controller: _controller,
),
  • 九宫格选择图片
PictureSelection(multipleChoice: true,controller: _pictureSelectionController,),
  1. 用法
final files = _pictureSelectionController.getFiles;//获取全部图片
_pictureSelectionController.clean();//清空用户选择的图片
///更多方法查看控制器类

本地图片压缩

/// file <- 压缩后的文件
/// 参数1 <- 要讲压缩后的图片保存到哪个路径
/// 参数2 [quality] <- 压缩质量
File? file = "file path".fileImageCompress("to file path",quality: 50);

图片放大

/// [images] 支持网络图与本地文件, [index] 是初始显示第几张
ImagePreview(
  images: [
    PictureSelectionItemModel.network(url: 'https://a.com/a.png'),
    PictureSelectionItemModel.file(file: File('/sdcard/a.png')),
  ],
  index: 0,
);

/// 需要自定义转场/指示器时直接用 PicSwiper
PicSwiper(pics, initIndex: 0, indexBuilder: (index, count) => Text('$index/$count'));

日期选择组件

1.导包

  # 导入国际化包
  flutter_localizations:
    sdk: flutter

2.引入

GetMaterialApp(
      localizationsDelegates: [
        
        //这个要在第一位
        MyLocalizationsDelegate(), //导入1
        GlobalMaterialLocalizations.delegate,//导入2
        GlobalWidgetsLocalizations.delegate,//导入3
        GlobalCupertinoLocalizations.delegate,//导入4

      ],
      supportedLocales: [
        const Locale('zh', 'CH'),//导入1
        const Locale('en', 'US'),//导入2
      ],
)

3.使用组件

              SizedBox(
                width: 700,
                height: 200,
                child: CupertinoDatePicker(
                  hideDay: true,
                  mode: CupertinoDatePickerMode.date,
                  onDateTimeChanged: (DateTime value) {
                    print(value);
                  },
                ),
              )

4.效果 Xr1UR1.jpg

键盘工具

KeyboardMixin核心类

在ConsumerState混入使用扩展

class _ChatEditState extends ConsumerState<ChatEdit> with KeyboardMixin<ChatEdit>
1.监听键盘高度

ref 是框架riverpod状态管理中的类

ref.watchKeyBoardHeight; //键盘高度实时获取
2.回调函数
///键盘展示回调
///[height] - 键盘实时高度
void onShow(double height){}

///键盘关闭回调
void onClose(){}

///将键盘高度设置为0
void reset(){}

WrapJson 扩展

让你的Map<String,dynamic>拥有强大的函数