Flutter多功能工具插件utility_flutter的使用

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

Flutter多功能工具插件utility_flutter的使用

此包提供了处理常见的HTTP和共享偏好设置操作的综合工具。它围绕httpshared_preferences包构建,无缝集成到Flutter和Dart应用程序中,提供诸如设置默认头、配置请求超时、提供标准化错误响应以及在设备上存储小变量等功能。

pub package

🌟 特性

HttpUtils

简化HTTP请求

通过几行代码即可执行GET、POST、PUT和DELETE操作。

一致的基础URL

定义一次基础URL,无需为每次请求重复输入。

默认头

轻松设置默认头,自动伴随每次HTTP请求。

超时

默认超时持续时间确保您的请求不会无限期挂起。

标准化错误

更好地理解和处理HTTP错误,使用标准化错误响应。

创建HttpUtils实例

通过提供API的基础URL创建HttpUtils类的实例。还可以指定可选参数如defaultHeaders和timeoutDuration。例如:

final httpUtils = HttpUtils('https://api.example.com', defaultHeaders: {
  'Authorization': 'Bearer your_token_here',
});
GET请求
try {
  final response = await httpUtils.get('/endpoint');
  // 处理响应
} catch (e) {
  // 处理错误
}
POST请求
try {
  final body = {'key': 'value'};
  final response = await httpUtils.post('/endpoint', body: body);
  // 处理响应
} catch (e) {
  // 处理错误
}
PUT请求
try {
  final body = {'key': 'value'};
  final response = await httpUtils.put('/endpoint', body: body);
  // 处理响应
} catch (e) {
  // 处理错误
}
DELETE请求
try {
  final response = await httpUtils.delete('/endpoint');
  // 处理响应
} catch (e) {
  // 处理错误
}

如果您的API不需要默认头或头,您无需初始化这些。

PreferencesUtils

初始化PreferencesUtils实例

在项目中使用。

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 在主函数中使用异步方法所需。
  final preferences = PreferencesUtils();
  await preferences.init();

  runApp(MyApp());
}
初始化PreferencesUtils实例
// 获取PreferencesUtils实例。
final preferences = PreferencesUtils();

// 存储数据:
await preferences.setBool('isDarkMode', true);
await preferences.setInt('userAge', 25);
await preferences.setDouble('userHeight', 175.5);
await preferences.setString('username', 'navneet');

isDarkMode, userAge, userHeight, username 这些是键,使用这些可以从您的设备获取存储的数据。

获取数据
bool isDarkMode = preferences.getBool('isDarkMode');
int userAge = preferences.getInt('userAge');
double userHeight = preferences.getDouble('userHeight');
String username = preferences.getString('username');

// 清除偏好设置:
preferences.clear();

🚀 快速开始

前提条件

要使用此包:

  • 确保您已安装Flutter和Dart SDK。

安装

  1. 将包添加到您的pubspec.yaml文件中:
dependencies:
  utility_flutter: <latest_version>

或者运行以下命令:

flutter pub add utility_flutter
  1. 在您的Dart代码中导入它,您可以使用:
import 'package:utility_flutter/utility_flutter.dart';

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用utility_flutter插件的示例代码。utility_flutter是一个多功能工具插件,提供了一系列常用的工具类函数,比如设备信息、屏幕截图、振动等。需要注意的是,实际使用中请确保你已经在pubspec.yaml文件中添加了该插件的依赖,并且已经运行了flutter pub get

首先,在pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  utility_flutter: ^最新版本号  # 请替换为实际最新版本号

然后,在你的Flutter项目中,你可以按照以下方式使用utility_flutter插件:

import 'package:flutter/material.dart';
import 'package:utility_flutter/utility_flutter.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Utility Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String deviceInfo = "";
  Uint8List? screenshot;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Utility Flutter Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Device Info:', style: TextStyle(fontSize: 20)),
            SizedBox(height: 10),
            Text(deviceInfo, style: TextStyle(fontSize: 16)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _getDeviceInfo,
              child: Text('Get Device Info'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _takeScreenshot,
              child: Text('Take Screenshot'),
            ),
            SizedBox(height: 20),
            if (screenshot != null)
              Image.memory(screenshot!),
          ],
        ),
      ),
    );
  }

  Future<void> _getDeviceInfo() async {
    DeviceInfo deviceInfoResult = await Utility.getDeviceInfo();
    setState(() {
      deviceInfo = "Brand: ${deviceInfoResult.brand}\n"
          "Model: ${deviceInfoResult.model}\n"
          "System Version: ${deviceInfoResult.systemVersion}\n"
          "Screen Size: ${deviceInfoResult.screenSize}\n"
          "Screen Density: ${deviceInfoResult.screenDensity}";
    });
  }

  Future<void> _takeScreenshot() async {
    RenderRepaintBoundary boundary =
        globalKey.currentContext!.findRenderObject() as RenderRepaintBoundary;
    Uint8List image = await boundary.toImage();
    ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    Uint8List pngBytes = byteData!.buffer.asUint8List();

    setState(() {
      screenshot = pngBytes;
    });
  }

  final GlobalKey globalKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Utility Flutter Demo'),
      ),
      body: RepaintBoundary(
        key: globalKey,
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // ... previous widgets ...
            ],
          ),
        ),
      ),
    );
  }
}

注意

  1. 上述代码中的_takeScreenshot方法依赖于RepaintBoundary来捕获当前屏幕的截图。因此,我们在Scaffoldbody中包裹了一个RepaintBoundary,并为其分配了一个GlobalKey
  2. 截图功能仅适用于Android和iOS平台,Web平台可能不支持或需要额外的实现。
  3. Utility.getDeviceInfo()方法返回的设备信息包含了品牌、型号、系统版本、屏幕尺寸和屏幕密度等信息。

在实际项目中,你可能需要根据具体需求调整和扩展这些功能。希望这个示例代码能帮助你更好地理解和使用utility_flutter插件。

回到顶部