4
4
** Flutter에서 NEIS 교육정보 개방 포털을 간편하게 사용할 수 있도록 도와주는 패키지입니다.**
5
5
학교 기본 정보, 급식 정보 등을 학교 이름 기반으로 간단하게 조회할 수 있습니다.
6
6
7
+ ---
8
+
7
9
## 주요 기능
8
10
9
- - 학교정보 조회
11
+ - 학교 정보 조회
12
+ - 급식 정보 조회 (조식 / 중식 / 석식)
13
+ - 날짜별 급식 자동 캐싱
14
+ - ` neis.meal.lunch['YYYYMMDD'] ` 형태의 선언적 API
10
15
11
- ## 사용 예시
16
+ ---
12
17
13
- ``` dart
14
- final neis = Neis(apiKey: 'YOUR_API_KEY');
15
- await neis.loadSchoolInfo('경북소프트웨어마이스터고등학교');
16
- ```
18
+ ## 지원 메서드 및 구조
17
19
18
- ## 지원 중인 메서드
19
- ### loadSchoolInfo
20
+ ### loadSchoolInfo(String schoolName)
20
21
21
22
학교 이름으로 학교 정보를 불러옵니다.
22
23
교육청 코드(ATPT_OFCDC_SC_CODE)와 학교 코드(SD_SCHUL_CODE)를 자동 저장합니다.
@@ -27,10 +28,40 @@ print(neis.schoolCode);
27
28
print(neis.officeCode);
28
29
```
29
30
30
- ## 예시 코드
31
+ ### neis.meal.lunch[ "YYYYMMDD"]
32
+
33
+ 날짜별 급식 정보를 간단하게 불러옵니다.
34
+ 조식(breakfast), 중식(lunch), 석식(dinner) 모두 지원하며 내부적으로 캐싱됩니다.
35
+
36
+ ``` dart
37
+ final lunch = await neis.meal.lunch['20250420'];
38
+ print(lunch?.dishes.join(", "));
39
+ ```
40
+
41
+ ---
42
+
43
+ ## 사용 예시 (학교 정보 + 오늘의 급식 출력)
44
+
31
45
``` dart
32
46
import 'package:flutter/material.dart';
33
47
import 'package:flutter_neis/flutter_neis.dart';
48
+ import 'package:intl/intl.dart';
49
+
50
+ void main() {
51
+ runApp(const MyApp());
52
+ }
53
+
54
+ class MyApp extends StatelessWidget {
55
+ const MyApp({super.key});
56
+
57
+ @override
58
+ Widget build(BuildContext context) {
59
+ return const MaterialApp(
60
+ home: HomeScreen(),
61
+ debugShowCheckedModeBanner: false,
62
+ );
63
+ }
64
+ }
34
65
35
66
class HomeScreen extends StatefulWidget {
36
67
const HomeScreen({super.key});
@@ -41,25 +72,48 @@ class HomeScreen extends StatefulWidget {
41
72
42
73
class _HomeScreenState extends State<HomeScreen> {
43
74
final neis = Neis(apiKey: 'YOUR-API-KEY');
75
+ bool _loading = true;
76
+ List<String> lunchMenu = [];
44
77
45
78
@override
46
79
void initState() {
47
80
super.initState();
48
- neis.loadSchoolInfo('경북소프트웨어마이스터고등학교').then((_) {
49
- setState(() {});
81
+ _load();
82
+ }
83
+
84
+ Future<void> _load() async {
85
+ await neis.loadSchoolInfo('경북소프트웨어마이스터고등학교');
86
+
87
+ final today = DateFormat('yyyyMMdd').format(DateTime.now());
88
+ final lunch = await neis.meal.lunch[today];
89
+
90
+ setState(() {
91
+ lunchMenu = lunch?.dishes ?? ['중식 정보 없음'];
92
+ _loading = false;
50
93
});
51
94
}
52
95
53
96
@override
54
97
Widget build(BuildContext context) {
55
- return Scaffold(body: Center(child: Text(neis.officeCode)));
98
+ return Scaffold(
99
+ appBar: AppBar(title: Text(neis.schoolName)),
100
+ body: _loading
101
+ ? const Center(child: CircularProgressIndicator())
102
+ : Padding(
103
+ padding: const EdgeInsets.all(16),
104
+ child: Column(
105
+ crossAxisAlignment: CrossAxisAlignment.start,
106
+ children: [
107
+ const Text(
108
+ '🍱 오늘의 중식',
109
+ style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
110
+ ),
111
+ const SizedBox(height: 12),
112
+ ...lunchMenu.map((dish) => Text(dish)).toList(),
113
+ ],
114
+ ),
115
+ ),
116
+ );
56
117
}
57
118
}
58
- ```
59
-
60
-
61
- ## 설치
62
-
63
- ``` yaml
64
- dependencies :
65
- flutter_neis : ^1.0.0
119
+ ```
0 commit comments