[flutter] 플러터 RxDart로 메모 및 노트 앱 개발하기

본 포스트에서는 RxDart 라이브러리를 사용하여 플러터(Flutter)로 메모 및 노트 앱을 개발하는 방법을 알아보겠습니다.

RxDart 소개

RxDart은 Dart 언어를 통해 반응형(reactive) 프로그래밍을 구현하기 위한 라이브러리입니다. 반응형 프로그래밍은 상태 변화에 따라 자동으로 업데이트되는 UI를 구현할 수 있도록 도와줍니다. RxDart은 Observable, Observer 등의 개념을 이용하여 데이터 흐름을 간편하게 관리할 수 있게 해줍니다.

프로젝트 설정

먼저, 새로운 플러터 프로젝트를 생성해줍니다. 이후, pubspec.yaml 파일에 RxDart 의존성을 추가해줍니다.

dependencies:
  flutter:
    sdk: flutter
  rxdart: ^0.24.1

의존성을 추가한 후, flutter packages get 명령어를 통해 의존성을 설치합니다.

메모 앱 UI 구성

간단한 메모 앱을 만들기 위해 TextField와 Button 위젯을 사용하여 UI를 구성해보겠습니다. 또한, RxDart을 사용하기 위해 import 'package:rxdart/rxdart.dart'; 문장을 상단에 추가해줍니다.

import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Memo App',
      home: MemoPage(),
    );
  }
}

class MemoPage extends StatefulWidget {
  @override
  _MemoPageState createState() => _MemoPageState();
}

class _MemoPageState extends State<MemoPage> {
  final _memoController = BehaviorSubject<String>();

  @override
  void dispose() {
    _memoController.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Memo App'),
      ),
      body: Container(
        padding: EdgeInsets.all(20.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            TextField(
              onChanged: (text) {
                _memoController.add(text);
              },
              decoration: InputDecoration(
                labelText: 'Memo',
              ),
            ),
            SizedBox(height: 10.0),
            RaisedButton(
              onPressed: () {
                // Memo 저장 로직 추가
              },
              child: Text('Save Memo'),
            ),
          ],
        ),
      ),
    );
  }
}

위 코드는 앱의 메인 화면인 MemoPage를 구성하는 코드입니다. _MemoPageState 내부에서는 BehaviorSubject를 이용하여 Memo를 관리합니다. TextField의 내용이 변경될 때마다 _memoController에 해당 내용을 전달하고, RaisedButton을 누를 경우 Memo를 저장하는 로직을 추가해야 합니다.

메모 저장하기

메모를 저장하기 위해서는 RaisedButton을 클릭할 때마다 _memoController의 내용을 가져와야 합니다. 이를 위해 _MemoPageState에 저장 로직을 추가해보겠습니다.

RaisedButton(
  onPressed: () {
    final memo = _memoController.value;
    _saveMemo(memo);
  },
  child: Text('Save Memo'),
),

void _saveMemo(String memo) {
  // Memo 저장 로직 구현
  print('Memo saved: $memo');
}

해당 코드에서는 _saveMemo 메서드를 호출하여 메모를 저장하도록 구현했습니다. 여기서는 단순히 콘솔에 메모를 출력하는 로직으로 대체했습니다. 실제 앱에서는 데이터베이스나 파일에 메모를 저장하도록 구현해야 합니다.

결론

이제 RxDart을 이용하여 플러터로 메모 및 노트 앱을 개발하는 방법을 알아보았습니다. RxDart의 반응형 프로그래밍 기능을 사용하면 UI와 데이터 간의 싱크를 쉽게 유지할 수 있습니다. 이를 통해 사용자가 메모를 작성하고 저장하는 기능을 구현할 수 있습니다.

더 복잡한 앱을 구현할 때에는 RxDart의 다른 기능을 적극적으로 활용하여 효율적이고 유연한 코드를 작성할 수 있습니다. RxDart 공식 문서와 예제 코드를 참고하여 더 깊이 있는 응용을 시도해보시기 바랍니다.

참고 자료