Flutter多功能实用插件flustars的使用
Flutter多功能实用插件flustars的使用
简介
flustars
是一个Flutter常用的工具类库,依赖于Dart常用工具类库common_utils,并对其他第三方库进行了封装。它致力于为开发者提供简单易用的工具类,包含但不限于SharedPreferences Util、Screen Util、Directory Util、Widget Util和Image Util等。如果你有好的工具类欢迎PR。
安装与配置
在你的项目中添加flustars
依赖,请修改pubspec.yaml
文件:
dependencies:
flustars: ^2.0.1
# 如果需要使用sp_util,可以单独引用
sp_util: ^2.0.3
然后执行flutter packages get
来获取依赖。
主要功能模块
SpUtil - SharedPreferences工具类
SpUtil
是单例"同步"SharedPreferences工具类,支持get传入默认值,支持存储对象及对象数组。
示例代码
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SpUtil.getInstance();
runApp(MyApp());
}
class MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// 存取基础类型
SpUtil.putString("username", "Sky24n");
String userName = SpUtil.getString("username");
print("MyHomePage userName: " + userName);
// 存储实体对象示例
City city = City(name: "成都市");
SpUtil.putObject("loc_city", city);
City hisCity = SpUtil.getObj("loc_city", (v) => City.fromJson(v));
print("City: " + (hisCity == null ? "null" : hisCity.toString()));
}
}
ScreenUtil - 屏幕适配工具类
ScreenUtil
提供了屏幕适配的功能,包括获取屏幕宽高、密度、状态栏高度等,并支持根据设计稿尺寸进行自动适配。
示例代码
import 'package:flustars/flustars.dart';
class MainPageState extends State<MainPage> {
@override
Widget build(BuildContext context) {
double statusBar = ScreenUtil.getInstance().statusBarHeight;
double width = ScreenUtil.getInstance().screenWidth;
double height = ScreenUtil.getInstance().screenHeight;
double density = ScreenUtil.getInstance().screenDensity;
double adapterW = ScreenUtil.getInstance().getAdapterSize(360);
return Scaffold(
appBar: AppBar(title: Text('Flustars Demos')),
body: Column(
children: [
Container(
width: ScreenUtil.getInstance().getAdapterSize(360.0),
height: 50,
color: Colors.grey,
child: Center(child: Text("已适配宽")),
),
],
),
);
}
}
DirectoryUtil - 目录操作工具类
DirectoryUtil
用于创建和获取应用目录路径,如临时目录、文档目录等。
示例代码
await DirectoryUtil.getInstance();
String tempPath = DirectoryUtil.getTempPath(category: 'Pictures', fileName: 'demo', format: 'png');
print("tempPath: $tempPath");
String appDocPath = DirectoryUtil.getAppDocPath(category: 'Pictures', fileName: 'demo', format: 'png');
print("appDocPath: $appDocPath");
WidgetUtil - 组件操作工具类
WidgetUtil
提供了监听Widget渲染状态、获取Widget宽高等功能。
示例代码
WidgetUtil widgetUtil = new WidgetUtil();
widgetUtil.asyncPrepare(context, true, (Rect rect) {
// widget渲染完成。
});
Rect rect = WidgetUtil.getWidgetBounds(context);
Offset offset = WidgetUtil.getWidgetLocalToGlobal(context);
ImageUtil - 图片处理工具类
ImageUtil
用于获取网络或本地图片尺寸。
示例代码
Rect rect1 = await WidgetUtil.getImageWH(image: Image.network("Url"));
Rect rect2 = await WidgetUtil.getImageWH(url: "Url");
Rect rect3 = await WidgetUtil.getImageWH(localUrl: "assets/images/3.0x/ali_connors.png");
完整示例Demo
以下是一个完整的示例程序,演示了如何使用flustars
中的多个工具类。
import 'package:flustars/flustars.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
_initAsync();
setDesignWHD(360.0, 640.0, density: 3);
}
void _initAsync() async {
await SpUtil.getInstance();
SpUtil.putString("username", "sky24");
String? userName = SpUtil.getString("username", defValue: "");
LogUtil.e("userName: $userName");
City city = City(name: "成都市");
SpUtil.putObject("loc_city", city);
City? hisCity = SpUtil.getObj(
"loc_city", (v) => City.fromJson(v as Map<String, dynamic>));
LogUtil.e("City: " + (hisCity == null ? "null" : hisCity.toString()));
List<City> list = [];
list.add(City(name: "成都市"));
list.add(City(name: "北京市"));
SpUtil.putObjectList("loc_city_list", list);
List<City>? dataList = SpUtil.getObjList(
"loc_city_list", (v) => City.fromJson(v as Map<String, dynamic>));
LogUtil.e("CityList: " + (dataList == null ? "null" : dataList.toString()));
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MainPage(),
);
}
}
class MainPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MainPageState();
}
}
class MainPageState extends State<MainPage> {
void test2() async {
await DirectoryUtil.getInstance();
String? tempPath = DirectoryUtil.getTempPath(
category: 'Pictures', fileName: 'demo', format: 'png');
LogUtil.e("tempPath: $tempPath");
String? appDocPath = DirectoryUtil.getAppDocPath(
category: 'Pictures', fileName: 'demo', format: 'png');
LogUtil.e("appDocPath: $appDocPath");
}
@override
Widget build(BuildContext context) {
MediaQuery.of(context);
double statusBar = ScreenUtil.getInstance().statusBarHeight;
double width = ScreenUtil.getInstance().screenWidth;
double height = ScreenUtil.getInstance().screenHeight;
double density = ScreenUtil.getInstance().screenDensity;
double sp = ScreenUtil.getInstance().getAdapterSize(24);
double spc = ScreenUtil.getInstance().getAdapterSize(24);
double adapterW = ScreenUtil.getInstance().getAdapterSize(360);
LogUtil.e(
"MainPage statusBar: $statusBar, width: $width, height: $height, density: $density, sp: $sp, spc: $spc, adapterW: $adapterW");
return Scaffold(
appBar: AppBar(
title: const Text('Flustars Demos'),
centerTitle: true,
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
width: 360.0,
height: 50,
color: Colors.grey,
child: Center(
child: Text(
"未适配宽",
style: TextStyle(fontSize: 24.0),
),
),
),
Container(
width: ScreenUtil.getInstance().getAdapterSize(360.0),
height: 50,
color: Colors.grey,
child: Center(
child: Text(
"已适配宽",
style: TextStyle(fontSize: 24.0),
),
),
),
],
),
);
}
}
class City {
String name;
City({required this.name});
City.fromJson(Map<String, dynamic> json) : name = json['name'];
Map<String, dynamic> toJson() => {
'name': name,
};
@override
String toString() {
StringBuffer sb = StringBuffer('{');
sb.write("\"name\":\"$name\"");
sb.write('}');
return sb.toString();
}
}
通过上述代码,您可以快速上手并利用flustars
提供的强大功能来简化您的开发工作。希望这些内容能帮助您更好地理解和使用flustars
。如果有任何问题或建议,请随时联系作者Sky24n。
更多关于Flutter多功能实用插件flustars的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter多功能实用插件flustars的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,Flutter 社区中 flustars
是一个非常实用的多功能插件,它提供了许多便捷的功能,比如设备信息获取、屏幕适配、本地化、共享偏好设置等。下面是一些关于如何使用 flustars
的代码示例。
首先,确保你已经在 pubspec.yaml
文件中添加了 flustars
依赖:
dependencies:
flutter:
sdk: flutter
flustars: ^x.x.x # 请替换为最新版本号
然后运行 flutter pub get
以获取依赖。
1. 获取设备信息
flustars
提供了 DeviceUtils
类来获取设备信息。
import 'package:flustars/flustars.dart';
void printDeviceInfo() {
String brand = DeviceUtils.brand;
String model = DeviceUtils.model;
String systemVersion = DeviceUtils.systemVersion;
bool isAndroid = DeviceUtils.isAndroid;
bool isIOS = DeviceUtils.isIOS;
print('Brand: $brand');
print('Model: $model');
print('System Version: $systemVersion');
print('Is Android: $isAndroid');
print('Is iOS: $isIOS');
}
2. 屏幕适配
flustars
提供了 ScreenUtil
类来进行屏幕适配。
import 'package:flutter/material.dart';
import 'package:flustars/flustars.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 初始化ScreenUtil
ScreenUtil.init(context, width: 750, height: 1334, allowFontScaling: true);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Screen Util Demo'),
),
body: Center(
child: Text(
'Screen Width: ${ScreenUtil().screenWidth} px\n'
'Screen Height: ${ScreenUtil().screenHeight} px\n'
'Text Size: ${ScreenUtil().setSp(24)}',
style: TextStyle(fontSize: ScreenUtil().setSp(24)),
),
),
),
);
}
}
3. 本地化
flustars
提供了 LocalizationsUtils
类来简化本地化工作。
首先,创建 assets/i18n
目录,并在其中创建不同语言的 JSON 文件,比如 en.json
和 zh.json
。
// assets/i18n/en.json
{
"hello": "Hello"
}
// assets/i18n/zh.json
{
"hello": "你好"
}
然后在代码中初始化并使用本地化:
import 'package:flutter/material.dart';
import 'package:flustars/flustars.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 初始化LocalizationsUtils
LocalizationsUtils.instance.init(
context,
keys: ['hello'],
defaultLocale: Locale('en', 'US'),
locales: [
Locale('en', 'US'),
Locale('zh', 'CN'),
],
);
return MaterialApp(
supportedLocales: LocalizationsUtils.instance.locales,
locale: LocalizationsUtils.instance.currentLocale,
localizationsDelegates: [
// 添加其他委托
LocalizationsUtils.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
home: Scaffold(
appBar: AppBar(
title: Text('Localization Demo'),
),
body: Center(
child: Text(LocalizationsUtils.instance.tr('hello')),
),
),
);
}
}
4. 共享偏好设置
flustars
提供了 SpUtil
类来简化共享偏好设置的操作。
import 'package:flustars/flustars.dart';
void saveAndRetrieveData() async {
// 保存数据
await SpUtil.putString('key_string', 'Hello, Flustars!');
await SpUtil.putInt('key_int', 123);
await SpUtil.putBool('key_bool', true);
await SpUtil.putDouble('key_double', 45.67);
// 检索数据
String? stringValue = await SpUtil.getString('key_string');
int? intValue = await SpUtil.getInt('key_int');
bool? boolValue = await SpUtil.getBool('key_bool');
double? doubleValue = await SpUtil.getDouble('key_double');
print('String Value: $stringValue');
print('Int Value: $intValue');
print('Bool Value: $boolValue');
print('Double Value: $doubleValue');
}
这些代码示例展示了如何使用 flustars
插件进行设备信息获取、屏幕适配、本地化和共享偏好设置等操作。你可以根据具体需求调整和扩展这些代码。