Flutter通用功能插件darty_commons的使用

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

Flutter通用功能插件darty_commons的使用

darty_commons 是一个为Flutter应用程序提供多种实用扩展方法的包,它受到Kotlin中Anko Commons的启发。通过这个包,你可以节省代码行数,并简化应用中重复的操作。

入门指南

添加依赖

首先,在你的 pubspec.yaml 文件中添加 dart_commons 作为依赖项:

dependencies:
  dart_commons: ^最新版本
  sdk: ">=2.12.0 <3.0.0"

配置

  • iOS: 无需额外配置。
  • Android: 无需额外配置,插件开箱即用。

前提条件

确保你的Dart SDK版本为2.12.0或更高。

使用方法

日志记录

darty_commons 使用了 logging 包来实现日志记录功能。你需要在应用启动时初始化日志记录器:

void main() {
  runApp(MyApp());
  Logger.root.level = Level.ALL; // 默认为 Level.INFO
  Logger.root.onRecord.listen((record) {
    print('${record.level.name}: ${record.time}: ${record.message}');
  });
}

你可以使用以下方式记录日志:

16.0.log();
16.log(tag: 'ClassName');
'error'.logError(error: 'error', stackTrace: StackTrace.current);
'Info'.log();
true.log();
context.log('message');

SnackBar

SnackBar 可以通过 StringBuildContext 来显示。duration 参数是可选的,你还可以自定义 backgroundColorTextStyleTextDirection

// 通过 BuildContext 显示 SnackBar
context.showSnackBar('text', duration: Duration(milliseconds: 500));

// 通过 String 显示 SnackBar,需要提供 BuildContext
'this is example'.showSnackBar(context, duration: Duration(milliseconds: 500));

// 显示错误 SnackBar
context.showErrorSnackBar('text', duration: Duration(milliseconds: 500));

字符串常用方法

拨打电话

打开拨号应用并预填号码(不会直接拨打电话):

'+20123456789'.dial();

转换为整数或浮点数

将字符串直接转换为整数或浮点数:

'90'.toInt;
'90'.toDouble;

发送邮件

发送带有指定主题和正文的邮件:

'this email body'.email('test@gmail.com', subject: 'test email function');

打开浏览器

在浏览器中打开链接:

'https://www.flutter.dev'.browse();

分享文本

分享指定的文本:

'this share body'.share(subject: 'subject');

发送WhatsApp消息

发送WhatsApp消息,指定电话号码和消息内容:

'Send WhatsApp Message With the passed String as Message Body'.sendWhatsAppMessage(phone: '+2011111111');

Base64编码

将文件转换为Base64编码:

File file = File(path);
String base64 = file.toBase64;

// 也可以直接从文件路径获取Base64编码
String base64 = path.toBase64;

延迟操作

在任何整数上调用 delay 方法,选择延迟的时间单位(毫秒或秒):

16.delay(milliseconds: true);

列表常用方法

添加或替换元素

如果列表中不存在该元素,则添加;否则替换现有元素:

List<int> list = [10, 11, 15];
list.addOrReplace(10);

替换指定索引处的元素

设置指定索引处的值:

List<int> list = [10, 11, 15];
list.replace(1, 9);

完整示例Demo

以下是一个完整的示例应用,展示了如何使用 darty_commons 中的多个功能:

import 'package:flutter/material.dart';
import 'package:darty_commons/darty_commons.dart';
import 'package:logging/logging.dart';

void main() {
  // 初始化日志记录器
  Logger.root.level = Level.ALL; // 默认为 Level.INFO
  Logger.root.onRecord.listen((record) {
    print('${record.level.name}: ${record.time}: ${record.message}');
  });

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSwatch().copyWith(secondary: Colors.blue),
      ),
      home: TestWidget(),
    );
  }
}

class TestWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Darty Commons Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                // 记录日志
                'Hello, Darty Commons!'.log(tag: 'TestWidget');
              },
              child: Text('Log a message'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 显示 SnackBar
                context.showSnackBar('This is a SnackBar!', duration: Duration(seconds: 2));
              },
              child: Text('Show SnackBar'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 拨打电话
                '+20123456789'.dial();
              },
              child: Text('Dial Phone Number'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 发送邮件
                'This is an email body'.email('test@example.com', subject: 'Test Email');
              },
              child: Text('Send Email'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 打开浏览器
                'https://www.flutter.dev'.browse();
              },
              child: Text('Open Browser'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 分享文本
                'Share this text'.share(subject: 'Share Subject');
              },
              child: Text('Share Text'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 发送 WhatsApp 消息
                'Send this message via WhatsApp'.sendWhatsAppMessage(phone: '+2011111111');
              },
              child: Text('Send WhatsApp Message'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用darty_commons插件的示例代码。假设darty_commons是一个包含一些通用功能的插件,例如网络请求、字符串操作、日志记录等。需要注意的是,实际的darty_commons插件可能并不存在,下面的例子是基于假设的功能来编写的。

首先,确保你的Flutter项目中已经添加了darty_commons插件。如果这是一个假设的插件,你可能需要手动创建一个本地插件或者使用一个类似的通用功能插件。

1. 添加依赖

在你的pubspec.yaml文件中添加darty_commons依赖(假设它存在于pub.dev上,否则你需要手动导入本地插件):

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

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入darty_commons

import 'package:darty_commons/darty_commons.dart';

3. 使用插件功能

网络请求

假设darty_commons有一个网络请求的封装:

void fetchData() async {
  try {
    // 假设这是一个GET请求的方法
    var response = await CommonsNetwork.get('https://api.example.com/data');
    
    if (response.success) {
      // 处理成功响应
      print('Data: ${response.data}');
    } else {
      // 处理失败响应
      print('Error: ${response.errorMessage}');
    }
  } catch (e) {
    // 处理异常
    print('Exception: $e');
  }
}

字符串操作

假设darty_commons有一个字符串反转的方法:

void reverseString() {
  String original = "Hello, Flutter!";
  String reversed = CommonsString.reverse(original);
  print('Reversed String: $reversed');
}

日志记录

假设darty_commons有一个简单的日志记录器:

void logMessage() {
  CommonsLog.info('This is an info log message.');
  CommonsLog.error('This is an error log message.');
}

4. 完整示例

下面是一个完整的使用darty_commons插件的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Darty Commons Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: fetchData,
                child: Text('Fetch Data'),
              ),
              ElevatedButton(
                onPressed: reverseString,
                child: Text('Reverse String'),
              ),
              ElevatedButton(
                onPressed: logMessage,
                child: Text('Log Message'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

// Fetch Data Function
void fetchData() async {
  try {
    var response = await CommonsNetwork.get('https://api.example.com/data');
    
    if (response.success) {
      print('Data: ${response.data}');
      // 更新UI,这里省略了,因为这是一个简单示例
    } else {
      print('Error: ${response.errorMessage}');
    }
  } catch (e) {
    print('Exception: $e');
  }
}

// Reverse String Function
void reverseString() {
  String original = "Hello, Flutter!";
  String reversed = CommonsString.reverse(original);
  print('Reversed String: $reversed');
  // 更新UI,这里省略了,因为这是一个简单示例
}

// Log Message Function
void logMessage() {
  CommonsLog.info('This is an info log message.');
  CommonsLog.error('This is an error log message.');
}

请注意,上述代码中的CommonsNetwork, CommonsString, 和 CommonsLog 类及其方法都是假设存在的。你需要根据实际的darty_commons插件的API文档来替换这些方法和类。如果darty_commons是一个你自定义的插件,你需要确保这些方法和类在你的插件中已经被正确实现。

回到顶部