Flutter工具集插件nv_tooling的使用

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

Flutter工具集插件nv_tooling的使用

Result

Result 类受 Rust 同名类型的启发。它提供了一种更谨慎的方式来处理异常。特别是在进行 API 调用时,很容易忘记处理某些异常。这个类不会让你这样做。

有两个方法可以返回一个 Result 对象,分别是 resultOfexceptionOf,它们分别创建带有 ResultException 对象的 Result 实例。

此外,还提供了 access(...) 方法,该方法接受两个回调函数来处理 ResultException 的两种情况。

另外,还有一个 map(...) 方法允许轻松地对 Result 类进行变异操作,而无需处理两种情况。

// 这种方式类型比较长,所以可以创建别名使它们更具可读性
typedef AsyncResultOrException = Future<Result<SomeObject, FreezedErrorUnion>>;

// 假设我们在这里执行一些远程工作
AsyncResultOrException getObjectFromServer() async => resultOf(SomeObject());

final Result<SomeObject, FreezedErrorUnion> myObjects = await getObjectFromServer(true);

// 注意这会改变类型
final newMyObjects = myObjects.map(failure: (failure) => 'Something went wrong'); 

// 最后在你的小部件中,访问你的数据(并处理错误情况)
Text(
    newMyObjects.access(
        (myObject) => myObject.toString(), 
        (failure) => failure,
    )
);

// 最重要的是,它添加了 `unwrap` 方法,该方法在 `Result` 是成功的情况下返回数据,否则抛出 `Exception`。
final obj = newMyObjects.unwrap();

Selection/OptionalSelection

这种类型将所有选项以及选定的选项放在一个地方。如果你有一个字符串列表,并希望用户选择一个,有时你可能需要知道选定的选项以及所有可用的选项。

OptionalSelection 允许选择为 null,而 Selection 确保始终有一个项目被选中。

final selection = Selection(
    options: ['Hello', 'my', 'friend'], 
    selected: 'my',
);

可迭代扩展

mapGrouped

根据 groupBy 回调分组元素,然后对每个单独的组应用 groupBuilder 方法。

final names = ['Alex', 'Anna', 'Bill', 'Benny'];
final namesGrouped = Map.fromEntries(
    names.mapGrouped(
        groupBy: (name) => name[0], 
        groupBuilder: (key, values) => MapEntry(key, values),
    ),
);

print(namesGrouped);

// 输出:
// { 'A': ['Alex', 'Anna'], 'B': ['Bill', 'Benny'] }
mapIndexed

在映射时提供元素的索引。

final names = ['Alex', 'Anna', 'Bill', 'Benny'];
final namesWithIndex = names.mapIndexed(
    (index, element) => '$index: $element',      
);

print(namesWithIndex);

// 输出:
// ['0: Alex', '1: Anna', '2: Bill', '3: Benny']
separatedBy

在可迭代对象的每个元素之间插入提供的元素。

final names = ['Alex', 'Anna', 'Bill'];
final namesWithJolo = names.separatedBy('Jolo');

print(namesWithJolo);

// 输出:
// ['Alex', 'Jolo', 'Anna', 'Jolo', 'Bill']

完整示例代码

import 'package:example/data/data.dart';
import 'package:flutter/material.dart';

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

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

class MyHomePage extends StatelessWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Fake HTTP call'),
            Text(
              Data().getWeather().access(
                    (success) => 'weather: ${success.weather}\n'
                        'chance of rain: ${success.propRain}\n'
                        'temperature: ${success.tempInDegrees}',
                    (failure) => failure.map(
                      noConnection: (_) => 'Make sure you\'re connected to the internet!',
                      unauthorized: (_) => 'You are not allowed to view this!',
                    ),
                  ),
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


nv_tooling 是一个用于 Flutter 开发的工具集插件,旨在提高开发效率,优化代码质量,简化调试过程。它提供了多种功能,包括代码生成、调试工具、代码分析等,帮助开发者更高效地构建 Flutter 应用。

以下是 nv_tooling 插件的基本使用方法和一些常见的功能:

1. 安装 nv_tooling

首先,你需要在 pubspec.yaml 文件中添加 nv_tooling 依赖:

dependencies:
  flutter:
    sdk: flutter
  nv_tooling: ^1.0.0  # 请根据最新版本号进行替换

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

2. 初始化 nv_tooling

在项目中使用 nv_tooling 之前,通常需要进行初始化。你可以在 main.dart 文件中添加以下代码:

import 'package:nv_tooling/nv_tooling.dart';

void main() {
  NvTooling.initialize();
  runApp(MyApp());
}

3. 使用代码生成功能

nv_tooling 提供了一个代码生成工具,可以帮助你自动生成常用的代码片段,如路由、模型类、服务类等。

例如,使用 nv_tooling 生成一个模型类:

import 'package:nv_tooling/generator/model_generator.dart';

void main() {
  ModelGenerator.generateModel('User', {'name': 'String', 'age': 'int'});
}

这将会生成一个 User 类,包含 nameage 属性及其相应的 getter 和 setter 方法。

4. 调试工具

nv_tooling 提供了一些调试工具,帮助你在开发过程中更轻松地调试应用。例如,你可以使用 NvLogger 来记录日志:

import 'package:nv_tooling/debug/nv_logger.dart';

void main() {
  NvLogger.log('App started');
}

NvLogger 支持不同级别的日志记录(例如 info, warning, error),并且可以将日志输出到控制台或文件中。

5. 代码分析

nv_tooling 还提供了一个代码分析工具,帮助你在开发过程中检查代码质量和潜在问题。你可以使用 NvAnalyzer 来分析代码:

import 'package:nv_tooling/analyzer/nv_analyzer.dart';

void main() {
  NvAnalyzer.analyze('lib/');
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!