From 07000c1709fd44b69d43227aa5549d14a0e7d91d Mon Sep 17 00:00:00 2001 From: anthonycicc Date: Sat, 19 May 2018 14:51:19 -0400 Subject: [PATCH] Added better Entry handling, also added Entry.id --- lib/Entry.dart | 9 ++-- lib/FileLoader.dart | 6 +++ lib/NoZeroDays.dart | 113 ++++++++++++++++++++++++++------------------ pubspec.lock | 4 +- 4 files changed, 81 insertions(+), 51 deletions(-) diff --git a/lib/Entry.dart b/lib/Entry.dart index 14602f4..bf63027 100644 --- a/lib/Entry.dart +++ b/lib/Entry.dart @@ -1,17 +1,20 @@ import 'package:intl/intl.dart'; class Entry { + final int id; final DateTime date; final String whatYouDid; - Entry(this.date, this.whatYouDid); + Entry(this.id, this.date, this.whatYouDid); Entry.fromJson(Map json) - : date = DateTime.parse(json['date']), - whatYouDid = json['whatyoudid']; + : id = json['id'], + date = DateTime.parse(json['date']), + whatYouDid = json['whatyoudid']; Map toJson() => { + 'id': id, 'date': date.toString(), 'whatyoudid': whatYouDid, }; diff --git a/lib/FileLoader.dart b/lib/FileLoader.dart index c09ba7f..1db19db 100644 --- a/lib/FileLoader.dart +++ b/lib/FileLoader.dart @@ -15,6 +15,12 @@ class FileLoader { return new File('$path/days.json'); } + Future checkForFile() async { + final file = await _localFile; + + return file.exists(); + } + Future writeFile(String data) async { final file = await _localFile; diff --git a/lib/NoZeroDays.dart b/lib/NoZeroDays.dart index 9b38f84..cfaa4a6 100644 --- a/lib/NoZeroDays.dart +++ b/lib/NoZeroDays.dart @@ -25,49 +25,32 @@ class NoZeroDays extends StatefulWidget { class _NoZeroDaysState extends State { static List _firstEntry = [ - Entry(new DateTime.now(), "Made this!") + Entry(0, new DateTime.now(), "Made this!") ]; + FileLoader f = new FileLoader(); + List _zerodayslist = new List.from(_firstEntry); - Future _currentDatePicker() { - int currentYear = new DateTime.now().year; - return showDatePicker( - context: (context), - initialDate: new DateTime.now(), - firstDate: new DateTime(currentYear), - lastDate: new DateTime(currentYear + 1)); + void _newEntry(DateTime date, String whatyoudid){ + int highestID = 0; + for (var i = 0; i < _zerodayslist.length; ++i) { + if (_zerodayslist[i].id > highestID){ + highestID = _zerodayslist[i].id; + } + } + + setState(() => _zerodayslist.add(new Entry(highestID + 1, date, whatyoudid))); + + _save(); } - Widget _buildFAB() { - return new FloatingActionButton( - onPressed: () { - Future pickedDate = _currentDatePicker(); - pickedDate.then((value) { - setState(() { - if (value != null) _zerodayslist.add(Entry(value, "nothing")); - }); - }).catchError((err) { - Scaffold - .of(context) - .showSnackBar(new SnackBar(content: new Text(err.toString()))); - }); - }, - tooltip: 'Make a new entry', - child: new Icon(Icons.add), - ); - } - - Widget _buildRow(Entry entry) { - return new ListTile( - title: new Text(entry.toString()), - onTap: () { - _editEntry(entry); - }, - trailing: new Icon(Icons.edit), - ); + void _removeEntry(Entry entry) { + _zerodayslist.removeWhere((testEntry) => testEntry.id == entry.id); + _save(); } void _editEntry(Entry entry) { + _removeEntry(entry); Navigator.of(context).push(new MaterialPageRoute(builder: (context) { final t = new Form( child: new Column( @@ -83,9 +66,7 @@ class _NoZeroDaysState extends State { newDate.then((newValue) { if (newValue != null) { setState(() { - _zerodayslist.remove(entry); - _zerodayslist - .add(new Entry(newValue, entry.whatYouDid)); + _newEntry(newValue, entry.whatYouDid); }); } Navigator.pop(context); @@ -98,8 +79,7 @@ class _NoZeroDaysState extends State { initialValue: entry.whatYouDid, onFieldSubmitted: (newValue) { setState(() { - _zerodayslist.remove(entry); - _zerodayslist.add(new Entry(entry.date, newValue)); + _newEntry(entry.date, newValue); }); Navigator.pop(context); }, @@ -122,18 +102,50 @@ class _NoZeroDaysState extends State { })); } + Future _currentDatePicker() { + int currentYear = new DateTime.now().year; + return showDatePicker( + context: (context), + initialDate: new DateTime.now(), + firstDate: new DateTime(currentYear), + lastDate: new DateTime(currentYear + 1)); + } + + Widget _buildFAB() { + return new FloatingActionButton( + onPressed: () { + Future pickedDate = _currentDatePicker(); + pickedDate.then((value) { + setState(() { + if (value != null) _newEntry(value, "nothing"); + }); + }).catchError((err) { + Scaffold + .of(context) + .showSnackBar(new SnackBar(content: new Text(err.toString()))); + }); + }, + tooltip: 'Make a new entry', + child: new Icon(Icons.add), + ); + } + + Widget _buildRow(Entry entry) { + return new ListTile( + title: new Text(entry.toString()), + onTap: () { + _editEntry(entry); + }, + trailing: new Icon(Icons.edit), + ); + } + void _save() { - FileLoader f = new FileLoader(); - f.writeFile(json.encode(_zerodayslist)); - } void _load() { - FileLoader f = new FileLoader(); - f.readFile().then((s) { - print(s); setState(() { List newList = []; List tempList = json.decode(s); @@ -164,6 +176,15 @@ class _NoZeroDaysState extends State { ), body: new Scaffold(body: new ListView.builder( itemBuilder: (context, entry) { + f.checkForFile().then((value) { + if (value) { + _load(); + } + else { + f.writeFile(""); + } + }); + if (entry < _zerodayslist.length) { return _buildRow(_zerodayslist[entry]); } else diff --git a/pubspec.lock b/pubspec.lock index a786504..634ba71 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -63,7 +63,7 @@ packages: name: csslib url: "https://pub.dartlang.org" source: hosted - version: "0.14.3" + version: "0.14.4" cupertino_icons: dependency: "direct main" description: @@ -381,5 +381,5 @@ packages: source: hosted version: "2.1.13" sdks: - dart: ">=2.0.0-dev.52.0 <=2.0.0-edge.af1436931b93e755d38223c487d33a0a1f5eadf5" + dart: ">=2.0.0-dev.52.0 <=2.0.0-dev.54.0.flutter-46ab040e58" flutter: ">=0.1.4 <2.0.0"