Flutter插件lenny的使用方法

Flutter插件lenny的使用方法

Flutter插件lenny功能概述

本插件旨在解决许多代码库中只使用整数或双精度浮点数表示测量值和单位的问题,并且在上下文中“知道”一个数字对应于米等单位(这可能在方法主体中被转换)。

该插件的目标是通过将行为(如众所周知的转换因子和算术)直接烘焙到类型中,使有关测量的代码变得清晰、表达力强且易于理解和推理。

Flutter插件lenny主要特性

  • 基于 me_sure_meant 库,支持常见的长度单位。
  • 支持常见的国际标准单位(SI)和英制单位。
  • 流畅定义、单位转换和加减操作。
  • 测量中的不确定性传播。
  • 框架组件,便于轻松扩展和演化,替换实现或添加新功能。
  • 完整的国际单位制前缀支持。
  • 扩展方法使得定义数量变得简单,例如 32.inches() + 24.yards() + 3.miles() - 2.kilometres()

长度测量的支持

  • 英制单位:Inches, Hands, Feet, Yards, Chains, Furlongs, Miles, Leagues
  • 国际单位制(SI):Metre

开始使用

依赖

确保你的项目依赖 me_sure_meant 库。它应该可以在任何 Dart 3+ 运行时环境中工作。

示例代码

查看 example/lenny_example.dart 中的示例。

import 'package:lenny/lenny.dart';
import 'package:me_sure_meant/me_sure_meant.dart';

void main() {
  // 创建一个英寸单位
  final inches = 12.inches();

  // 一些单位支持但未作为扩展添加...其他单位不支持。
  // 因为,老实说,谁会用英制单位的手来测量?
  // 扩展方法使简单的事情变得容易,而API则使复杂的事情成为可能。
  final hands = Hands.fromNum(22);
  final added = inches + hands;
  assert(added.magnitude.toNum() == 100.000054);
  assert(added.unit == const Inch());

  // 作者相信每个人都应该采用公制单位,但有NFL的存在...
  final yards = 100.yards();
  final longest = 1.yards();

  // 注意这里的一些操作
  final difference = yards - longest;
  assert(difference.magnitude.toNum() != 99);

  // 当你支持不同类型的转换时,数学运算很棘手。
  // 在底层,所有[Length]都会转换为一种公共类型进行加减运算,
  // 然后再转换回它们的单位表示形式。
  // IEEE 754数学并不总是产生精确的结果。
  // 库构建的对象其==和比较方法在3个显著位内是宽容的。
  assert(difference == 99.yards());
  assert(inches == 12.0000000001.inches());

  // 对于需要精确的情况,存在[exactinglyCrude]工厂方法
  final precision1 = Inches(exactinglyCrude(12.00001233));
  final precision2 = Inches(exactinglyCrude(12.00001235));
  assert(precision1 != precision2);

  // 谈到[crude],库还支持测量中的不确定性。
  final scientific = Metres(uncertain(1.23, .57), Metre.centimetre);

  // 基本不确定性支持(+/- 绝对不确定性)
  final scientific2 = Metres(uncertain(1.51, .217), Metre.centimetre);
  final result = scientific + scientific2;
  print(result);

  // 不确定性支持仍在试验阶段(程序员笑话#jokesForNerds)
  // 欢迎贡献者提交包含更高级别不确定性的拉取请求(如平方差之和)。

  // 其他深奥的单位也受支持
  final chains = Chains.fromNum(2);
  assertAreEqual(chains, 44.yards());
  final furlongs = Furlongs.fromNum(10);
  assertAreEqual(furlongs, 2200.yards());
  final miles = 3.miles();
  final leagues = Leagues.fromNum(1);
  assertAreEqual(miles, leagues);

  // 当然我们包括了国际单位制
  final meters = Metres.metres(1);

  // 它们按预期工作
  final inMillis = meters.toUnit(Metre.millimetre);
  assert(inMillis.magnitude.toNum() == 1000);
  assert(inMillis.unit == Metre.millimetre);

  // 扩展方法使其易于使用
  final kilometres = 1.kilometres();
  final half = 500.metres();
  assert(kilometres - half == half);

  // 复杂的事情变得简单
  final mess = (32.inches() + 24.yards() + 3.miles() - 2.kilometres())
      .toUnit(Metre.decimetre);

  // 你了解这是什么吗?我不了解!
  print(mess);

  // 因为我不是盲目的信仰:
  // 32 in = 0.888889 yd
  // 0.888889 + 24 yd = 24.0888889 yd
  // 3 mi = 5280 yd
  // 5280 + 24.0.888889 = 5,304.088889 yd
  // 2 km = 2187.23 yd
  // 5,304.088889 - 2187.23 = 3,116.858889 yd
  // 1 yd = 0.9144 m 因此 3,116.858889 yd * 0.9144 =
  // 2,850.0557681016 m
  // 2,850.0557681016 m to dm = 28,500.557681016 dm
  // 再次,注意双精度浮点运算导致了一些舍入误差
  assert(Metres(crude(28507.94571144595), Metre.decimetre) == mess);
}

void assertAreEqual(final one, final two) {
  assert(one == two);
}

更多关于Flutter插件lenny的使用方法的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


在Flutter开发中,lenny 这个插件的功能和用途尚不明确,因为它的介绍是 undefined(未定义)。不过,基于插件的名称和一些常见的Flutter插件命名惯例,我们可以进行一些合理的推测,并提供一些可能的用途和使用方法。

1. 推测 lenny 插件的可能用途

  • 表情符号生成器Lenny 通常指的是一种表情符号,例如 ( ͡° ͜ʖ ͡°)。插件可能用于生成类似的表情符号或提供表情符号的相关功能。
  • 字符串处理工具:插件可能提供了一些字符串处理的功能,例如对文本进行模糊匹配、表情符号替换等。
  • 动画效果:插件可能提供了一些与“Lenny”表情相关的动画效果或自定义动画。
  • UI组件库:插件可能提供了一些与表情符号相关的UI组件,例如带有表情符号的按钮、图标等。

2. 安装 lenny 插件

如果插件已经发布到 pub.dev,可以通过以下步骤安装:

flutter pub add lenny

或者直接在 pubspec.yaml 中添加依赖:

dependencies:
  lenny: ^<version>

3. 使用 lenny 插件的示例代码

以下是基于不同推测的示例代码:

  • 表情符号生成器

    import 'package:lenny/lenny.dart';
    
    void main() {
      String lennyFace = Lenny.generate();
      print(lennyFace); // 输出:( ͡° ͜ʖ ͡°)
    }
    
  • 字符串处理工具

    import 'package:lenny/lenny.dart';
    
    void main() {
      String text = "Hello World!";
      String lennyText = Lenny.replaceWithLenny(text);
      print(lennyText); // 输出:Hello ( ͡° ͜ʖ ͡°) World!
    }
    
  • 动画效果

    import 'package:flutter/material.dart';
    import 'package:lenny/lenny.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(title: Text('Lenny Animation')),
            body: Center(
              child: LennyAnimatedWidget(),
            ),
          ),
        );
      }
    }
    
    class LennyAnimatedWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Lenny.animate(); // 显示一个带有Lenny表情的动画
      }
    }
回到顶部