Skip to content

Commit

Permalink
Refatoração.
Browse files Browse the repository at this point in the history
  • Loading branch information
GamaGustavo committed Feb 4, 2022
1 parent 37c16d0 commit 78d3237
Show file tree
Hide file tree
Showing 6 changed files with 221 additions and 129 deletions.
37 changes: 3 additions & 34 deletions lib/database/app_database.dart
Original file line number Diff line number Diff line change
@@ -1,49 +1,18 @@
import 'package:byte_banck/models/contact.dart';
import 'package:byte_banck/database/dao/contact_dao.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

Future<Database> createDatabase() {
Future<Database> getDatabase() {
return getDatabasesPath().then((dbPath) {
final String path = join(dbPath, 'bytebanck.db');
return openDatabase(
path,
onCreate: (database, version) {
database.execute('CREATE TABLE contacts( '
'id INTEGER PRIMARY KEY, '
'full_name TEXT, '
'account_number INTEGER)');
database.execute(ContactDao.tableSql);
},
version: 1,
onDowngrade: onDatabaseDowngradeDelete,
);
});
}

Future<int> save(Contact contact) {
return createDatabase().then((database) {
Map<String, dynamic> contactMap = {};
contactMap['full_name'] = contact.fullName;
contactMap['account_number'] = contact.accountNumber;
return database.insert('contacts', contactMap);
});
}

Future<List<Contact>> findAll() {
return createDatabase().then((database) {
return database.query('contacts').then((maps) {
{
List<Contact> contacts = [];
for (Map<String, dynamic> map in maps) {
contacts.add(
Contact(
map['id'],
map['full_name'],
map['account_number'],
),
);
}
return contacts;
}
});
});
}
48 changes: 48 additions & 0 deletions lib/database/dao/contact_dao.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import 'package:byte_banck/models/contact.dart';

import '../app_database.dart';
import 'package:sqflite_common/sqlite_api.dart';

class ContactDao {
static const String _tableName = 'contacts';
static const String _id = 'id';
static const String _fullName = 'full_name';
static const String _accountNumber = 'account_number';

static const String tableSql = 'CREATE TABLE $_tableName( '
'$_id INTEGER PRIMARY KEY, '
'$_fullName TEXT, '
'$_accountNumber INTEGER)';

Future<int> save(Contact contact) async {
final Database database = await getDatabase();
return database.insert(_tableName, _toMap(contact));
}

Future<List<Contact>> findAll() async {
final Database database = await getDatabase();
return _toList(await database.query(_tableName));
}

Map<String, dynamic> _toMap(Contact contact) {
Map<String, dynamic> contactMap = {
_fullName: contact.fullName,
_accountNumber: contact.accountNumber,
};
return contactMap;
}

List<Contact> _toList(List<Map<String, Object?>> maps) {
List<Contact> contacts = [];
for (Map<String, dynamic> map in maps) {
contacts.add(
Contact(
id: map[_id],
fullName: map[_fullName],
accountNumber: map[_accountNumber],
),
);
}
return contacts;
}
}
10 changes: 5 additions & 5 deletions lib/models/contact.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
class Contact {
final int id;
final int? id;
final String fullName;
final int accountNumber;

Contact(
Contact({
this.id,
this.fullName,
this.accountNumber,
);
required this.fullName,
required this.accountNumber,
});

@override
String toString() {
Expand Down
128 changes: 90 additions & 38 deletions lib/screans/contact_form.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:byte_banck/database/app_database.dart';
import 'package:byte_banck/database/dao/contact_dao.dart';
import 'package:flutter/material.dart';

import '../models/contact.dart';
Expand All @@ -13,11 +13,13 @@ class ContactForm extends StatefulWidget {
class _ContactFormState extends State<ContactForm> {
final TextEditingController _fullName = TextEditingController();

final TextEditingController _acountNumber = TextEditingController();
final TextEditingController _accountNumber = TextEditingController();

final ContactDao _contactDao = ContactDao();

@override
void initState() {
super.initState();
super.initState();
}

@override
Expand All @@ -30,47 +32,97 @@ class _ContactFormState extends State<ContactForm> {
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _fullName,
decoration: const InputDecoration(
labelText: 'Full name',
),
style: const TextStyle(fontSize: 24.0),
),
_TextField(
controller: _fullName,
labelText: 'Full name',
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
keyboardType: TextInputType.number,
controller: _acountNumber,
decoration: const InputDecoration(
labelText: 'Acount number',
),
style: const TextStyle(fontSize: 24.0),
),
_TextField(
controller: _accountNumber,
labelText: 'Acount number',
keyboardType: TextInputType.number,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20),
fixedSize: const Size.fromWidth(
double.maxFinite,
),
primary: Theme.of(context).colorScheme.secondary),
onPressed: () {
final String fullName = _fullName.text;
final int acountNumbe = int.parse(_acountNumber.text);
save(Contact(0,fullName,acountNumbe)).then((id) => Navigator.pop(context));
},
child: const Text('Create'),
),
_Button(
contactDao: _contactDao,
accountNumberController: _accountNumber,
fullNameController: _fullName,
)
],
),
),
);
}
}

class _Button extends StatelessWidget {
const _Button(
{Key? key,
required this.fullNameController,
required this.accountNumberController,
required this.contactDao})
: super(key: key);
final TextEditingController fullNameController;

final TextEditingController accountNumberController;

final ContactDao contactDao;

final String _textButton = 'Create';

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20),
fixedSize: const Size.fromWidth(
double.maxFinite,
),
primary: Theme.of(context).colorScheme.secondary),
onPressed: () => createContact(context),
child: Text(_textButton),
),
);
}

void createContact(BuildContext context) {
final String fullName = fullNameController.text;
final int accountNumbe = int.parse(accountNumberController.text);
contactDao
.save(Contact(
fullName: fullName,
accountNumber: accountNumbe,
))
.then((id) => Navigator.pop(context));
}
}

class _TextField extends StatelessWidget {
const _TextField({
Key? key,
required this.controller,
this.keyboardType,
this.labelText,
this.fontSize = 24.0,
}) : super(key: key);
final TextEditingController controller;
final String? labelText;
final double fontSize;

final TextInputType? keyboardType;

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: controller,
decoration: InputDecoration(
labelText: labelText,
),
keyboardType: keyboardType,
style: TextStyle(fontSize: fontSize),
),
);
}
}
57 changes: 35 additions & 22 deletions lib/screans/contact_list.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:byte_banck/database/app_database.dart';
import 'package:byte_banck/database/dao/contact_dao.dart';
import 'package:byte_banck/models/contact.dart';
import 'package:flutter/material.dart';

Expand All @@ -12,32 +12,23 @@ class ContactsList extends StatefulWidget {
}

class _ContactsListState extends State<ContactsList> {
final ContactDao _contactDao = ContactDao();

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Contacts"),
),
body: FutureBuilder<List<Contact>>(
future: findAll(),
future: _contactDao.findAll(),
initialData: const [],
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
break;
case ConnectionState.waiting:
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
color: Theme.of(context).colorScheme.secondary,
),
const Text('Loading'),
],
),
);
return const _LoadItens();
case ConnectionState.active:
break;
case ConnectionState.done:
Expand All @@ -55,14 +46,36 @@ class _ContactsListState extends State<ContactsList> {
},
),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const ContactForm(),
),
).then((value) => setState((){}));
}
child: const Icon(Icons.add),
onPressed: () {
Navigator.of(context)
.push(
MaterialPageRoute(
builder: (context) => const ContactForm(),
),
)
.then((value) => setState(() {}));
}),
);
}
}

class _LoadItens extends StatelessWidget {
const _LoadItens({Key? key}) : super(key: key);
final String loadMessage = 'Loading';

@override
Widget build(BuildContext context) {
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
color: Theme.of(context).colorScheme.secondary,
),
Text(loadMessage),
],
),
);
}
Expand Down
Loading

0 comments on commit 78d3237

Please sign in to comment.