joaopaulofcc

Untitled

Oct 25th, 2020
1,115
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import 'dart:async';
  2.  
  3. import 'package:flutter/widgets.dart';
  4.  
  5. import 'package:path/path.dart';
  6. import 'package:sqflite/sqflite.dart';
  7.  
  8. void main() async {
  9.   WidgetsFlutterBinding.ensureInitialized();
  10.  
  11.   // Abre o banco, a partir de agora vamos utilizar o banco por esta variável.
  12.   final Future<Database> database = openDatabase(
  13.     // Configura o caminho para o banco de dados. OBS: usar a função "join" da
  14.     // biblioteca "path" é a melhor prática para garantir que o caminho estará
  15.     // correto, independte do SO.
  16.     join(await getDatabasesPath(), 'doggie_database.db'),
  17.     // Quando o banco de dados for criado pela primeira vez, será criada a
  18.     // tabela "dogs".
  19.     onCreate: (db, version) {
  20.       return db.execute(
  21.         "CREATE TABLE dogs(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)",
  22.       );
  23.     },
  24.     // Indica a versão da base de dados utilizada. Como aqui a versão está em 1,
  25.     // será executada a função onCreate anterior.
  26.     version: 1,
  27.   );
  28.  
  29.   Future<void> insertDog(Dog dog) async {
  30.     // Obtém a referência ao banco de dados atual, salvando-a na variável db.
  31.     final Database db = await database;
  32.  
  33.     // Insere no banco o objeto "dog" passado como parâmetro para.
  34.     // Caso o mesmo cachorro (mesmo identificador) seja inserido mais de uma
  35.     // vez no banco, "ConflictAlgorithm.replace" indica que o dado novo vai
  36.     // substituir o anterior no banco.
  37.     await db.insert(
  38.       'dogs',
  39.       dog.toMap(),
  40.       conflictAlgorithm: ConflictAlgorithm.replace,
  41.     );
  42.   }
  43.  
  44.   Future<List<Dog>> dogs() async {
  45.     // Obtém a referência ao banco de dados conectado, salvando-a na variável db.
  46.     final Database db = await database;
  47.  
  48.     // Executa uma consulta no banco que obtém todos os cachorros cadastrados.
  49.     final List<Map<String, dynamic>> maps = await db.query('dogs');
  50.  
  51.     // Converte o resultado acima em uma lista de objetos da classe Dog.
  52.     return List.generate(maps.length, (i) {
  53.       return Dog(
  54.         id: maps[i]['id'],
  55.         name: maps[i]['name'],
  56.         age: maps[i]['age'],
  57.       );
  58.     });
  59.   }
  60.  
  61.   Future<void> updateDog(Dog dog) async {
  62.     // Obtém a referência ao banco de dados conectado, salvando-a na variável db.
  63.     final db = await database;
  64.  
  65.     // Atualiza no banco os dados do cachorro passado como parâmetro.
  66.     await db.update(
  67.       'dogs',
  68.       dog.toMap(),
  69.       // Cláusula where para garantir que o dado atualizado é do registro correto.
  70.       where: "id = ?",
  71.       // Passa o id do registro a ser atualizado em whereArg para evitar SQL injection.
  72.       whereArgs: [dog.id],
  73.     );
  74.   }
  75.  
  76.   Future<void> deleteDog(int id) async {
  77.     // Obtém a referência ao banco de dados conectado, salvando-a na variável db.
  78.     final db = await database;
  79.  
  80.     // Remove do banco o cachorro de id igual ao informado em parâmetro.
  81.     await db.delete(
  82.       'dogs',
  83.       // Cláusula where para garantir que o dado removido é do registro correto.
  84.       where: "id = ?",
  85.       // Passa o id do registro a ser removido em whereArg para evitar SQL injection.
  86.       whereArgs: [id],
  87.     );
  88.   }
  89.  
  90.   // Cria um objeto de teste.
  91.   var fido = Dog(
  92.     id: 0,
  93.     name: 'Fido',
  94.     age: 35,
  95.   );
  96.  
  97.   // Solicita a inserção do objeto fido no banco.
  98.   await insertDog(fido);
  99.  
  100.   // Solicita a impressão de todos os cachorros cadastrados no banco (somente fido).
  101.   print(await dogs());
  102.  
  103.   // Atualiza o atributo idade do objeto Fido e solicita atualização no banco.
  104.   fido = Dog(
  105.     id: fido.id,
  106.     name: fido.name,
  107.     age: fido.age + 7,
  108.   );
  109.   await updateDog(fido);
  110.  
  111.   // Imprime os dados atuais do objeto Fido.
  112.   print(await dogs());
  113.  
  114.   // Deleta o registro do objeto Fido do banco.
  115.   await deleteDog(fido.id);
  116.  
  117.   // Solicita a impressão de todos os cachorros cadastrados no banco (nenhum).
  118.   print(await dogs());
  119. }
  120.  
  121. class Dog {
  122.   final int id;
  123.   final String name;
  124.   final int age;
  125.  
  126.   Dog({this.id, this.name, this.age});
  127.  
  128.   Map<String, dynamic> toMap() {
  129.     return {
  130.       'id': id,
  131.       'name': name,
  132.       'age': age,
  133.     };
  134.   }
  135.  
  136.   // Implementa o método toString na classe para facilitar a impressão dos
  137.   // atributos de um objeto desta classe.
  138.   @override
  139.   String toString() {
  140.     return 'Dog{id: $id, name: $name, age: $age}';
  141.   }
  142. }
  143.  
RAW Paste Data