Skip to content

Commit 4bdb4aa

Browse files
authored
Merge pull request #1 from PeterCcT/Layout
Layout
2 parents 6ea165e + 80e2b6b commit 4bdb4aa

File tree

4 files changed

+143
-117
lines changed

4 files changed

+143
-117
lines changed

lib/main.dart

Lines changed: 106 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,111 +1,130 @@
11
import 'package:flutter/material.dart';
2+
import 'package:path_provider/path_provider.dart';
3+
import 'dart:convert';
4+
import 'dart:io';
5+
import 'dart:async';
26

3-
void main() => runApp(MyApp());
7+
void main() {
8+
runApp(
9+
MaterialApp(
10+
title: "Todo List",
11+
home: Home(),
12+
),
13+
);
14+
}
415

5-
class MyApp extends StatelessWidget {
6-
// This widget is the root of your application.
16+
class Home extends StatefulWidget {
717
@override
8-
Widget build(BuildContext context) {
9-
return MaterialApp(
10-
title: 'Flutter Demo',
11-
theme: ThemeData(
12-
// This is the theme of your application.
13-
//
14-
// Try running your application with "flutter run". You'll see the
15-
// application has a blue toolbar. Then, without quitting the app, try
16-
// changing the primarySwatch below to Colors.green and then invoke
17-
// "hot reload" (press "r" in the console where you ran "flutter run",
18-
// or simply save your changes to "hot reload" in a Flutter IDE).
19-
// Notice that the counter didn't reset back to zero; the application
20-
// is not restarted.
21-
primarySwatch: Colors.blue,
22-
),
23-
home: MyHomePage(title: 'Flutter Demo Home Page'),
24-
);
25-
}
18+
_HomeState createState() => _HomeState();
2619
}
2720

28-
class MyHomePage extends StatefulWidget {
29-
MyHomePage({Key key, this.title}) : super(key: key);
30-
31-
// This widget is the home page of your application. It is stateful, meaning
32-
// that it has a State object (defined below) that contains fields that affect
33-
// how it looks.
34-
35-
// This class is the configuration for the state. It holds the values (in this
36-
// case the title) provided by the parent (in this case the App widget) and
37-
// used by the build method of the State. Fields in a Widget subclass are
38-
// always marked "final".
21+
class _HomeState extends State<Home> {
22+
List<Map> _todoList = [];
23+
@override
24+
Widget build(BuildContext context) {
25+
final _tarefaController = TextEditingController();
3926

40-
final String title;
27+
void _addTarefa() {
28+
setState(() {
29+
Map<String, dynamic> novaTarefa = Map();
30+
novaTarefa["tittle"] = _tarefaController.text;
31+
novaTarefa["estado"] = false;
32+
_todoList.add(novaTarefa);
33+
});
34+
}
4135

42-
@override
43-
_MyHomePageState createState() => _MyHomePageState();
44-
}
36+
Future<File> _getArquivo() async {
37+
final diretorio = await getApplicationDocumentsDirectory();
38+
return File("${diretorio.path}/tarefas.json");
39+
}
4540

46-
class _MyHomePageState extends State<MyHomePage> {
47-
int _counter = 0;
41+
Future<File> _saveTarefas() async {
42+
String dado = json.encode(_todoList);
43+
final arquivo = await _getArquivo();
44+
return arquivo.writeAsString(dado);
45+
}
4846

49-
void _incrementCounter() {
50-
setState(() {
51-
// This call to setState tells the Flutter framework that something has
52-
// changed in this State, which causes it to rerun the build method below
53-
// so that the display can reflect the updated values. If we changed
54-
// _counter without calling setState(), then the build method would not be
55-
// called again, and so nothing would appear to happen.
56-
_counter++;
57-
});
58-
}
47+
Future<String> _getDados() async {
48+
try {
49+
final arquivo = await _getArquivo();
50+
return arquivo.readAsString();
51+
} catch (error) {
52+
return null;
53+
}
54+
}
5955

60-
@override
61-
Widget build(BuildContext context) {
62-
// This method is rerun every time setState is called, for instance as done
63-
// by the _incrementCounter method above.
64-
//
65-
// The Flutter framework has been optimized to make rerunning build methods
66-
// fast, so that you can just rebuild anything that needs updating rather
67-
// than having to individually change instances of widgets.
6856
return Scaffold(
6957
appBar: AppBar(
70-
// Here we take the value from the MyHomePage object that was created by
71-
// the App.build method, and use it to set our appbar title.
72-
title: Text(widget.title),
58+
centerTitle: true,
59+
backgroundColor: Colors.indigo,
60+
title: Text(
61+
"Lista de tarefas",
62+
style: TextStyle(
63+
color: Colors.white,
64+
fontSize: 20,
65+
),
66+
),
7367
),
74-
body: Center(
75-
// Center is a layout widget. It takes a single child and positions it
76-
// in the middle of the parent.
68+
body: SingleChildScrollView(
7769
child: Column(
78-
// Column is also a layout widget. It takes a list of children and
79-
// arranges them vertically. By default, it sizes itself to fit its
80-
// children horizontally, and tries to be as tall as its parent.
81-
//
82-
// Invoke "debug painting" (press "p" in the console, choose the
83-
// "Toggle Debug Paint" action from the Flutter Inspector in Android
84-
// Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
85-
// to see the wireframe for each widget.
86-
//
87-
// Column has various properties to control how it sizes itself and
88-
// how it positions its children. Here we use mainAxisAlignment to
89-
// center the children vertically; the main axis here is the vertical
90-
// axis because Columns are vertical (the cross axis would be
91-
// horizontal).
92-
mainAxisAlignment: MainAxisAlignment.center,
9370
children: <Widget>[
94-
Text(
95-
'You have pushed the button this many times:',
71+
Container(
72+
padding: EdgeInsets.symmetric(vertical: 3, horizontal: 15),
73+
child: Row(
74+
children: <Widget>[
75+
Expanded(
76+
child: TextField(
77+
controller: _tarefaController,
78+
style:
79+
TextStyle(fontWeight: FontWeight.w500, fontSize: 14),
80+
decoration: InputDecoration(
81+
focusedBorder: UnderlineInputBorder(
82+
borderSide: BorderSide(
83+
color: Colors.indigo,
84+
width: 1.4,
85+
),
86+
),
87+
hintText: "Digite sua tarefa",
88+
hintStyle: TextStyle(
89+
fontSize: 15,
90+
fontStyle: FontStyle.italic,
91+
),
92+
),
93+
),
94+
),
95+
IconButton(
96+
icon: Icon(Icons.add),
97+
onPressed: _addTarefa,
98+
iconSize: 40,
99+
splashColor: Colors.lightGreenAccent,
100+
),
101+
],
102+
),
96103
),
97-
Text(
98-
'$_counter',
99-
style: Theme.of(context).textTheme.display1,
104+
ListView.builder(
105+
shrinkWrap: true,
106+
physics: ScrollPhysics(),
107+
padding: EdgeInsets.only(top: 20.0),
108+
itemCount: _todoList.length,
109+
itemBuilder: (context, index) {
110+
return CheckboxListTile(
111+
title: Text(_todoList[index]["tittle"]),
112+
value: _todoList[index]["estado"],
113+
secondary: CircleAvatar(
114+
child: Icon(
115+
_todoList[index]["estado"] ? Icons.check : Icons.error),
116+
),
117+
onChanged: (ok) {
118+
setState(() {
119+
_todoList[index]["estado"] = ok;
120+
});
121+
},
122+
);
123+
},
100124
),
101125
],
102126
),
103127
),
104-
floatingActionButton: FloatingActionButton(
105-
onPressed: _incrementCounter,
106-
tooltip: 'Increment',
107-
child: Icon(Icons.add),
108-
), // This trailing comma makes auto-formatting nicer for build methods.
109128
);
110129
}
111130
}

pubspec.lock

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,27 @@ packages:
102102
url: "https://pub.dartlang.org"
103103
source: hosted
104104
version: "1.6.4"
105+
path_provider:
106+
dependency: "direct main"
107+
description:
108+
name: path_provider
109+
url: "https://pub.dartlang.org"
110+
source: hosted
111+
version: "1.6.5"
112+
path_provider_macos:
113+
dependency: transitive
114+
description:
115+
name: path_provider_macos
116+
url: "https://pub.dartlang.org"
117+
source: hosted
118+
version: "0.0.4"
119+
path_provider_platform_interface:
120+
dependency: transitive
121+
description:
122+
name: path_provider_platform_interface
123+
url: "https://pub.dartlang.org"
124+
source: hosted
125+
version: "1.0.1"
105126
pedantic:
106127
dependency: transitive
107128
description:
@@ -116,6 +137,20 @@ packages:
116137
url: "https://pub.dartlang.org"
117138
source: hosted
118139
version: "2.4.0"
140+
platform:
141+
dependency: transitive
142+
description:
143+
name: platform
144+
url: "https://pub.dartlang.org"
145+
source: hosted
146+
version: "2.2.1"
147+
plugin_platform_interface:
148+
dependency: transitive
149+
description:
150+
name: plugin_platform_interface
151+
url: "https://pub.dartlang.org"
152+
source: hosted
153+
version: "1.0.2"
119154
quiver:
120155
dependency: transitive
121156
description:
@@ -193,3 +228,4 @@ packages:
193228
version: "3.5.0"
194229
sdks:
195230
dart: ">=2.4.0 <3.0.0"
231+
flutter: ">=1.10.0 <2.0.0"

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dependencies:
2323
# The following adds the Cupertino Icons font to your application.
2424
# Use with the CupertinoIcons class for iOS style icons.
2525
cupertino_icons: ^0.1.2
26+
path_provider: ^1.6.5
2627

2728
dev_dependencies:
2829
flutter_test:

test/widget_test.dart

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)