[flutter] 플러터 Riverpod를 사용한 데이터 필터링 방법

플러터(Flutter) 앱에서 데이터 필터링은 매우 일반적인 작업입니다. Riverpod는 플러터를 위한 상태 관리 라이브러리로서, Riverpod을 사용하여 데이터를 필터링하는 방법에 대해 알아보겠습니다.

1. Riverpod 라이브러리 추가하기

먼저, pubspec.yaml 파일에 riverpod 패키지를 추가합니다. 예를 들면 다음과 같습니다:

dependencies:
  flutter:
    sdk: flutter
  riverpod: ^1.0.3

이후 flutter pub get 명령어를 실행하여 변경사항을 적용합니다.

2. 데이터 모델 준비하기

데이터를 필터링하기 위해 먼저 데이터 모델을 정의합니다. 이 예제에서는 Product라는 간단한 데이터 모델을 사용합니다.

class Product {
  final String name;
  final double price;
  final bool isAvailable;

  Product({required this.name, required this.price, required this.isAvailable});
}

3. 필터링 로직 작성하기

다음으로, 필터링 로직을 작성합니다. 이 예제에서는 Product 리스트를 생성하고, 그 중에 가격이 100보다 작고 사용 가능한 제품들만 필터링하는 작업을 수행합니다.

final productListProvider = Provider<List<Product>>((ref) {
  final products = [
    Product(name: 'Product 1', price: 50, isAvailable: true),
    Product(name: 'Product 2', price: 150, isAvailable: false),
    Product(name: 'Product 3', price: 80, isAvailable: true),
    Product(name: 'Product 4', price: 120, isAvailable: true),
  ];

  return products.where((product) => product.price < 100 && product.isAvailable).toList();
});

위의 코드에서, productListProviderProvider 함수를 사용하여 제품 리스트를 제공합니다. products 리스트에서 where 메서드를 사용하여 필터링 로직을 작성합니다.

4. 필터링된 데이터 사용하기

필터링된 데이터를 사용하려면, 해당 데이터를 Consumer 위젯으로 감싸서 사용해야 합니다. 예를 들어, 필터링된 제품 리스트를 표시하는 위젯을 만들어 보겠습니다.

class FilteredProductListWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final productList = useProvider(productListProvider);

    return ListView.builder(
      itemCount: productList.length,
      itemBuilder: (context, index) {
        final product = productList[index];
        return ListTile(
          title: Text(product.name),
          subtitle: Text('\$${product.price}'),
        );
      },
    );
  }
}

위의 코드에서, useProvider 함수를 사용하여 productListProvider를 사용합니다. 그리고 ListView.builder를 사용하여 필터링된 제품 리스트를 화면에 표시합니다.

결론

플러터 Riverpod를 사용하여 데이터 필터링을 구현하는 방법에 대해 살펴보았습니다. Riverpod은 플러터 앱에서 상태 관리를 용이하게 해주는 훌륭한 도구입니다. 이를 통해 데이터 필터링 뿐만 아니라 다양한 상태 관리 작업을 효율적으로 수행할 수 있습니다.