Flutter多功能辅助插件flustars_flutter3的使用

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

Flutter多功能辅助插件flustars_flutter3的使用

依赖配置

在您的pubspec.yaml文件中添加以下依赖:

dependencies:
  flustars: ^2.0.1
  
  # sp_util分拆成单独的库,可以直接引用
  sp_util: ^2.0.3

主要功能模块介绍

  1. SpUtil:单例"同步"SharedPreferences工具类。支持get传入默认值,支持存储对象,支持存储对象数组。
  2. ScreenUtil:屏幕适配,获取屏幕宽、高、密度,AppBar高,状态栏高度,屏幕方向。
  3. WidgetUtil:监听Widget渲染状态,获取Widget宽高,在屏幕上的坐标,获取网络/本地图片尺寸。
  4. DioUtil:单例Dio网络工具类(已迁移至此处[DioUtil])。
  5. 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.jsonzh.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插件进行设备信息获取、屏幕适配、本地化和国际化以及共享偏好设置。你可以根据具体需求进一步扩展这些功能。

回到顶部