[译][官方文档] Flutter/Dart 状态管理库 RiverPod (二)- 开始使用 RiverPod

原文链接:Getting started | Riverpod

pub:riverpod | Dart Package (flutter-io.cn)

译时版本: 2.4.5


之前翻译过 RiverPod 的官方文档,现在随着版本更新,官方文档又多了很多新内容,所以再补充翻译一下。

之前翻译过的内容,现在官方文档有中文了。
Flutter状态管理库Riverpod官方文档翻译汇总 - 掘金 (juejin.cn)


开始使用 RiverPod

安装包

知道需要安装的包了,就可以如下在应用中添加依赖:

  • Flutter
csharp 复制代码
flutter pub add flutter_riverpod
flutter pub add riverpod_annotation
flutter pub add dev:riverpod_generator
flutter pub add dev:build_runner
flutter pub add dev:custom_lint
flutter pub add dev:riverpod_lint
  • 仅 Dart
csharp 复制代码
dart pub add riverpod
dart pub add riverpod_annotation
dart pub add dev:riverpod_generator
dart pub add dev:build_runner
dart pub add dev:custom_lint
dart pub add dev:riverpod_lint

也可以手动在应用的 pubspec.yaml 中添加依赖:

  • Flutter

pubspec.yaml

yaml 复制代码
name: my_app_name
environment:
  sdk: ">=3.0.0 <4.0.0"
  flutter: ">=3.0.0"

dependencies:
  flutter:
    sdk: flutter
  flutter_riverpod: ^2.4.5
  riverpod_annotation: ^2.3.0

dev_dependencies:
  build_runner:
  custom_lint:
  riverpod_generator: ^2.3.5
  riverpod_lint: ^2.3.3
  • 仅 Dart

pubspec.yaml

yaml 复制代码
name: my_app_name
environment:
  sdk: ">=3.0.0 <4.0.0"

dependencies:
  riverpod: ^2.4.5
  riverpod_annotation: ^2.3.0

dev_dependencies:
  build_runner:
  custom_lint:
  riverpod_generator: ^2.3.5
  riverpod_lint: ^2.3.3

然后,使用 flutter pub get 安装包。

现在可以通过 dart run build_runner watch 命令运行代码生成器。

就这些。这样就为应用安装了 Riverpod 了!

使 riverpod_lint/custom_lint 可用。

Riverpod 自带可选的 riverpod_lint 包,它提供了提示规则有助于写出更好的代码,并提供了可定制的重构选项。

使用前面的步骤安装的话,riverpod_lint 包就已经安装上了。

但是需要一个单独的步骤使其可用。

要使 riverpod_lint 可用,需要在 analysis_options.yaml (该文件和 pubspec.yaml 在同级)文件中添加以下代码:

analysis_options.yaml:

yaml 复制代码
analyzer:
  plugins:
    - custom_lint

在代码库中用 Riverpod 时如果有错误的话,则会在 IDE 中看到警告。

要查看所有的警告和重构信息,可移步 riverpod_lint 页面。

注意:

这些警告不会在 dart analyze 中显示。 如果想在 CI/终端 中查看这些错误, 需要运行以下命令:

arduino 复制代码
dart run custom_lint

用法示例: Hello world

已经安装了 Riverpod,现在可以开始使用它了。

以下代码片段展示了如果用新的依赖来创建 "Hello world" :

  • Flutter lib/main.dart
typescript 复制代码
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'main.g.dart';

// 创建一个 "provider" ,它存储一个值(这里是 "Hello world")。
// 使用 provider ,这能让我们 mock 或重写显露的值。
@riverpod
String helloWorld(HelloWorldRef ref) {
  return 'Hello world';
}

void main() {
  runApp(
    // 为了让组件能够读取 provider ,需要将整个应用用 "ProviderScope" 组件包裹起来。
    // 这也是存储 provider 的状态的地方。
    ProviderScope(
      child: MyApp(),
    ),
  );
}

// 继承 ConsumerWidget 而不是 StatelessWidget ,由 Riverpod 提供。
class MyApp extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final String value = ref.watch(helloWorldProvider);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Example')),
        body: Center(
          child: Text(value),
        ),
      ),
    );
  }
}
  • Dart only

lib/main.dart

dart 复制代码
import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'main.g.dart';

// 创建一个 "provider" ,它存储一个值(这里是 "Hello world")。
// 使用 provider ,这能让我们 mock 或重写显露的值。
@riverpod
String helloWorld(HelloWorldRef ref) {
  return 'Hello world';
}

void main() {
  // 该对象是存储 provider 的状态的地方。
  final container = ProviderContainer();

  // 用 "container" ,就可以读取 provider 了。
  final value = container.read(helloWorldProvider);

  print(value); // Hello world
}

然后,用 flutter run 运行应用。就可以在设备上渲染 "Hello world" 了。

更进一步:安装代码片段

如果是使用 FlutterVS Code ,可以考虑使用 Flutter Riverpod 代码片段

如果是使用 FlutterAndroid StudioIntelliJ ,可以考虑使用 Flutter Riverpod 代码片段

选择下一步

学习一些基概念:

关注实战手册:


相关推荐
江上清风山间明月8 小时前
Flutter开发的应用页面非常多时如何高效管理路由
android·flutter·路由·页面管理·routes·ongenerateroute
Zsnoin能18 小时前
flutter国际化、主题配置、视频播放器UI、扫码功能、水波纹问题
flutter
早起的年轻人19 小时前
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
flutter·ios
HappyAcmen19 小时前
关于Flutter前端面试题及其答案解析
前端·flutter
coooliang1 天前
Flutter 中的单例模式
javascript·flutter·单例模式
coooliang1 天前
Flutter项目中设置安卓启动页
android·flutter
JIngles1231 天前
flutter将utf-8编码的字节序列转换为中英文字符串
java·javascript·flutter
B.-1 天前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
freflying11192 天前
使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
android·flutter·jenkins
机器瓦力2 天前
Flutter应用开发:对象存储管理图片
flutter