프로젝트 정보

2주차 활동 보고서

액션 아이템

UI 개발, 디자인 및 스토리 보드

image.png

Hive 로컬 저장소 구축(화면 구축하는대로 마저 추가 및 수정)(완)

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter(); // ✅ Hive 로컬 저장소 초기화
  Hive.registerAdapter(DiaryEntryAdapter()); // ✅ 모델 등록
  await Hive.openBox<DiaryEntry>('diaryBox'); // ✅ diaryBox라는 이름의 로컬 저장소(Box) 열기
  runApp(const MyApp());
} //main.dart

diaryBox = Hive.box<DiaryEntry>('diaryBox'); // ✅ 이미 열려 있는 diaryBox 사용
//input_screen.dart
diaryBox = Hive.box<DiaryEntry>('diaryBox'); // ✅ 이미 열려 있는 diaryBox 사용

await diaryBox.delete(id); // ✅ 일기 삭제
//diary_lsit_screen

화면 개발(최종 완)

화면 개발(input_screeen)

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

class InputScreen extends StatefulWidget {
  const InputScreen({super.key});

  @override
  State<InputScreen> createState() => _InputScreenState();
}

class _InputScreenState extends State<InputScreen> {
  final TextEditingController _controller = TextEditingController();

  void _goToSummaryScreen() {
    final text = _controller.text.trim();
    if (text.isNotEmpty) {
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (_) => SummaryScreen(originalText: text),
        ),
      );
    }
  }

  void _goToDiaryList() {
    Navigator.pushNamed(context, '/list');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFFF7F7F7), // 부드러운 배경색
      appBar: AppBar(
        title: const Text('일기 작성'),
        backgroundColor: Colors.teal,
      ),
      body: Padding(
        padding: const EdgeInsets.all(20.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Container(
              decoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.circular(12),
                boxShadow: const [
                  BoxShadow(
                    color: Colors.black12,
                    blurRadius: 6,
                    offset: Offset(0, 2),
                  ),
                ],
              ),
              child: TextField(
                controller: _controller,
                maxLines: 10,
                decoration: const InputDecoration(
                  hintText: '오늘 하루를 기록해보세요',
                  border: InputBorder.none,
                  contentPadding: EdgeInsets.all(16),
                ),
              ),
            ),
            const SizedBox(height: 24),
            ElevatedButton.icon(
              onPressed: _goToSummaryScreen,
              icon: const Icon(Icons.auto_awesome),
              label: const Text('요약 및 감정 분석'),
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.teal,
                foregroundColor: Colors.white,
                padding: const EdgeInsets.symmetric(vertical: 16),
                textStyle: const TextStyle(fontSize: 16),
              ),
            ),
            const SizedBox(height: 12),
            TextButton.icon(
              onPressed: _goToDiaryList,
              icon: const Icon(Icons.list),
              label: const Text('일기 목록 보기'),
              style: TextButton.styleFrom(
                foregroundColor: Colors.teal,
                textStyle: const TextStyle(fontSize: 15),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

화면 개발(summary_screen)