dd_js_util 6.1.9 copy "dd_js_util: ^6.1.9" to clipboard
dd_js_util: ^6.1.9 copied to clipboard

flutter tools and widgets and extends

dd_js_util #

✅ 梁典典的工具插件包

flutter 通用工具类 pub地址: https://pub.dev/packages/dd_js_util

开始使用 #

2022.11.16 更新: 让你的APP添加强大的更换主题能力 #

只需要3步.

  • 注册
void main(){
  AppThemeUtil().registerAdapterAndOpenBox();
}
  • 开始使用

使用ThemeBuildWidget包裹MaterialApp

      ThemeBuildWidget(themeBuild: (appThemeSetting) {
        return MaterialApp(
          theme: MyAppTheme.getTheme(appThemeSetting.themeIndex),
          themeMode: appThemeSetting.getThemeMode
        );
      })
  • 前往更换主题设置页面
context.navToWidget(to: ThemeSettingPage());
  • 更换主题API
AppThemeUtil().changeThemeWithEnum(CustomAppThemeData theme);//参数是主题枚举

dio 封装 #

//1.初始化,换成你的域名
BaseApi.host='https://itbug.shop';

//2.声明接口
class BlogsApi extends BaseApi {
  BlogsApi():super("/blogs");
}

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

///-----------高级用法
///如果有特殊需求,比如添加拦截器等等
class UserProfileApi extends BaseApi{
  UserProfileApi():super('/user/profile',httpMethod:HttpMethod.post){
    //添加拦截器
    intrtceptors.add(TokenIntrtceptors());
  }

  ///获取添加参数
  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);

图片放大 #

/// 参数1: 图片列表
/// 参数2: 初始化显示第几张图片
/// 参数3: 是否为本地类型图片,如果是,参数1需要替换为File的路径
ImageView(images: ["网络图片","网络图片"],initCurrent: 0,isFile: false);

日期选择组件 #

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>拥有强大的函数