Flutter多功能辅助插件flustars_flutter3的使用
Flutter多功能辅助插件flustars_flutter3的使用
依赖配置
在您的pubspec.yaml
文件中添加以下依赖:
dependencies:
flustars: ^2.0.1
# sp_util分拆成单独的库,可以直接引用
sp_util: ^2.0.3
主要功能模块介绍
- SpUtil:单例"同步"SharedPreferences工具类。支持get传入默认值,支持存储对象,支持存储对象数组。
- ScreenUtil:屏幕适配,获取屏幕宽、高、密度,AppBar高,状态栏高度,屏幕方向。
- WidgetUtil:监听Widget渲染状态,获取Widget宽高,在屏幕上的坐标,获取网络/本地图片尺寸。
- DioUtil:单例Dio网络工具类(已迁移至此处[DioUtil])。
- ImageUtil:获取网络/本地图片尺寸。
示例代码
SpUtil 示例
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SpUtil.getInstance(); // 等待sp初始化完成后再运行app
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);
bool isFirst = SpUtil.getBool("userName", defValue: true);
SpUtil.putBool("isFirst", false);
print("MyHomePage isFirst: $isFirst");
/// 存储实体对象示例
City city = new 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()));
/// 存储实体对象list示例
List<City> list = new List();
list.add(new City(name: "成都市"));
list.add(new City(name: "北京市"));
SpUtil.putObjectList("loc_city_list", list);
List<City> _cityList = SpUtil.getObjList("loc_city_list", (v) => City.fromJson(v));
print("City list: " + (_cityList == null ? "null" : _cityList.toString()));
}
@override
Widget build(BuildContext context) {
return MaterialApp();
}
}
ScreenUtil 示例
// 不依赖context
double screenWidth = ScreenUtil.getInstance().screenWidth; // 屏幕宽
double screenHeight = ScreenUtil.getInstance().screenHeight; // 屏幕高
double screenDensity = ScreenUtil.getInstance().screenDensity; // 屏幕像素密度
double statusBarHeight = ScreenUtil.getInstance().statusBarHeight; // 系统状态栏高度
double bottomBarHeight = ScreenUtil.getInstance().bottomBarHeight; // BottomBar高度
double appBarHeight = ScreenUtil.getInstance().appBarHeight; // 系统AppBar高度
double adapterW100 = ScreenUtil.getInstance().getWidth(100); // 根据屏幕宽适配后尺寸
double adapterH100 = ScreenUtil.getInstance().getHeight(100); // 根据屏幕高适配后尺寸
double adapterSp100 = ScreenUtil.getInstance().getSp(100); // 根据屏幕宽适配后字体尺寸
double adapterW100px = ScreenUtil.getInstance().getWidthPx(300); // 根据屏幕宽适配后尺寸(输入px)
double adapterH100px = ScreenUtil.getInstance().getHeightPx(300); // 根据屏幕高适配后尺寸(输入px)
// 依赖context
double screenWidthCtx = ScreenUtil.getScreenW(context); // 屏幕宽
double screenHeightCtx = ScreenUtil.getScreenH(context); // 屏幕高
double screenDensityCtx = ScreenUtil.getScreenDensity(context); // 屏幕像素密度
double statusBarHeightCtx = ScreenUtil.getStatusBarH(context); // 系统状态栏高度
double bottomBarHeightCtx = ScreenUtil.getBottomBarH(context); // BottomBar高度
double adapterW100Ctx = ScreenUtil.getScaleW(context, 100); // 根据屏幕宽适配后尺寸
double adapterH100Ctx = ScreenUtil.getScaleH(context, 100); // 根据屏幕高适配后尺寸
double adapterSp100Ctx = ScreenUtil.getScaleSp(context, 100); // 根据屏幕宽适配后字体尺寸
Orientation orientation = ScreenUtil.getOrientation(context); // 屏幕方向
WidgetUtil 示例
/// widget渲染监听
WidgetUtil widgetUtil = new WidgetUtil();
widgetUtil.asyncPrepare(context, true, (Rect rect) {
// widget渲染完成
});
/// 获取widget宽高
Rect rect = WidgetUtil.getWidgetBounds(context);
/// 获取widget在屏幕上的坐标
Offset offset = WidgetUtil.getWidgetLocalToGlobal(context);
/// 获取网络图片尺寸
Rect rect2 = await WidgetUtil.getImageWH(url: "Url");
/// 获取本地图片尺寸 localUrl 需要全路径
Rect rect3 = await WidgetUtil.getImageWH(localUrl: "assets/images/3.0x/ali_connors.png");
/// 其他方式
WidgetUtil.getImageWH(url: "Url").then((Rect rect) {
print("rect: " + rect.toString());
});
更多关于Flutter多功能辅助插件flustars_flutter3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter多功能辅助插件flustars_flutter3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用flustars_flutter3
多功能辅助插件的示例代码。flustars_flutter3
是一个提供多种实用功能的Flutter插件,包括设备信息、屏幕适配、本地化、共享偏好设置等。
首先,确保你的Flutter项目已经创建,并在pubspec.yaml
文件中添加flustars_flutter3
依赖:
dependencies:
flutter:
sdk: flutter
flustars_flutter3: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,让我们看看如何使用flustars_flutter3
中的一些功能。
1. 获取设备信息
import 'package:flutter/material.dart';
import 'package:flustars_flutter3/flustars_flutter3.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flustars Flutter3 Demo'),
),
body: Center(
child: DeviceInfoWidget(),
),
),
);
}
}
class DeviceInfoWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final deviceInfo = DeviceUtil.deviceInfo;
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Brand: ${deviceInfo['brand']}'),
Text('Model: ${deviceInfo['model']}'),
Text('System Version: ${deviceInfo['systemVersion']}'),
],
);
}
}
2. 屏幕适配
import 'package:flutter/material.dart';
import 'package:flustars_flutter3/flustars_flutter3.dart';
class ScreenAdaptWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 设置设计稿的宽度(一般为375)
ScreenUtil.init(context, designSizeWidth: 375, designSizeHeight: 667);
return Scaffold(
appBar: AppBar(
title: Text('Screen Adapt Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Adapted Text',
style: TextStyle(fontSize: ScreenUtil().setSp(24)), // 使用setSp进行字体适配
),
SizedBox(
height: ScreenUtil().setHeight(100), // 使用setHeight进行高度适配
),
Container(
width: ScreenUtil().setWidth(200), // 使用setWidth进行宽度适配
height: ScreenUtil().setHeight(200),
color: Colors.blue,
),
],
),
),
);
}
}
3. 本地化和国际化
首先,在assets
目录下创建locales
文件夹,并在其中创建语言文件,例如en.json
和zh.json
。
en.json
:
{
"welcome": "Welcome"
}
zh.json
:
{
"welcome": "欢迎"
}
然后在代码中:
import 'package:flutter/material.dart';
import 'package:flustars_flutter3/flustars_flutter3.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 初始化国际化
Flustars.localizeInit(context, [
'assets/locales/en.json',
'assets/locales/zh.json',
]);
// 设置当前语言(例如中文)
Flustars.setLocale(Locale('zh'));
return MaterialApp(
localizationsDelegates: [
// 添加FlustarsLocalizationsDelegate
FlustarsLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
Locale('en'),
Locale('zh'),
],
home: Scaffold(
appBar: AppBar(
title: Text('Localization Demo'),
),
body: Center(
child: Text(Flustars.localize('welcome')),
),
),
);
}
}
4. 共享偏好设置
import 'package:flutter/material.dart';
import 'package:flustars_flutter3/flustars_flutter3.dart';
class SharedPreferencesDemo extends StatefulWidget {
@override
_SharedPreferencesDemoState createState() => _SharedPreferencesDemoState();
}
class _SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
String _savedValue = '';
void _saveValue() async {
final prefs = await SpUtil.getInstance();
await prefs.setString('my_key', 'Hello, Flustars!');
setState(() {
_savedValue = (await prefs.getString('my_key')) ?? '';
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SharedPreferences Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Saved Value: $_savedValue'),
ElevatedButton(
onPressed: _saveValue,
child: Text('Save Value'),
),
],
),
),
);
}
}
以上代码示例展示了如何使用flustars_flutter3
插件进行设备信息获取、屏幕适配、本地化和国际化以及共享偏好设置。你可以根据具体需求进一步扩展这些功能。