고원빈

[frontend] 2021-05-14

...@@ -42,3 +42,6 @@ appbar 관련 디자인은 추후 구현 예정 ...@@ -42,3 +42,6 @@ appbar 관련 디자인은 추후 구현 예정
42 + datetime picker widget을 이용하여 시간 선택 구현 예정 42 + datetime picker widget을 이용하여 시간 선택 구현 예정
43 + 알람 설정을 위한 Android Mainfest 설정 , 사용자 권한 요구 43 + 알람 설정을 위한 Android Mainfest 설정 , 사용자 권한 요구
44 44
45 +### 2021-05-14
46 ++ datetime picker 를 이용하여 알람 설정 완료
47 ++ 현재 알람 페이지와 알람 수정 페이지가 같은 곳에 위치 이에 따라 보이는 데이터만 존재하고 수정 여부를 묻는 것을 만들지 고민중
......
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 -import 'package:flutter/services.dart';
3 -import '../../shared/colors.dart';
4 import 'package:rxdart/subjects.dart'; 2 import 'package:rxdart/subjects.dart';
5 -import 'package:flutter_screenutil/flutter_screenutil.dart'; 3 +import 'package:shared_preferences/shared_preferences.dart';
6 -import 'package:flutter_local_notifications/flutter_local_notifications.dart';
7 -import 'package:flutter_application_1/src/screens/SettingPage.dart';
8 import 'package:flutter/cupertino.dart'; 4 import 'package:flutter/cupertino.dart';
9 import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; 5 import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
6 +import 'package:flutter_local_notifications/flutter_local_notifications.dart';
7 +import 'package:flutter_application_1/src/screens/SettingPage.dart';
8 +import 'package:flutter_application_1/src/screens/SettingPage/customTimepicker.dart';
10 9
11 final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = 10 final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
12 FlutterLocalNotificationsPlugin(); 11 FlutterLocalNotificationsPlugin();
...@@ -41,9 +40,17 @@ class Alarm extends StatefulWidget { ...@@ -41,9 +40,17 @@ class Alarm extends StatefulWidget {
41 class _AlarmnState extends State<Alarm> { 40 class _AlarmnState extends State<Alarm> {
42 FlutterLocalNotificationsPlugin fltrNotification; 41 FlutterLocalNotificationsPlugin fltrNotification;
43 42
43 + List<Widget> alarmList = [];
44 + List<dynamic> weekdays = [];
45 + List<String> times = [];
46 + List<int> timesHours = [];
47 + List<int> timesMinutes = [];
48 + List<dynamic> saveIndex = [];
49 + List<dynamic> isSwitched = [];
50 + List<bool> _weekday = [false, false, false, false, false, false, false];
51 +
44 void initState() { 52 void initState() {
45 super.initState(); 53 super.initState();
46 -
47 main(); 54 main();
48 } 55 }
49 56
...@@ -84,6 +91,44 @@ class _AlarmnState extends State<Alarm> { ...@@ -84,6 +91,44 @@ class _AlarmnState extends State<Alarm> {
84 ); 91 );
85 } 92 }
86 93
94 + void insertAlarm() {
95 + setState(() {
96 + weekdays.add([false, false, false, false, false, false, false]);
97 + times.add(' ');
98 + timesHours.add(0);
99 + timesMinutes.add(0);
100 + isSwitched.add(false);
101 +
102 + var length = saveIndex.length;
103 +
104 + if (saveIndex.length == 0) {
105 + saveIndex.add(1);
106 + } else {
107 + saveIndex.add(saveIndex[length - 1] + 1);
108 + }
109 +
110 + length = saveIndex.length;
111 + /*
112 + _prefs.setString('alarmList', weekdays.toString());
113 + for (var i = 0; i < times.length; i++) {
114 + _prefs.setString('time' + (saveIndex[i]).toString(),
115 + '${timesHours[i]}:${timesMinutes[i]}');
116 + }
117 + _prefs.setString('timeIndex', saveIndex.toString());
118 + _prefs.setString('toggle', isSwitched.toString());
119 +*/
120 + print(saveIndex);
121 + });
122 + }
123 +
124 + void rerendering() {
125 + print(weekdays);
126 + print(times);
127 + print(timesHours);
128 + print(timesMinutes);
129 + setState(() {});
130 + }
131 +
87 void _configureDidReceiveLocalNotificationSubject() { 132 void _configureDidReceiveLocalNotificationSubject() {
88 didReceiveLocalNotificationSubject.stream 133 didReceiveLocalNotificationSubject.stream
89 .listen((ReceivedNotification receivedNotification) async { 134 .listen((ReceivedNotification receivedNotification) async {
...@@ -189,79 +234,406 @@ class _AlarmnState extends State<Alarm> { ...@@ -189,79 +234,406 @@ class _AlarmnState extends State<Alarm> {
189 ], 234 ],
190 ), 235 ),
191 ), 236 ),
192 - body: FlatButton( 237 + body: SingleChildScrollView(
193 - height: size.height * 0.07, 238 + scrollDirection: Axis.vertical,
194 - onPressed: () { 239 + child: Padding(
195 - _showDailyAtTime(1, 2); 240 + padding: EdgeInsets.all(8.0),
196 - }, 241 + child: Column(
197 - child: Text( 242 + crossAxisAlignment: CrossAxisAlignment.center,
198 - '알람 설정', 243 + children: <Widget>[
199 - textScaleFactor: 1.0, 244 + Row(
200 - style: TextStyle( 245 + mainAxisAlignment: MainAxisAlignment.center,
201 - color: Colors.white, 246 + children: <Widget>[
202 - fontSize: 24, 247 + Container(
203 - fontFamily: 'Noto', 248 + width: 180,
204 - fontWeight: FontWeight.bold), 249 + height: 80,
250 + padding: const EdgeInsets.all(20.0),
251 + child: RaisedButton(
252 + onPressed: () async {
253 + insertAlarm();
254 + },
255 + shape: RoundedRectangleBorder(
256 + borderRadius: new BorderRadius.circular(30.0),
257 + side: BorderSide(color: Colors.blue)),
258 + color: Color(0xff1674f6),
259 + child: Text(
260 + '알람 추가',
261 + textScaleFactor: 1.0,
262 + style: TextStyle(
263 + fontSize: 16,
264 + color: Colors.white,
265 + fontWeight: FontWeight.bold),
266 + ),
267 + ),
268 + ),
269 + ],
270 + ),
271 + for (var i = 0; i < weekdays.length; i++)
272 + inAlarmData(
273 + context,
274 + weekdays,
275 + weekdays[i],
276 + _showWeeklyAtDayAndTime,
277 + times[i],
278 + timesHours[i],
279 + timesMinutes[i],
280 + i + 1,
281 + rerendering,
282 + size,
283 + )
284 + ],
285 + ),
205 ), 286 ),
206 - color: Color(0xff8E97FD),
207 - shape:
208 - RoundedRectangleBorder(borderRadius: BorderRadius.circular(50)),
209 ), 287 ),
210 ), 288 ),
211 ); 289 );
212 } 290 }
213 291
214 - Future<void> _cancelNotification() async { 292 + Widget inAlarmData(
215 - await flutterLocalNotificationsPlugin.cancel(0); 293 + BuildContext context,
216 - } 294 + var allweekddata,
217 - 295 + var weekdayArray,
218 - Future<void> _showTimeoutNotification() async { 296 + var activeFunctions,
219 - var androidPlatformChannelSpecifics = AndroidNotificationDetails( 297 + var timeString,
220 - 'silent channel id', 298 + var timeHour,
221 - 'silent channel name', 299 + var timesMinite,
222 - 'silent channel description', 300 + var index,
223 - timeoutAfter: 3000, 301 + var rerendering,
224 - styleInformation: DefaultStyleInformation(true, true)); 302 + Size size,
225 - var iOSPlatformChannelSpecifics = 303 + ) {
226 - IOSNotificationDetails(presentSound: false); 304 + SharedPreferences _prefs;
227 - var platformChannelSpecifics = NotificationDetails( 305 +
228 - androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); 306 + var savetimeStrings;
229 - await flutterLocalNotificationsPlugin.show(0, 'timeout notification', 307 + var setDaysString = ['월', '화', '수', '목', '금', '토', '일'];
230 - 'Times out after 3 seconds', platformChannelSpecifics); 308 +
231 - } 309 + return Container(
310 + margin: EdgeInsets.fromLTRB(0, 0, 0, 20),
311 + decoration: BoxDecoration(
312 + border: Border.all(
313 + color: Color(0xffd0d0d0),
314 + ),
315 + borderRadius: BorderRadius.all(Radius.circular(5)),
316 + ),
317 + child: Column(
318 + children: <Widget>[
319 + Container(
320 + alignment: Alignment.center,
321 + width: size.width,
322 + height: 50.0,
323 + child: Row(
324 + mainAxisAlignment: MainAxisAlignment.center,
325 + children: <Widget>[
326 + Row(
327 + mainAxisAlignment: MainAxisAlignment.center,
328 + children: <Widget>[
329 + for (var i = 0; i < weekdayArray.length; i++)
330 + GestureDetector(
331 + onTap: () async {
332 + _prefs = await SharedPreferences.getInstance();
333 +
334 + if (weekdayArray[i] == false) {
335 + weekdayArray[i] = true;
336 + } else {
337 + weekdayArray[i] = false;
338 + }
339 +
340 + _prefs.setString(
341 + 'alarmList', allweekddata.toString());
342 +
343 + rerendering();
344 + },
345 + child: Container(
346 + margin: EdgeInsets.fromLTRB(15, 0, 0, 0),
347 + width: size.width * 0.09,
348 + child: Text(
349 + setDaysString[i],
350 + style: TextStyle(
351 + color: weekdayArray[i] == false
352 + ? Colors.teal
353 + : Colors.red,
354 + fontWeight: FontWeight.bold,
355 + fontSize: 20.0),
356 + )),
357 + ),
358 + ],
359 + )
360 + ],
361 + ),
362 + color: Colors.white,
363 + ),
364 + RaisedButton(
365 + shape: RoundedRectangleBorder(
366 + borderRadius: BorderRadius.circular(5.0)),
367 + elevation: 4.0,
368 + onPressed: () async {
369 + _prefs = await SharedPreferences.getInstance();
370 + var abc = await DatePicker.showPicker(
371 + context,
372 + theme: DatePickerTheme(
373 + containerHeight: 210.0,
374 + ),
375 + showTitleActions: true,
376 + onConfirm: (time) {
377 + print('confirm $time');
378 +
379 + // realTime = new DateTime(time.hour, time.minute);
380 + timeHour = time.hour;
381 + timesMinite = time.minute;
382 +
383 + savetimeStrings = '${time.hour}:${time.minute}';
384 +
385 + var minutString;
386 +
387 + if (timesMinite.toString().length == 1) {
388 + minutString = '0' + timesMinite.toString();
389 + } else {
390 + minutString = timesMinite.toString();
391 + }
392 +
393 + if (timeHour - 12 < 0) {
394 + timeString = '오전 ${time.hour}:' + minutString;
395 + } else {
396 + if (timeHour == 12) {
397 + timeString = '오후 ${time.hour}:' + minutString;
398 + } else {
399 + timeString = '오후 ${time.hour - 12}:' + minutString;
400 + }
401 + }
402 + },
403 + pickerModel: CustomPicker(
404 + currentTime: DateTime.now(), locale: LocaleType.ko),
405 + );
232 406
233 - Future<void> _cancelAllNotifications() async { 407 + times[index - 1] = timeString;
234 - await flutterLocalNotificationsPlugin.cancelAll(); 408 + timesHours[index - 1] = timeHour;
235 - } 409 + timesMinutes[index - 1] = timesMinite;
236 410
237 - /// 매일 지정된 시간에 Alarm 을 트는 Function 411 + _prefs.setString('time' + (saveIndex[index - 1]).toString(),
238 - Future<void> _showDailyAtTime(int a, int b) async { 412 + savetimeStrings);
239 - var time = Time(11, 24, 0);
240 - var androidPlatformChannelSpecifics = AndroidNotificationDetails(
241 - 'repeatDailyAtTime channel id',
242 - 'repeatDailyAtTime channel name',
243 - 'repeatDailyAtTime description');
244 - var iOSPlatformChannelSpecifics = IOSNotificationDetails();
245 - var platformChannelSpecifics = NotificationDetails(
246 - androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
247 - await flutterLocalNotificationsPlugin.showDailyAtTime(
248 - 1,
249 - '알람 시간 알림 ',
250 - '설정하신 시간인 ${_toTwoDigitString(time.hour)}${_toTwoDigitString(time.minute)}분입니다.',
251 - time,
252 - platformChannelSpecifics);
253 413
254 - var pendingNotificationRequests = 414 + print(savetimeStrings);
255 - await flutterLocalNotificationsPlugin.pendingNotificationRequests();
256 415
257 - print(pendingNotificationRequests.toList()); 416 + setState(() {
417 + savetimeStrings = savetimeStrings;
418 + });
419 + // rerendering();
420 + },
421 + child: Container(
422 + alignment: Alignment.center,
423 + height: 50.0,
424 + child: Row(
425 + mainAxisAlignment: MainAxisAlignment.center,
426 + children: <Widget>[
427 + Row(
428 + mainAxisAlignment: MainAxisAlignment.center,
429 + children: <Widget>[
430 + Container(
431 + child: Row(
432 + mainAxisAlignment: MainAxisAlignment.center,
433 + children: <Widget>[
434 + Icon(
435 + Icons.access_time,
436 + size: 18.0,
437 + color: Colors.teal,
438 + ),
439 + Text(
440 + " " + timeString,
441 + textAlign: TextAlign.center,
442 + style: TextStyle(
443 + color: Colors.teal,
444 + fontWeight: FontWeight.bold,
445 + fontSize: 18.0),
446 + ),
447 + ],
448 + ),
449 + )
450 + ],
451 + ),
452 + ],
453 + ),
454 + ),
455 + color: Colors.white,
456 + ),
457 + Container(
458 + padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
459 + decoration: BoxDecoration(
460 + borderRadius: BorderRadius.circular(5.0),
461 + color: Colors.white),
462 + child: Container(
463 + alignment: Alignment.center,
464 + height: 50.0,
465 + child: Row(
466 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
467 + children: <Widget>[
468 + Text(
469 + "알람 설정",
470 + style: TextStyle(
471 + color: Colors.teal,
472 + fontWeight: FontWeight.bold,
473 + fontSize: 18.0),
474 + ),
475 + Switch(
476 + value: isSwitched[index - 1],
477 + onChanged: (value) async {
478 + print(savetimeStrings);
479 + if (value == true) {
480 + _prefs = await SharedPreferences.getInstance();
481 + int count = 1;
482 + bool allDayFalse = true;
483 + for (var i = 0; i < weekdayArray.length; i++) {
484 + if (weekdayArray[i] == true) {
485 + await activeFunctions(timeHour, timesMinite,
486 + i + 1, index * 10, count);
487 + count++;
488 + allDayFalse = false;
489 + }
490 + }
491 + if (allDayFalse == true) {
492 + showDialog(
493 + context: context,
494 + builder: (BuildContext context) {
495 + return AlertDialog(
496 + title: new Text('요일 선택 오류'),
497 + content:
498 + new Text('선택된 요일이 없습니다. 요일을 선택해주세요.'),
499 + actions: <Widget>[
500 + new FlatButton(
501 + child: new Text('닫기'),
502 + onPressed: () {
503 + Navigator.of(context).pop();
504 + })
505 + ],
506 + );
507 + });
508 + } else if (_prefs.getString('time' +
509 + (saveIndex[index - 1]).toString()) ==
510 + null) {
511 + showDialog(
512 + context: context,
513 + builder: (BuildContext context) {
514 + return AlertDialog(
515 + title: new Text('시간 설정 오류'),
516 + content:
517 + new Text('설정된 시간이 없습니다. 시간을 설정해주세요.'),
518 + actions: <Widget>[
519 + new FlatButton(
520 + child: new Text('닫기'),
521 + onPressed: () {
522 + Navigator.of(context).pop();
523 + })
524 + ],
525 + );
526 + });
527 + } else {
528 + setState(() {
529 + print(value);
530 + isSwitched[index - 1] = value;
531 + _prefs.setString(
532 + 'alarmList', allweekddata.toString());
533 + // _prefs.setString(
534 + // 'time' + saveIndex[index - 1].toString(),
535 + // savetimeStrings);
536 + _prefs.setString(
537 + 'timeIndex', saveIndex.toString());
538 + _prefs.setString(
539 + 'toggle', isSwitched.toString());
540 + print('time' + index.toString());
541 + showDialog(
542 + context: context,
543 + builder: (BuildContext context) {
544 + return AlertDialog(
545 + title: new Text('알람'),
546 + content: new Text('알람 설정을 완료 하였습니다.'),
547 + actions: <Widget>[
548 + new FlatButton(
549 + child: new Text('확인'),
550 + onPressed: () {
551 + Navigator.of(context).pop();
552 + })
553 + ],
554 + );
555 + });
556 + });
557 + }
558 + } else {
559 + _prefs = await SharedPreferences.getInstance();
560 + int count = 1;
561 + for (var i = 0; i < weekdayArray.length; i++) {
562 + if (weekdayArray[i] == true) {
563 + await flutterLocalNotificationsPlugin
564 + .cancel((index * 10) + count);
565 + count++;
566 + }
567 + }
568 + setState(() {
569 + isSwitched[index - 1] = value;
570 + _prefs.setString('toggle', isSwitched.toString());
571 + });
572 + }
573 + }),
574 + GestureDetector(
575 + onTap: () async {
576 + showDialog(
577 + context: context,
578 + builder: (BuildContext context) {
579 + return AlertDialog(
580 + title: new Text('알람 삭제'),
581 + content: new Text('선택한 알람을 삭제하시겠습니까?'),
582 + actions: <Widget>[
583 + new FlatButton(
584 + child: new Text('취소'),
585 + onPressed: () {
586 + Navigator.of(context).pop();
587 + }),
588 + new FlatButton(
589 + child: new Text('삭제'),
590 + onPressed: () async {
591 + _prefs = await SharedPreferences
592 + .getInstance();
593 + int count = 1;
594 + for (var i = 0;
595 + i < weekdayArray.length;
596 + i++) {
597 + if (weekdayArray[i] == true) {
598 + await flutterLocalNotificationsPlugin
599 + .cancel((index * 10) + count);
600 + count++;
601 + }
602 + }
603 + print(saveIndex);
604 + allweekddata.removeAt(index - 1);
605 + _prefs.remove('time' +
606 + saveIndex[index - 1].toString());
607 + times.removeAt(index - 1);
608 + saveIndex.removeAt(index - 1);
609 + isSwitched.removeAt(index - 1);
610 + _prefs.setString('alarmList',
611 + allweekddata.toString());
612 + _prefs.setString('timeIndex',
613 + saveIndex.toString());
614 + _prefs.setString(
615 + 'toggle', isSwitched.toString());
616 + rerendering();
617 + Navigator.of(context).pop();
618 + })
619 + ],
620 + );
621 + });
622 + },
623 + child: Icon(
624 + Icons.close,
625 + ))
626 + ],
627 + ),
628 + ),
629 + ),
630 + ],
631 + ));
258 } 632 }
259 633
260 /// weekday 가 1부터 7순으로 일 월 화 수 목 금 토 일 순서로 구성이 되어 있음 이에 따라 설정한 Weekday time 에 학습 알람을 뛰어주는 역할을 해주는 함수 634 /// weekday 가 1부터 7순으로 일 월 화 수 목 금 토 일 순서로 구성이 되어 있음 이에 따라 설정한 Weekday time 에 학습 알람을 뛰어주는 역할을 해주는 함수
261 Future<void> _showWeeklyAtDayAndTime( 635 Future<void> _showWeeklyAtDayAndTime(
262 int a, int b, int weekday, int index, int idindex) async { 636 int a, int b, int weekday, int index, int idindex) async {
263 - print(index + idindex);
264 -
265 Day setDay; 637 Day setDay;
266 638
267 if (weekday == 1) { 639 if (weekday == 1) {
...@@ -279,6 +651,7 @@ class _AlarmnState extends State<Alarm> { ...@@ -279,6 +651,7 @@ class _AlarmnState extends State<Alarm> {
279 } else if (weekday == 7) { 651 } else if (weekday == 7) {
280 setDay = Day.Sunday; 652 setDay = Day.Sunday;
281 } 653 }
654 + print('dd');
282 655
283 var time = Time(a, b, 0); 656 var time = Time(a, b, 0);
284 var androidPlatformChannelSpecifics = AndroidNotificationDetails( 657 var androidPlatformChannelSpecifics = AndroidNotificationDetails(
......
1 +import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
2 +
3 +class CustomPicker extends CommonPickerModel {
4 + var indexs;
5 +
6 + String digits(int value, int length) {
7 + return '$value'.padLeft(length, "0");
8 + }
9 +
10 + CustomPicker({DateTime currentTime, LocaleType locale})
11 + : super(locale: LocaleType.ko) {
12 + this.currentTime = currentTime ?? DateTime.now();
13 + var _dayPeriod = 0;
14 + this.setLeftIndex(this.currentTime.hour);
15 + this.setMiddleIndex(this.currentTime.minute);
16 + this.setRightIndex(_dayPeriod);
17 + _fillRightList();
18 + }
19 +
20 + @override
21 + String leftStringAtIndex(int index) {
22 + if (index >= 1 && index < 13) {
23 + return this.digits(index, 2);
24 + } else {
25 + return null;
26 + }
27 + }
28 +
29 + @override
30 + String middleStringAtIndex(int index) {
31 + if (index >= 0 && index < 60) {
32 + return this.digits(index, 2);
33 + } else {
34 + return null;
35 + }
36 + }
37 +
38 + @override
39 + String rightStringAtIndex(int index) {
40 + if (index == 0) {
41 + return 'AM';
42 + } else if (index == 1) {
43 + return 'PM';
44 + }
45 + return null;
46 + }
47 +
48 + void _fillRightList() {
49 + this.rightList = List.generate(2, (int index) {
50 + return '$index';
51 + });
52 + }
53 +
54 + @override
55 + void setRightIndex(int index) {
56 + super.setRightIndex(index);
57 + indexs = index;
58 + _fillRightList();
59 + }
60 +
61 + @override
62 + String leftDivider() {
63 + return ":";
64 + }
65 +
66 + @override
67 + String rightDivider() {
68 + return " ";
69 + }
70 +
71 + @override
72 + List<int> layoutProportions() {
73 + return [1, 1, 1];
74 + }
75 +
76 + @override
77 + DateTime finalTime() {
78 + var leftindex;
79 +
80 + print(indexs);
81 +
82 + if (indexs == 1) {
83 + if(this.currentLeftIndex() == 12){
84 + leftindex = 12;
85 + } else {
86 + leftindex = this.currentLeftIndex() + 12;
87 + }
88 +
89 +
90 + } else if (indexs == 0) {
91 + if(this.currentLeftIndex() == 12){
92 + leftindex = 0;
93 + } else {
94 + leftindex = this.currentLeftIndex();
95 + }
96 +
97 +
98 + }
99 +
100 + return currentTime.isUtc
101 + ? DateTime.utc(currentTime.year, currentTime.month, currentTime.day,
102 + leftindex, this.currentMiddleIndex(), this.currentRightIndex())
103 + : DateTime(currentTime.year, currentTime.month, currentTime.day,
104 + leftindex, this.currentMiddleIndex(), this.currentRightIndex());
105 + }
106 +}
...@@ -50,6 +50,20 @@ packages: ...@@ -50,6 +50,20 @@ packages:
50 url: "https://pub.dartlang.org" 50 url: "https://pub.dartlang.org"
51 source: hosted 51 source: hosted
52 version: "1.2.0-nullsafety.1" 52 version: "1.2.0-nullsafety.1"
53 + ffi:
54 + dependency: transitive
55 + description:
56 + name: ffi
57 + url: "https://pub.dartlang.org"
58 + source: hosted
59 + version: "0.1.3"
60 + file:
61 + dependency: transitive
62 + description:
63 + name: file
64 + url: "https://pub.dartlang.org"
65 + source: hosted
66 + version: "5.2.1"
53 flutter: 67 flutter:
54 dependency: "direct main" 68 dependency: "direct main"
55 description: flutter 69 description: flutter
...@@ -88,8 +102,13 @@ packages: ...@@ -88,8 +102,13 @@ packages:
88 description: flutter 102 description: flutter
89 source: sdk 103 source: sdk
90 version: "0.0.0" 104 version: "0.0.0"
91 - intl: 105 + flutter_web_plugins:
92 dependency: transitive 106 dependency: transitive
107 + description: flutter
108 + source: sdk
109 + version: "0.0.0"
110 + intl:
111 + dependency: "direct main"
93 description: 112 description:
94 name: intl 113 name: intl
95 url: "https://pub.dartlang.org" 114 url: "https://pub.dartlang.org"
...@@ -144,6 +163,27 @@ packages: ...@@ -144,6 +163,27 @@ packages:
144 url: "https://pub.dartlang.org" 163 url: "https://pub.dartlang.org"
145 source: hosted 164 source: hosted
146 version: "1.8.0-nullsafety.1" 165 version: "1.8.0-nullsafety.1"
166 + path_provider_linux:
167 + dependency: transitive
168 + description:
169 + name: path_provider_linux
170 + url: "https://pub.dartlang.org"
171 + source: hosted
172 + version: "0.0.1+2"
173 + path_provider_platform_interface:
174 + dependency: transitive
175 + description:
176 + name: path_provider_platform_interface
177 + url: "https://pub.dartlang.org"
178 + source: hosted
179 + version: "1.0.4"
180 + path_provider_windows:
181 + dependency: transitive
182 + description:
183 + name: path_provider_windows
184 + url: "https://pub.dartlang.org"
185 + source: hosted
186 + version: "0.0.4+3"
147 pedantic: 187 pedantic:
148 dependency: transitive 188 dependency: transitive
149 description: 189 description:
...@@ -165,6 +205,13 @@ packages: ...@@ -165,6 +205,13 @@ packages:
165 url: "https://pub.dartlang.org" 205 url: "https://pub.dartlang.org"
166 source: hosted 206 source: hosted
167 version: "1.0.3" 207 version: "1.0.3"
208 + process:
209 + dependency: transitive
210 + description:
211 + name: process
212 + url: "https://pub.dartlang.org"
213 + source: hosted
214 + version: "3.0.13"
168 rxdart: 215 rxdart:
169 dependency: "direct main" 216 dependency: "direct main"
170 description: 217 description:
...@@ -172,6 +219,48 @@ packages: ...@@ -172,6 +219,48 @@ packages:
172 url: "https://pub.dartlang.org" 219 url: "https://pub.dartlang.org"
173 source: hosted 220 source: hosted
174 version: "0.23.1" 221 version: "0.23.1"
222 + shared_preferences:
223 + dependency: "direct main"
224 + description:
225 + name: shared_preferences
226 + url: "https://pub.dartlang.org"
227 + source: hosted
228 + version: "0.5.12+4"
229 + shared_preferences_linux:
230 + dependency: transitive
231 + description:
232 + name: shared_preferences_linux
233 + url: "https://pub.dartlang.org"
234 + source: hosted
235 + version: "0.0.2+4"
236 + shared_preferences_macos:
237 + dependency: transitive
238 + description:
239 + name: shared_preferences_macos
240 + url: "https://pub.dartlang.org"
241 + source: hosted
242 + version: "0.0.1+11"
243 + shared_preferences_platform_interface:
244 + dependency: transitive
245 + description:
246 + name: shared_preferences_platform_interface
247 + url: "https://pub.dartlang.org"
248 + source: hosted
249 + version: "1.0.4"
250 + shared_preferences_web:
251 + dependency: transitive
252 + description:
253 + name: shared_preferences_web
254 + url: "https://pub.dartlang.org"
255 + source: hosted
256 + version: "0.1.2+7"
257 + shared_preferences_windows:
258 + dependency: transitive
259 + description:
260 + name: shared_preferences_windows
261 + url: "https://pub.dartlang.org"
262 + source: hosted
263 + version: "0.0.2+3"
175 sky_engine: 264 sky_engine:
176 dependency: transitive 265 dependency: transitive
177 description: flutter 266 description: flutter
...@@ -240,6 +329,20 @@ packages: ...@@ -240,6 +329,20 @@ packages:
240 url: "https://pub.dartlang.org" 329 url: "https://pub.dartlang.org"
241 source: hosted 330 source: hosted
242 version: "2.1.0-nullsafety.3" 331 version: "2.1.0-nullsafety.3"
332 + win32:
333 + dependency: transitive
334 + description:
335 + name: win32
336 + url: "https://pub.dartlang.org"
337 + source: hosted
338 + version: "1.7.4+1"
339 + xdg_directories:
340 + dependency: transitive
341 + description:
342 + name: xdg_directories
343 + url: "https://pub.dartlang.org"
344 + source: hosted
345 + version: "0.1.2"
243 sdks: 346 sdks:
244 dart: ">=2.10.0-110 <2.11.0" 347 dart: ">=2.10.0-110 <2.11.0"
245 - flutter: ">=1.12.13+hotfix.5" 348 + flutter: ">=1.12.13+hotfix.5 <2.0.0"
......
...@@ -31,6 +31,8 @@ dependencies: ...@@ -31,6 +31,8 @@ dependencies:
31 rxdart: ^0.23.1 31 rxdart: ^0.23.1
32 flutter_datetime_picker: ^1.3.4 32 flutter_datetime_picker: ^1.3.4
33 timezone: ^0.6.0 33 timezone: ^0.6.0
34 + intl : ^0.16.1
35 + shared_preferences: ^0.5.6+1
34 36
35 dev_dependencies: 37 dev_dependencies:
36 flutter_test: 38 flutter_test:
......