Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:async';
- import 'package:flutter/widgets.dart';
- import 'package:path/path.dart';
- import 'package:sqflite/sqflite.dart';
- void main() async {
- WidgetsFlutterBinding.ensureInitialized();
- // Abre o banco, a partir de agora vamos utilizar o banco por esta variável.
- final Future<Database> database = openDatabase(
- // Configura o caminho para o banco de dados. OBS: usar a função "join" da
- // biblioteca "path" é a melhor prática para garantir que o caminho estará
- // correto, independte do SO.
- join(await getDatabasesPath(), 'doggie_database.db'),
- // Quando o banco de dados for criado pela primeira vez, será criada a
- // tabela "dogs".
- onCreate: (db, version) {
- return db.execute(
- "CREATE TABLE dogs(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
- );
- },
- // Indica a versão da base de dados utilizada. Como aqui a versão está em 1,
- // será executada a função onCreate anterior.
- version: 1,
- );
- Future<void> insertDog(Dog dog) async {
- // Obtém a referência ao banco de dados atual, salvando-a na variável db.
- final Database db = await database;
- // Insere no banco o objeto "dog" passado como parâmetro para.
- // Caso o mesmo cachorro (mesmo identificador) seja inserido mais de uma
- // vez no banco, "ConflictAlgorithm.replace" indica que o dado novo vai
- // substituir o anterior no banco.
- await db.insert(
- 'dogs',
- dog.toMap(),
- conflictAlgorithm: ConflictAlgorithm.replace,
- );
- }
- Future<List<Dog>> dogs() async {
- // Obtém a referência ao banco de dados conectado, salvando-a na variável db.
- final Database db = await database;
- // Executa uma consulta no banco que obtém todos os cachorros cadastrados.
- final List<Map<String, dynamic>> maps = await db.query('dogs');
- // Converte o resultado acima em uma lista de objetos da classe Dog.
- return List.generate(maps.length, (i) {
- return Dog(
- id: maps[i]['id'],
- name: maps[i]['name'],
- age: maps[i]['age'],
- );
- });
- }
- Future<void> updateDog(Dog dog) async {
- // Obtém a referência ao banco de dados conectado, salvando-a na variável db.
- final db = await database;
- // Atualiza no banco os dados do cachorro passado como parâmetro.
- await db.update(
- 'dogs',
- dog.toMap(),
- // Cláusula where para garantir que o dado atualizado é do registro correto.
- where: "id = ?",
- // Passa o id do registro a ser atualizado em whereArg para evitar SQL injection.
- whereArgs: [dog.id],
- );
- }
- Future<void> deleteDog(int id) async {
- // Obtém a referência ao banco de dados conectado, salvando-a na variável db.
- final db = await database;
- // Remove do banco o cachorro de id igual ao informado em parâmetro.
- await db.delete(
- 'dogs',
- // Cláusula where para garantir que o dado removido é do registro correto.
- where: "id = ?",
- // Passa o id do registro a ser removido em whereArg para evitar SQL injection.
- whereArgs: [id],
- );
- }
- // Cria um objeto de teste.
- var fido = Dog(
- id: 0,
- name: 'Fido',
- age: 35,
- );
- // Solicita a inserção do objeto fido no banco.
- await insertDog(fido);
- // Solicita a impressão de todos os cachorros cadastrados no banco (somente fido).
- print(await dogs());
- // Atualiza o atributo idade do objeto Fido e solicita atualização no banco.
- fido = Dog(
- id: fido.id,
- name: fido.name,
- age: fido.age + 7,
- );
- await updateDog(fido);
- // Imprime os dados atuais do objeto Fido.
- print(await dogs());
- // Deleta o registro do objeto Fido do banco.
- await deleteDog(fido.id);
- // Solicita a impressão de todos os cachorros cadastrados no banco (nenhum).
- print(await dogs());
- }
- class Dog {
- final int id;
- final String name;
- final int age;
- Dog({this.id, this.name, this.age});
- Map<String, dynamic> toMap() {
- return {
- 'id': id,
- 'name': name,
- 'age': age,
- };
- }
- // Implementa o método toString na classe para facilitar a impressão dos
- // atributos de um objeto desta classe.
- @override
- String toString() {
- return 'Dog{id: $id, name: $name, age: $age}';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement