Flutter工具集插件toolkit的使用

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

Flutter工具集插件toolkit的使用

Toolkit

这只是一个简单的Flutter工具集插件。其中包含了一些API,用于帮助操作地图(map)、字符串(string)、随机数(random)、睡眠(sleep)和媒体查询(media query)。

使用方法

1. 添加依赖

在你的pubspec.yaml文件中添加toolkit作为依赖项:

dependencies:
  toolkit: ^0.3.1

2. 安装依赖

在终端运行以下命令来安装依赖:

flutter pub get

3. 导入库

在你的Dart文件中导入toolkit库:

import 'package:toolkit/toolkit.dart';

Kit Map

功能列表

  • clone(Map<String, dynamic> json) => Map<String, dynamic>

    • 克隆一个映射(map)到新的映射。
  • toStringify() => String

    • 将映射编码为字符串。
  • toStringifyTransform(ToolkitCase mode) => String

    • 将映射编码为字符串,并转换键。
  • toMapTransform(ToolkitCase mode) => Map<dynamic, dynamic>

    • 新建映射,并转换键。
  • parse(String mapString) => void

    • 将JSON字符串解析为映射。
  • set(dynamic key, dynamic value) => void

    • 设置映射值。
  • getString(String key) => String?

    • 获取映射值作为字符串。
  • getInt(String key) => int?

    • 获取映射值作为整数。
  • getDouble(String key) => double?

    • 获取映射值作为双精度浮点数。
  • getBoolean(String key) => bool?

    • 获取映射值作为布尔值。
  • getMap(String key) => Map<dynamic, dynamic>?

    • 获取映射值作为映射。
  • getList(String key) => List<dynamic>?

    • 获取映射值作为列表。
  • get<T>(String key) => T?

    • 获取映射值作为特定类型。

Kit String

功能列表

  • toSentenceFromCamelCase() => String

    • 将驼峰式命名格式转换为句子格式。
  • toSentenceFromSnakeCase() => String

    • 将蛇形命名格式转换为句子格式。
  • toCapitalCase() => String

    • 转换为大写格式。
  • toSnakeCase() => String

    • 转换为蛇形命名格式。
  • toCamelCase() => String

    • 转换为驼峰式命名格式。
  • toHyphenCase() => String

    • 转换为连字符格式。
  • limitString(String str, int length) => String

    • 限制字符串长度。
  • limitStringAppend(String str, int length, String append) => String

    • 限制字符串长度,并追加另一个字符串。
  • isEmail => bool

    • 检查字符串是否符合有效的电子邮件格式。
  • isContainsAlpha => bool

    • 检查字符串是否包含字母。
  • isContainsAlphaLowercase => bool

    • 检查字符串是否包含小写字母。
  • isContainsAlphaUppercase => bool

    • 检查字符串是否包含大写字母。
  • isContainsNumeric => bool

    • 检查字符串是否包含数字。
  • isContainsSpecialCharacters => bool

    • 检查字符串是否包含特殊字符。
  • isOnlyAlpha => bool

    • 检查字符串是否只包含字母。
  • isOnlyAlphaLowercase => bool

    • 检查字符串是否只包含小写字母。
  • isOnlyAlphaUppercase => bool

    • 检查字符串是否只包含大写字母。
  • isOnlyNumeric => bool

    • 检查字符串是否只包含数字。

Kit Sleep

功能列表

  • sleep(Duration duration) => Future

    • 通过指定时长设置睡眠时间。
  • sleepMilliseconds(int milliseconds) => Future

    • 以毫秒为单位设置睡眠时间。
  • sleepSeconds(int seconds) => Future

    • 以秒为单位设置睡眠时间。
  • sleepMinutes(int minutes) => Future

    • 以分钟为单位设置睡眠时间。
  • sleepHours(int hours) => Future

    • 以小时为单位设置睡眠时间。
  • sleepDays(int days) => Future

    • 以天为单位设置睡眠时间。

Kit Random

功能列表

  • string(String chars, int length) => String

    • 从特定字符和长度生成随机字符串。
  • stringAlpha(int length) => String

    • 生成只包含字母的随机字符串(包括大小写)。
  • stringAlphaLowercase(int length) => String

    • 生成只包含小写字母的随机字符串。
  • stringAlphaUppercase(int length) => String

    • 生成只包含大写字母的随机字符串。
  • stringAlphaNumeric(int length) => String

    • 生成包含字母和数字的随机字符串(包括大小写)。
  • stringNumeric(int length) => String

    • 生成只包含数字的随机字符串。
  • specialCharacters(int length) => String

    • 生成包含特殊字符的随机字符串。
  • numeric(int max) => int

    • 生成随机整数。
  • numericBetween(int min, int max) => int

    • 在最小值和最大值之间生成随机整数。
  • randomBoolean() => bool

    • 生成随机布尔值。
  • randomColorHex() => String

    • 生成随机颜色十六进制值。

Kit RegExp

功能列表

  • containsAlpha(String str) => bool

    • 检查字符串是否包含字母。
  • containsAlphaLowercase(String str) => bool

    • 检查字符串是否包含小写字母。
  • containsAlphaUppercase(String str) => bool

    • 检查字符串是否包含大写字母。
  • containsNumeric(String str) => bool

    • 检查字符串是否包含数字。
  • onlyAlpha(String str) => bool

    • 检查字符串是否只包含字母。
  • onlyAlphaLowercase(String str) => bool

    • 检查字符串是否只包含小写字母。
  • onlyAlphaUppercase(String str) => bool

    • 检查字符串是否只包含大写字母。
  • onlyNumeric(String str) => bool

    • 检查字符串是否只包含数字。
  • email(String str) => bool

    • 检查字符串是否符合有效的电子邮件格式。
  • containsSpecialCharacters(String str) => bool

    • 检查字符串是否包含特殊字符。

Kit MediaQuery

功能列表

  • getSize(BuildContext context) => Size

    • 获取屏幕尺寸。
  • getWidth(BuildContext context, { double size = 1 }) => double

    • 获取屏幕宽度,可以调整大小(介于0和1之间)。
  • getHeight(BuildContext context, { double size = 1 }) => double

    • 获取屏幕高度,可以调整大小(介于0和1之间)。

示例

// 创建新的映射
var map1 = {};
var map2 = {};

// 设置映射1的值
map1.set('keyA', 1);
map1.set('keyB', 2);
map1.set('keyC', 3);

// 设置映射2的值
map2.set('keyD', 'hello world');
map2.set('keyF', {'key': 'value'});

// 从映射1中删除keyA
map1.delete('keyA');

// 转换映射
var transformMap1Upper = map1.toMapTransform(ToolkitCase.upper);
var transformMap1Lower = map1.toMapTransform(ToolkitCase.lower);
var transformMap1Capital = map1.toMapTransform(ToolkitCase.capital);

// 转换映射字符串
var transformMap2Upper = map2.toStringifyTransform(ToolkitCase.upper);
var transformMap2Lower = map2.toStringifyTransform(ToolkitCase.lower);
var transformMap2Capital = map2.toStringifyTransform(ToolkitCase.capital);

// 从JSON字符串解析映射
var map3 = {};
String jsonString = '{"name": "SpiderMan", "age": 40, "fly": true}';
map3.parse(jsonString);
map3.set('weapons', ['Pulse Bolt', 'Energy Blade', 'Tri-beam', 'Uni-beam', 'Smart Missiles']);

// 获取映射值
var name = map3.getString("name");
var age = map3.getInt("age");
var canFly = map3.getBoolean("fly");
var weapons = map3.get("weapons");
var weapons2 = map3.getList("weapons");

print("===== 映射示例 =====");
print(transformMap1Lower); // {keyb: 2, keyc: 3}
print(transformMap1Upper); // {KEYB: 2, KEYC: 3}
print(transformMap1Capital); // {KeyB: 2, KeyC: 3}

print(transformMap2Lower); // {"keyd":"hello world","keyf":{"key":"value"}}
print(transformMap2Upper); // {"KEYD":"hello world","KEYF":{"KEY":"value"}}
print(transformMap2Capital); // {"KeyD":"hello world","KeyF":{"Key":"value"}}

print(name); // SpiderMan
print(age); // 40
print(canFly); // true
print(weapons); // [Pulse Bolt, Energy Blade, Tri-beam, Uni-beam, Smart Missiles]
print(weapons2); // [Pulse Bolt, Energy Blade, Tri-beam, Uni-beam, Smart Missiles]

// 清空映射
map1.clear();
map2.clear();
map3.clear();

var randomInt = t.randomInt(10);
var randomIntBetween = t.randomIntBetween(5, 8);
var randomString = t.randomString("RANDOMIZE", 4);
var randomStringAlpha = t.randomStringAlpha(12);
var randomStringAlphaLower = t.randomStringAlphaLowercase(12);
var randomStringAlphaUpper = t.randomStringAlphaUppercase(12);
var randomStringAlphaNumeric = t.randomStringAlphaNumeric(12);
var randomStringNumeric = t.randomStringNumeric(12);
var randomBoolean = t.randomBoolean();
double randomDouble = t.randomDouble();
String randomColorHex = t.randomColorHex();

print("===== 随机示例 =====");
print(randomInt); // 3
print(randomIntBetween); // 6
print(randomString); // DEEZ
print(randomStringAlpha); // VYRJvFwnBkyI
print(randomStringAlphaLower); // ulyzaqakjsic
print(randomStringAlphaUpper); // GVLEREOOBHIU
print(randomStringAlphaNumeric); // cTof58MhnlUd
print(randomStringNumeric); // 261679006839
print(randomBoolean); // false
print(randomDouble); // 0.9711403523337846
print(randomColorHex); // #0B8EBB

String alpha = "ABCabc";
String alphaLowercase = "abcdef";
String alphaUppercase = "ABCDEF";
String alphaNumeric = "ABCDEF123";
String numeric = "123456";

print("===== 正则表达式示例 =====");
print("==&gt; 包含字母");
print(alpha + " - " + Toolkit.regex.containsAlpha(alpha).toString()); // ABCabc - true
print(alphaLowercase + " - " + Toolkit.regex.containsAlpha(alphaLowercase).toString()); // abcdef - true
print(alphaUppercase + " - " + Toolkit.regex.containsAlpha(alphaUppercase).toString()); // ABCDEF - true
print(alphaNumeric + " - " + Toolkit.regex.containsAlpha(alphaNumeric).toString()); // ABCDEF123 - true
print(numeric + " - " + Toolkit.regex.containsAlpha(numeric).toString()); // 123456 - false

print("==&gt; 包含小写字母");
print(alpha + " - " + Toolkit.regex.containsAlphaLowercase(alpha).toString()); // ABCabc - true
print(alphaLowercase + " - " + Toolkit.regex.containsAlphaLowercase(alphaLowercase).toString()); // abcdef - true
print(alphaUppercase + " - " + Toolkit.regex.containsAlphaLowercase(alphaUppercase).toString()); // ABCDEF - false
print(alphaNumeric + " - " + Toolkit.regex.containsAlphaLowercase(alphaNumeric).toString()); // ABCDEF123 - false
print(numeric + " - " + Toolkit.regex.containsAlphaLowercase(numeric).toString()); // 123456 - false

print("==&gt; 包含大写字母");
print(alpha + " - " + Toolkit.regex.containsAlphaUppercase(alpha).toString()); // ABCabc - true
print(alphaLowercase + " - " + Toolkit.regex.containsAlphaUppercase(alphaLowercase).toString()); // abcdef - false
print(alphaUppercase + " - " + Toolkit.regex.containsAlphaUppercase(alphaUppercase).toString()); // ABCDEF - true
print(alphaNumeric + " - " + Toolkit.regex.containsAlphaUppercase(alphaNumeric).toString()); // ABCDEF123 - true
print(numeric + " - " + Toolkit.regex.containsAlphaUppercase(numeric).toString()); // 123456 - false

print("==&gt; 包含数字");
print(alpha + " - " + Toolkit.regex.containsNumeric(alpha).toString()); // ABCabc - false
print(alphaLowercase + " - " + Toolkit.regex.containsNumeric(alphaLowercase).toString()); // abcdef - false
print(alphaUppercase + " - " + Toolkit.regex.containsNumeric(alphaUppercase).toString()); // ABCDEF - false
print(alphaNumeric + " - " + Toolkit.regex.containsNumeric(alphaNumeric).toString()); // ABCDEF123 - true
print(numeric + " - " + Toolkit.regex.containsNumeric(numeric).toString()); // 123456 - true

print("==&gt; 只包含字母");
print(alpha + " - " + Toolkit.regex.onlyAlpha(alpha).toString()); // ABCabc - true
print(alphaLowercase + " - " + Toolkit.regex.onlyAlpha(alphaLowercase).toString()); // abcdef - true
print(alphaUppercase + " - " + Toolkit.regex.onlyAlpha(alphaUppercase).toString()); // ABCDEF - true
print(alphaNumeric + " - " + Toolkit.regex.onlyAlpha(alphaNumeric).toString()); // ABCDEF123 - false
print(numeric + " - " + Toolkit.regex.onlyAlpha(numeric).toString()); // 123456 - false

print("==&gt; 只包含小写字母");
print(alpha + " - " + Toolkit.regex.onlyAlphaLowercase(alpha).toString()); // ABCabc - false
print(alphaLowercase + " - " + Toolkit.regex.onlyAlphaLowercase(alphaLowercase).toString()); // abcdef - true
print(alphaUppercase + " - " + Toolkit.regex.onlyAlphaLowercase(alphaUppercase).toString()); // ABCDEF - false
print(alphaNumeric + " - " + Toolkit.regex.onlyAlphaLowercase(alphaNumeric).toString()); // ABCDEF123 - false
print(numeric + " - " + Toolkit.regex.onlyAlphaLowercase(numeric).toString()); // 123456 - false

print("==&gt; 只包含大写字母");
print(alpha + " - " + Toolkit.regex.onlyAlphaUppercase(alpha).toString()); // ABCabc - false
print(alphaLowercase + " - " + Toolkit.regex.onlyAlphaUppercase(alphaLowercase).toString()); // abcdef - false
print(alphaUppercase + " - " + Toolkit.regex.onlyAlphaUppercase(alphaUppercase).toString()); // ABCDEF - true
print(alphaNumeric + " - " + Toolkit.regex.onlyAlphaUppercase(alphaNumeric).toString()); // ABCDEF123 - false
print(numeric + " - " + Toolkit.regex.onlyAlphaUppercase(numeric).toString()); // 123456 - false

print("==&gt; 只包含数字");
print(alpha + " - " + Toolkit.regex.onlyNumeric(alpha).toString()); // ABCabc - false
print(alphaLowercase + " - " + Toolkit.regex.onlyNumeric(alphaLowercase).toString()); // abcdef - false
print(alphaUppercase + " - " + Toolkit.regex.onlyNumeric(alphaUppercase).toString()); // ABCDEF - false
print(alphaNumeric + " - " + Toolkit.regex.onlyNumeric(alphaNumeric).toString()); // ABCDEF123 - false
print(numeric + " - " + Toolkit.regex.onlyNumeric(numeric).toString()); // 123456 - true

print("===== 睡眠示例 =====");
// 等待5秒钟
print(DateTime.now()); // 2020-07-05 21:02:21.112141
await t.sleepSeconds(5);
print(DateTime.now()); // 2020-07-05 21:02:26.120927

示例代码

import 'map.dart';
import 'random.dart';
import 'regexp.dart';
import 'sleep.dart';

main() async {
  mapExample();
  print("\n\n");
  randomExample();
  print("\n\n");
  regexpExample();
  print("\n\n");
  sleepExample();
}

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

1 回复

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


在Flutter开发中,toolkit并不是一个官方或广泛认可的特定插件名称。不过,通常当我们谈论“工具集插件”时,我们可能指的是一系列用于特定任务或功能集合的插件。Flutter社区提供了许多这样的插件,用于增强应用的功能,比如UI组件、数据存储、网络通信等。

为了展示如何使用Flutter中的一些常用插件,我将给出几个常见插件的代码示例,这些插件可以视为一个“工具集”的一部分。这些示例将涵盖UI组件(如fluttertoast用于显示Toast消息)、网络通信(如http插件)和数据存储(如shared_preferences)。

1. Fluttertoast(显示Toast消息)

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

dependencies:
  fluttertoast: ^8.0.8

然后,在Dart代码中导入并使用它:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Toast Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              Fluttertoast.showToast(
                msg: "Hello Flutter!",
                toastLength: Toast.LENGTH_SHORT,
                gravity: ToastGravity.BOTTOM,
                backgroundColor: Colors.black,
                textColor: Colors.white,
                fontSize: 16.0
              );
            },
            child: Text('Show Toast'),
          ),
        ),
      ),
    );
  }
}

2. http(网络通信)

pubspec.yaml文件中添加依赖:

dependencies:
  http: ^0.13.3

然后在Dart代码中导入并使用它:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String responseData = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('HTTP Request Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(responseData),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: fetchData,
                child: Text('Fetch Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void fetchData() async {
    var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/todos/1'));

    if (response.statusCode == 200) {
      setState(() {
        responseData = jsonDecode(response.body)['title'];
      });
    } else {
      setState(() {
        responseData = 'Failed to load data';
      });
    }
  }
}

3. shared_preferences(数据存储)

pubspec.yaml文件中添加依赖:

dependencies:
  shared_preferences: ^2.0.13

然后在Dart代码中导入并使用它:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _savedValue = 'No Value';

  @override
  void initState() {
    super.initState();
    _readSavedValue();
  }

  Future<void> _readSavedValue() async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    setState(() {
      _savedValue = sharedPreferences.getString('saved_key') ?? 'No Value';
    });
  }

  Future<void> _saveValue() async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    await sharedPreferences.setString('saved_key', 'Hello Flutter!');
    setState(() {
      _savedValue = 'Hello Flutter!';
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Shared Preferences Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Saved Value: $_savedValue'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _saveValue,
                child: Text('Save Value'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这些示例展示了如何在Flutter应用中使用一些常见的插件来增强功能。当然,Flutter生态系统中有许多其他有用的插件,你可以根据项目需求选择合适的插件来集成。

回到顶部