Flutter工具集插件sing_plugin_tools的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter工具集插件sing_plugin_tools的使用

安装

在项目的 pubspec.yaml 中添加:

dependencies:
  sing_plugin_tools: ^0.0.26

说明

本项目集成了以下三方插件:

  get: ^4.6.5
  logger: ^2.3.0 # 日志打印
  get_storage: ^2.0.3 # 本地存储插件get_storage, https://pub.dev/packages/get_storage
  flutter_screenutil: ^5.9.0
  dio: ^5.4.3+1
  flutter_easyloading: ^3.0.5 # https://pub.dev/packages/flutter_easyloading loading窗口
  cached_network_image: ^3.4.1 # 带缓存的图片加载,https://pub.dev/packages/cached_network_image

效果图

效果

API

获取 androidId (仅支持 Android)
String androidId = await FlutterPluginTools().getAndroidID() ?? '-1';
请求手机状态权限,仅支持 Android,Android10以上无法获取
var t = await FlutterPluginTools().requestPhoneState() ?? '-1';  
var phoneState = int.tryParse(t) ?? 0; // 权限状态,-1是不可获取,0是拒绝,1是通过
请求 imei,仅支持 Android,Android10 以上无法获取
String androidImei = await FlutterPluginTools().getAndroidImei() ?? '-1';
请求 oaid,仅支持 Android,Android10 以下可能无法获取
String androidOaid = await FlutterPluginTools().getAndroidOaid() ?? '-1';
请求 idfa,仅支持 iOS,记得添加权限
// -1:.denied,-2:.notDetermined,-3:.restricted
String idfa = await FlutterPluginTools().getIosIdfa() ?? '-1'; 
获取 PackageInfo
PackageInfo packageInfo = await _flutterPluginToolsPlugin.getPackageInfo();
获取 DeviceInfo
DeviceInfoAndroid deviceInfoTemp = await SingPluginTools().getDeviceInfoAndroid();
DeviceInfoIos deviceInfoTemp = await SingPluginTools().getDeviceInfoIos();
创建通用列表项
import 'package:sing_plugin_tools/widgets/sing_cell_item.dart';

SingCellItem(
  backgroundColor: Colors.white, // 背景颜色,默认透明
  height: 56.0, // item 的高度
  padding: const EdgeInsets.symmetric(horizontal: 16.0),
  // assetPath: 'assets/images/ic_feedback.png', // 前面 icon 的 asset 路径,为空则不展示
  iconSize: const Size(28.0,28.0), // 前面 icon 的大小,assetPath 为空则不展示
  gap: 12.0, // icon 和标题的间距
  title: '我是Item', // 标题
  titleTextStyle: const TextStyle(color: Color(0xFF131732), fontSize: 16.0), // 标题样式
  decoration: const BoxDecoration(border: Border(bottom: BorderSide(color: Colors.grey, width: 0.2))), // 边框的样式,默认底部一条线
  onTap: () => print('点击主标题'), // item 的点击事件
  // separator: Container(width: 200.0,height: 1.0,color: Colors.grey), // 自定义的装饰,正常是一根线,在 decoration 满足不了的情况下自定义,比如项左右有边距。当然其他 widget 也可以
  showNext: true, // 是否显示右侧箭头
  nextIcon: const Icon(Icons.arrow_forward_ios,size: 16.0,color:Colors.grey), // 右侧的箭头,可以是任何 Widget

  showSub: false, // 是否显示副标题,副标题是一个 TextField
  focusNode: FocusNode(), // 控制副标题的副控件 KeyboardListener
  controller: textController, // TextField 的 controller ,可以设置文字,取值也通过他
  subTitleTextStyle : const TextStyle(color: Color(0xFF131732), fontSize: 14.0), // 副标题样式
  subTitleHint: '请输入副标题', // 副标题的提示语
  subTitleHintTextStyle : const TextStyle(color: Colors.grey, fontSize: 14.0),// 副标题的提示语的样式
  subTitleContentPadding : const EdgeInsets.symmetric(vertical: 12.0), // 副标题的 ContentPadding
  readOnly:false, // 副标题 TextField 的是否能编辑
  onSubTap: () => print('点击副标题'), // 副标题点击事件
  customWidget: Container( // 自定义的 Widget ,在副标题之后,箭头之前,自己控制间距
    decoration: const BoxDecoration(
        color: Color(0xffE9F7FE),
        borderRadius: BorderRadius.all(Radius.circular(8.0))
    ),
    margin: const EdgeInsets.symmetric(horizontal: 5.0),
    child: const Text('  自定义  ',style: TextStyle(color: Colors.grey,fontSize: 12.0))
  )
),
通用按钮
import 'package:sing_plugin_tools/widgets/sing_button.dart';

SingButton(
  title : 'SingButton', // 按钮文字
  titleTextStyle : const TextStyle(color: Colors.white,fontSize: 16.0), // 按钮样式
  fillColor : const Color(0xFF19B1F4),   // 填充颜色
  highlightColor : const Color(0x40CCCCCC), // 按下颜色
  size : const Size(88.0,36.0), // 按钮大小
  elevation : 0, // 阴影
  highlightElevation : 0, // 按下阴影
  side : const BorderSide(color: Colors.transparent,width: 0.2), // 边框
  // sideColor : Colors.transparent, // 传 side 后无效
  // sideWidth : 0.2, // 传 side 后无效
  borderRadius : const BorderRadius.all(Radius.circular(20.0)), // 样式
  // radius : 20.0,  // 传 borderRadius 后无效
  padding: const EdgeInsets.symmetric(horizontal: 12.0,vertical: 3.0),
  margin: EdgeInsets.zero,
  onPressed : () => { }, // 点击事件
  onLongPress : () => debugPrint('SingButton Long Clicked'),
),
类似 Gird 的图片+文字,支持小标题
var list = [
  ImgTxtBean('assets/images/example.png', '标签1', onTap: () => debugPrint('标签1')),
  ImgTxtBean('assets/images/example.png', '标签2', onTap: () => debugPrint('标签2')),
  ImgTxtBean('assets/images/example.png', '标签3', onTap: () => debugPrint('标签3')),
  ImgTxtBean('assets/images/example.png', '标签4', onTap: () => debugPrint('标签4')),
  ImgTxtBean('assets/images/example.png', '标签5', onTap: () => debugPrint('标签5')),
];
SingImgTxtItem(
  list,
  title: '我的标题',
  titleGap: 15.0,
  gap: 6.0,
  margin: const EdgeInsets.symmetric(horizontal: 15.0),
  padding: const EdgeInsets.all(15.0),
  iconSize: const Size(25.0,25.0),
  crossAxisCount:5,
);
EventBusUtil
EventBusUtil.singleton.send('aaa');
LogUtil
Log.init(true); // 是否开启日志打印
Log.e('test')
SpUtil
SpUtil.init(SpUtil.spKey);
SpUtil.write('key', 'value');
SpUtil.read('key', 'defaultValue');
SingUtil
// 各种工具
SingUtil.maskPhone('13111111111'); // 手机号中间4位用 * 代替,返回 131****1111
SingDashedLine
SingDashedLine(
  color: Colors.red,
  dashWidth: 5.0,
  dashSpace: 3.0,
  width: 100.0,       // 可选参数,默认为200.0
)
SingContainerLinearGradient 渐变背景
SingContainerLinearGradient(
  width: Get.width - 30.w,
  height: 100.0,
  colors: [AppColor.main, const Color(0xff00ffff)],
  begin: Alignment.topCenter,
  end: Alignment.bottomCenter,
  child:Text('SingContainerLinearGradient',style: text_white_18)
)
SingImage
SingImage('images/image.webp',width: 40.w),
SingImage('images/image.webp',width: 40.w,cornerRadius:8.w),
SingImage('images/image.webp',width: 40.w - 2.w,cornerRadius:8.w,borderWidth: 1.w,borderColor: AppColor.green),
SingImage('images/image.webp',width: 40.w,isCircle: true),
SingImage('images/image.webp',width: 40.w - 2.w,isCircle: true,borderWidth: 1.w,borderColor: AppColor.green),
SingImage('https://xxx.png',width: 40.w,isCircle: true),
SingImage('https://xxx.png',width: 40.w - 2.w,isCircle: true,borderWidth: 1.w,borderColor: AppColor.green),

后续工具继续补充…


示例代码

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:sing_plugin_tools/export.dart';
import 'package:sing_plugin_tools/method_channel/sing_plugin_tools.dart';
import 'package:sing_plugin_tools/widgets/sing_cell_item.dart';
import 'package:sing_plugin_tools/widgets/sing_button.dart';
import 'package:sing_plugin_tools/widgets/sing_img_txt_item.dart';

import 'home.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  [@override](/user/override)
  Widget build(BuildContext context) {
    ScreenUtil.init(context);
    return ScreenUtilInit(
      designSize: const Size(375, 812),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: (context , child) {
        return GetMaterialApp(
          title: 'Flutter Plugins',
          theme: ThemeData(
            brightness: Brightness.light, // 深色还是浅色,也就是暗黑模式还是正常模式 电池栏颜色
            primaryColor: Colors.black, // 顶部导航栏和状态栏的颜色修改,需要用到这个属性,类型 Color。
            colorScheme: const ColorScheme.light().copyWith(primary: Colors.white),
            primarySwatch: Colors.green,
            appBarTheme: const AppBarTheme(
                backgroundColor: Colors.white,
                scrolledUnderElevation: 0.0,
                centerTitle: true
            )
          ),
          debugShowCheckedModeBanner:false, // 隐藏debug标识
          home: const Home(),
          builder: EasyLoading.init(builder: (context, widget) {
            return MediaQuery(
              data: MediaQuery.of(context).copyWith(textScaler: TextScaler.noScaling), /// 设置文字大小不随系统设置改变
              child: widget!,
            );
          }),
          defaultTransition: Transition.cupertino, // https://blog.csdn.net/yang_6799/article/details/131966520
        );
      }
    );
  }
}

更多关于Flutter工具集插件sing_plugin_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter工具集插件sing_plugin_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,sing_plugin_tools 是一个用于简化和加速插件开发的工具集。尽管具体的插件实现和用法可能因版本和具体需求而有所不同,但以下是一个示例代码案例,展示了如何在Flutter项目中使用一个假设的 sing_plugin_tools 插件来执行一些常见任务,比如生成代码或管理依赖项。

请注意,由于 sing_plugin_tools 不是一个广泛认知的开源插件(在撰写此回答时),以下示例将基于一个假设的工具集功能进行说明。如果你正在使用一个具体的 sing_plugin_tools 插件,请参考其官方文档以获取准确的使用方法。

假设的 sing_plugin_tools 插件功能

假设 sing_plugin_tools 提供以下功能:

  1. 自动生成代码(如Dart模型类)。
  2. 管理Flutter插件依赖项。

示例代码

1. 添加依赖项

首先,你需要在 pubspec.yaml 文件中添加对 sing_plugin_tools 的依赖项(假设它已经发布在pub.dev上):

dependencies:
  flutter:
    sdk: flutter
  sing_plugin_tools: ^x.y.z  # 替换为实际版本号

然后运行 flutter pub get 来获取依赖项。

2. 使用 sing_plugin_tools 生成代码

假设 sing_plugin_tools 提供了一个命令行工具来生成Dart模型类,我们可以使用如下代码来调用这个功能:

import 'package:sing_plugin_tools/sing_plugin_tools.dart';

void main() {
  // 假设sing_plugin_tools提供了一个generateModels函数
  generateModels(inputJsonPath: 'assets/data_schema.json', outputDartPath: 'lib/models/');
}

实际上,由于这是一个命令行工具,你可能需要在 pubspec.yamlscripts 部分定义一个脚本,然后在命令行中运行它:

scripts:
  generate_models: dart bin/generate_models.dart

然后在 bin/generate_models.dart 文件中:

import 'package:args/args.dart';
import 'package:sing_plugin_tools/sing_plugin_tools.dart' as tools;

void main(List<String> arguments) {
  final ArgParser parser = ArgParser();
  parser.addOption('inputJsonPath', abbr: 'i', help: 'Path to the input JSON schema file.');
  parser.addOption('outputDartPath', abbr: 'o', help: 'Path to output the generated Dart files.');

  final ArgResults results = parser.parse(arguments);
  final String inputJsonPath = results['inputJsonPath'] ?? 'assets/data_schema.json';
  final String outputDartPath = results['outputDartPath'] ?? 'lib/models/';

  tools.generateModels(inputJsonPath: inputJsonPath, outputDartPath: outputDartPath);
}

然后你可以在命令行中运行:

flutter pub run generate_models --inputJsonPath=assets/data_schema.json --outputDartPath=lib/models/

3. 管理Flutter插件依赖项

假设 sing_plugin_tools 还提供了一个管理依赖项的功能,你可以使用类似的方式来调用它:

import 'package:sing_plugin_tools/sing_plugin_tools.dart';

void main() {
  // 假设sing_plugin_tools提供了一个updateDependencies函数
  updateDependencies(dependenciesFile: 'pubspec.yaml', upgrade: true);
}

同样,你可能需要将其封装在一个脚本中,并在命令行中运行。

注意

  • 上述代码是基于假设的 sing_plugin_tools 功能编写的,实际使用时请参考该插件的官方文档。
  • 如果 sing_plugin_tools 实际上是一个命令行工具而不是一个Dart包,你可能需要直接在命令行中运行它提供的命令,而不是在Dart代码中导入和使用它。
  • 确保你已经正确安装了所有必要的依赖项,并遵循了 sing_plugin_tools 的安装和使用指南。
回到顶部