[flutter] 플러터에서 useTimer 훅(hook)을 사용한 예약 시스템 구현

플러터 앱에서 예약 시스템을 구현하려면 타이머를 활용하여 일정 시간 후에 작업을 수행할 수 있어야 합니다. useTimer 훅을 사용하면 이러한 기능을 구현할 수 있습니다. 이 훅은 타이머를 관리하고 시간이 경과한 후에 원하는 작업을 실행할 수 있도록 해줍니다.

useState 훅을 사용하여 타이머 상태 관리

import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:hooks_riverpod/all.dart';

final timerProvider = StateProvider((ref) => 0);

void main() {
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Reservation System'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              context.read(timerProvider).state = 10; // 예약 시간 설정 (초 단위)
            },
            child: Text('10초 후에 예약하기'),
          ),
        ),
      ),
    );
  }
}

위 코드에서는 timerProvider를 정의하고, useState 훅을 사용하여 타이머 상태를 관리했습니다. 버튼을 누르면 예약 시간을 10초로 설정하도록 하였습니다.

useTimer 훅을 사용하여 예약 시간 관리

import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:hooks_riverpod/all.dart';

Widget TimerComponent() {
  return Consumer(
    builder: (context, watch, child) {
      final timerState = watch(timerProvider); // 타이머 상태 가져오기
      if (timerState.state > 0) {
        Future.delayed(Duration(seconds: timerState.state), () {
          // 예약 시간이 되면 수행할 작업
          print('예약 시스템 - 예약 완료');
          watch(timerProvider).state = 0; // 타이머 초기화
        });
      }
      return Text('예약 중: ${timerState.state} 초 남음');
    },
  );
}

void main() {
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Reservation System'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () {
                  context.read(timerProvider).state = 10; // 예약 시간 설정 (초 단위)
                },
                child: Text('10초 후에 예약하기'),
              ),
              TimerComponent(), // 예약 시간 표시
            ],
          ),
        ),
      ),
    );
  }
}

위 코드는 useTimer 훅을 사용하여 예약 시간을 관리하는 컴포넌트를 작성한 예제입니다. TimerComponent와 같은 컴포넌트를 사용하여 상태를 화면에 표시하고, 예약 시간이 되면 원하는 작업을 실행할 수 있도록 구현했습니다.

플러터에서 useTimer 훅을 사용하면 예약 시스템을 쉽게 구현할 수 있습니다. 이를 활용하여 다양한 예약 기능을 개발할 수 있을 것입니다.

참고문헌: