riverpod-getting-started
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRiverpod — Getting Started
Riverpod — 入门指南
Instructions
操作步骤
Installing the package
安装包
Riverpod is available as a main package (Flutter: ; Dart-only: ). Optional packages add code generation and hooks.
flutter_riverpodriverpodFlutter:
bash
flutter pub add flutter_riverpodWith code generation:
bash
flutter pub add flutter_riverpod riverpod_annotation
flutter pub add dev:riverpod_generator build_runnerDart only:
bash
dart pub add riverpodWith code generation:
bash
dart pub add riverpod riverpod_annotation
dart pub add dev:riverpod_generator build_runnerManual (Flutter):
pubspec.yamlyaml
dependencies:
flutter:
sdk: flutter
flutter_riverpod: ^2.0.0 # use latest from pub.dev
dev_dependencies:
build_runner:
riverpod_generator: ^2.0.0 # if using code generationThen run (or for Dart-only).
flutter pub getdart pub getIf using code generation, run:
sh
dart run build_runner watch -dNote: Some Riverpod packages may require Flutter's beta channel for compatibility with latest . If fails, try or use Riverpod .
json_serializablepub getflutter channel beta<=3.1.0Riverpod提供主包(Flutter项目使用;仅Dart项目使用)。可选包可添加代码生成与hooks功能。
flutter_riverpodriverpodFlutter项目:
bash
flutter pub add flutter_riverpod若使用代码生成:
bash
flutter pub add flutter_riverpod riverpod_annotation
flutter pub add dev:riverpod_generator build_runner仅Dart项目:
bash
dart pub add riverpod若使用代码生成:
bash
dart pub add riverpod riverpod_annotation
dart pub add dev:riverpod_generator build_runner手动配置(Flutter项目):
pubspec.yamlyaml
dependencies:
flutter:
sdk: flutter
flutter_riverpod: ^2.0.0 # use latest from pub.dev
dev_dependencies:
build_runner:
riverpod_generator: ^2.0.0 # if using code generation然后运行(仅Dart项目则运行)。
flutter pub getdart pub get若使用代码生成,请运行:
sh
dart run build_runner watch -d注意: 部分Riverpod包为兼容最新版,可能需要使用Flutter的beta通道。若执行失败,可尝试切换至或使用版本号的Riverpod。
json_serializablepub getflutter channel beta<=3.1.0Wrap the app in ProviderScope
将应用包裹在ProviderScope中
Widgets need a (Flutter) or a (Dart) to read providers.
ProviderScopeProviderContainerFlutter — ProviderScope:
dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
runApp(
ProviderScope(
child: MyApp(),
),
);
}Dart only — ProviderContainer:
dart
final container = ProviderContainer();
final value = container.read(helloWorldProvider);
print(value);
// Don't forget to container.dispose() when done组件需要(Flutter项目)或(仅Dart项目)才能读取providers。
ProviderScopeProviderContainerFlutter项目 — ProviderScope:
dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
runApp(
ProviderScope(
child: MyApp(),
),
);
}仅Dart项目 — ProviderContainer:
dart
final container = ProviderContainer();
final value = container.read(helloWorldProvider);
print(value);
// Don't forget to container.dispose() when doneHello world (Flutter with code generation)
Hello World示例(使用代码生成的Flutter项目)
dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'main.g.dart';
String helloWorld(Ref ref) {
return 'Hello world';
}
void main() {
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends ConsumerWidget {
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)),
),
);
}
}Run (or ) to generate . Without code generation, use a manual provider (e.g. ) and the same + pattern.
dart run build_runner buildwatchmain.g.dartfinal helloWorldProvider = Provider<String>((ref) => 'Hello world');ProviderScopeConsumerWidgetdart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'main.g.dart';
String helloWorld(Ref ref) {
return 'Hello world';
}
void main() {
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends ConsumerWidget {
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)),
),
);
}
}运行(或)以生成文件。若不使用代码生成,可手动创建provider(例如:),并采用相同的 + 模式。
dart run build_runner buildwatchmain.g.dartfinal helloWorldProvider = Provider<String>((ref) => 'Hello world');ProviderScopeConsumerWidgetEnabling riverpod_lint
启用riverpod_lint
Add the optional linter via :
analysis_options.yamlyaml
plugins:
riverpod_lint: ^2.0.0 # use latest from https://pub.dev/packages/riverpod_lintThis provides lint rules and refactorings for Riverpod. See the riverpod_lint package page for the full list.
通过添加可选的linter:
analysis_options.yamlyaml
plugins:
riverpod_lint: ^2.0.0 # use latest from https://pub.dev/packages/riverpod_lint这将为Riverpod提供lint规则与重构功能。完整规则列表请查看riverpod_lint包的页面。
Going further
进阶内容
- Code generation and hooks: See the riverpod-codegen-and-hooks skill (or docs: About code generation, About hooks).
- VS Code / Android Studio: Consider Flutter Riverpod Snippets extensions for faster boilerplate.
- 代码生成与hooks: 请查看riverpod-codegen-and-hooks技能文档(或官方文档:关于代码生成、关于hooks)。
- VS Code / Android Studio: 可考虑安装Flutter Riverpod Snippets扩展,快速生成模板代码。