[flutter] RxDart를 사용한 사용자 인증 처리 방법

RxDart는 Dart 언어에서 리액티브 프로그래밍을 구현하기 위한 라이브러리입니다. 이번 기사에서는 RxDart를 사용하여 Flutter 앱에서 사용자 인증 처리를 하는 방법에 대해 알아보겠습니다.

1. RxDart 패키지 추가

먼저, pubspec.yaml 파일에 RxDart 패키지를 추가해야 합니다. 아래와 같이 dependencies 섹션에 RxDart 패키지를 추가합니다.

dependencies:
  rxdart: ^0.25.0

저장한 뒤에는 패키지를 다운로드하고 업데이트하기 위해 터미널에 flutter pub get 명령어를 실행합니다.

2. BehaviorSubject 사용

사용자 인증을 처리하기 위해 BehaviorSubject를 사용합니다. BehaviorSubject는 Subject의 하위 클래스로, 초기값과 함께 생성되고 가장 최근 값을 저장합니다. 새로운 값이 발행되면 구독자에게 알립니다.

import 'package:rxdart/rxdart.dart';

class AuthBloc {
  final BehaviorSubject<bool> _isLoggedIn = BehaviorSubject<bool>.seeded(false);

  ValueStream<bool> get isLoggedIn => _isLoggedIn.stream;

  void login() {
    // 사용자 인증 처리 로직
    // 인증 성공시 _isLoggedIn에 true를 발행
    _isLoggedIn.add(true);
  }

  void logout() {
    // 로그아웃 처리 로직
    // 로그아웃 성공시 _isLoggedIn에 false를 발행
    _isLoggedIn.add(false);
  }

  void dispose() {
    _isLoggedIn.close();
  }
}

위의 코드에서 login 메소드는 사용자 인증에 성공했을 때 _isLoggedIn에 true 값을 발행하고, logout 메소드는 로그아웃에 성공했을 때 false 값을 발행합니다.

3. 인증 상태 관리

이제 인증 상태를 효과적으로 관리할 수 있습니다. Flutter 위젯에서는 StreamBuilder를 사용하여 인증 상태를 구독하고 그에 따라 UI를 업데이트할 수 있습니다.

class HomePage extends StatelessWidget {
  final AuthBloc _authBloc = AuthBloc();

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<bool>(
      stream: _authBloc.isLoggedIn,
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return CircularProgressIndicator();
        }

        bool isLoggedIn = snapshot.data;

        return isLoggedIn ? MainScreen() : LoginScreen();
      },
    );
  }

  @override
  void dispose() {
    _authBloc.dispose();
    super.dispose();
  }
}

위의 코드에서 StreamBuilder 위젯은 _authBloc.isLoggedIn을 구독하고, snapshot이 갱신될 때마다 UI가 업데이트됩니다. snapshot.hasData로 현재 데이터의 유무를 확인하고, 데이터가 있는 경우 로그인 상태에 따라 MainScreen 또는 LoginScreen 위젯을 반환합니다.

결론

RxDart를 사용하여 Flutter 앱에서 사용자 인증 처리를 하는 방법에 대해 알아보았습니다. BehaviorSubject를 사용하여 인증 상태를 관리하고 StreamBuilder를 사용하여 UI를 업데이트할 수 있습니다. RxDart의 강력한 기능을 활용하여 앱의 성능과 유지 보수성을 향상시킬 수 있습니다.

더 자세한 내용은 RxDart의 공식 문서를 참조해주세요.