주요 콘텐츠로 건너뛰기
선언적 프로그래밍

선언적 프로그래밍

Stateless 위젯과 유사한 방식으로 비즈니스 로직을 작성하세요.
필요할 때 네트워크 요청이 자동으로 재계산되도록 하고 로직을 쉽게 reusable/composable/maintainable 하게 만드세요.

일반적인 UI 패턴을 쉽게 구현

일반적인 UI 패턴을 쉽게 구현

Riverpod을 사용하면,"당겨서 새로고침"/ "타이핑하는대로 검색"/등 일반적이지만 복잡한 UI 패턴을 몇 줄의 코드만으로 처리할 수 있습니다.

준비된 도구

준비된 도구

Riverpod은 일반적인 실수를 컴파일 에러로 처리하여 컴파일러를 향상시킵니다. 또한 사용자 정의 린트 규칙과 리팩터링 옵션도 제공합니다. 문서 생성을 위한 명령줄도 있습니다.

기능

Everything you need to build robust, scalable, and maintainable Dart & Flutter applications.

Declarative programming
Native network requests support
Automatic loading/error handling
Compile safety
Type-safe query parameters
Test ready
Work in plain Dart (servers/CLI/...)
Easily combinable states
Built-in support for pull-to-refresh
Custom lint rules
Built-in refactorings
Hot-reload support
Logging
Websocket support
Documentation generator

어디서나 공유 상태 선언하기

더 이상 main.dart과 UI 파일 사이를 오갈 필요가 없습니다.
공유 상태의 코드를 별도의 패키지에 넣든, 필요한 위젯 바로 옆에 넣든, 테스트 가능성을 잃지 않고 적절한 위치에 배치하세요.

// A shared state that can be accessed by multiple widgets at the same time.

class Count extends _$Count {

int build() => 0;

void increment() => state++;
}

// Consumes the shared state and rebuild when it changes
class Title extends ConsumerWidget {

Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(countProvider);
return Text('$count');
}
}

필요할 때만 상태 재계산/UI 재빌드

더 이상 build 메서드 내에서 목록을 정렬/필터링하거나 고급 캐시 메커니즘에 의존할 필요가 없습니다.

Provider"families"를 사용하여 목록을 정렬하거나 truly 필요한 경우에만 HTTP 요청을 수행하세요.


List<Todo> filteredTodos(Ref ref) {
// Providers can consume other providers using the "ref" object.
// With ref.watch, providers will automatically update if the watched values changes.
final List<Todo> todos = ref.watch(todosProvider);
final Filter filter = ref.watch(filterProvider);

switch (filter) {
case Filter.all:
return todos;
case Filter.completed:
return todos.where((todo) => todo.completed).toList();
case Filter.uncompleted:
return todos.where((todo) => !todo.completed).toList();
}
}

개발 도구에서 상태 조사하기

Riverpod을 사용하면 Flutter의 개발 도구에서 상태를 바로 확인할 수 있습니다.
또한, 완전한 상태 인스펙터(state-inspector)가 개발 중입니다.

개발 도구에서 상태 조사하기

리팩터로 일상적인 작업을 간소화하세요.

Riverpod은 "Consumer로 위젯 감싸기"등 다양한 리팩터(refactors)를 제공합니다.. 리팩터링 목록를 살펴보세요.

리팩터로 일상적인 작업을 간소화하세요.

린트 규칙으로 코드의 유지보수성 유지

Riverpod에 특화된 새로운 린트 규칙이 구현되고 더 많은 규칙이 지속적으로 추가됩니다. 이렇게 하면 코드가 최상의 상태를 유지할 수 있습니다. 린트 규칙 목록를 살펴보세요.

린트 규칙으로 코드의 유지보수성 유지

안전하게 provider 읽기

provider를 읽었을때 절대로 나쁜 상태(bad state)의 결과가 되지 않습니다. 공급자를 읽는 데 필요한 코드를 작성할 수 있다면 유효한 값(valid value)을 얻을 수 있습니다.

이는 비동기적으로 로드된 값에도 적용됩니다. Provider와 달리 Riverpod를 사용하면 로딩/오류 사례를 깔끔하게 처리할 수 있습니다.


Future<Configuration> configurations(Ref ref) async {
final uri = Uri.parse('configs.json');
final rawJson = await File.fromUri(uri).readAsString();

return Configuration.fromJson(json.decode(rawJson));
}

class Example extends ConsumerWidget {

Widget build(BuildContext context, WidgetRef ref) {
final configs = ref.watch(configurationsProvider);

// Use pattern matching to safely handle loading/error states
return switch (configs) {
AsyncData(:final value) => Text('data: ${value.host}'),
AsyncError(:final error) => Text('error: $error'),
_ => const CircularProgressIndicator(),
};
}
}

Sponsors

Riverpod is open source software funded by the community and our generous sponsors.

Riverpod Sponsors