[flutter] 플러터 프로바이더를 사용하여 원격 데이터 가져오기

Flutter 앱을 개발하다 보면 원격 API로부터 데이터를 가져와야 하는 경우가 많습니다. 이를 위해 Provider 패키지를 사용하여 상태를 관리하고, 원격 데이터를 효율적으로 가져올 수 있습니다.

이번 글에서는 Flutter 앱에서 Provider를 사용하여 원격 데이터를 가져오는 방법에 대해 알아보겠습니다.

1. Provider 패키지 가져오기

먼저, pubspec.yaml 파일에 다음과 같이 Provider 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  provider: ^4.3.2

그리고 터미널에서 아래 명령어를 실행하여 패키지를 가져옵니다.

flutter pub get

2. 모델 클래스 생성

다음으로, 가져올 데이터의 형식에 맞게 모델 클래스를 만듭니다.

class RemoteData {
  final String name;
  final int age;

  RemoteData({required this.name, required this.age});
}

3. 데이터 제공자(Provider) 생성

이제 Provider를 통해 원격 데이터를 가져올 객체를 생성합니다.

import 'package:flutter/material.dart';

class RemoteDataProvider with ChangeNotifier {
  RemoteData? _data;

  RemoteData? get data => _data;

  Future<void> fetchData() async {
    // 원격 API로부터 데이터 가져오는 로직
    // ...

    // 가져온 데이터를 _data에 저장
    _data = RemoteData(name: 'John', age: 30);

    notifyListeners();
  }
}

4. 화면에 데이터 표시

마지막으로, 화면에 데이터를 표시하고 Provider를 통해 데이터를 가져오는 방법을 살펴봅니다.

class RemoteDataScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Remote Data Example'),
      ),
      body: Center(
        child: Consumer<RemoteDataProvider>(
          builder: (context, dataProvider, _) {
            if (dataProvider.data == null) {
              return ElevatedButton(
                onPressed: () {
                  dataProvider.fetchData();
                },
                child: Text('Fetch Data'),
              );
            } else {
              return Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Name: ${dataProvider.data!.name}'),
                  Text('Age: ${dataProvider.data!.age}'),
                ],
              );
            }
          },
        ),
      ),
    );
  }
}

위의 예제에서는 Consumer 위젯을 사용하여 Provider를 구독하고, 데이터를 가져와 화면에 표시하고 있습니다.

이제 위의 예제를 참고하여 Flutter 앱에서 Provider를 사용하여 원격 데이터를 효율적으로 가져오는 방법을 익힐 수 있습니다.