snail 1.0.2
snail: ^1.0.2 copied to clipboard
A library inspired by Spring Boot's JPA that facilitates SQLite database management in Flutter/Dart applications.
🐌 Snail: A Simple ORM-like Library for Flutter/Dart 🐦 #
Snail é uma biblioteca inspirada no JPA do Spring Boot que facilita o gerenciamento de banco de dados SQLite em aplicações Flutter/Dart. Rápido de usar e simples como uma lesma 🐌 (mas funcional como um foguete 🚀)!
🌟 Recursos #
- 📦 Criação automática de tabelas no SQLite com base em repositórios.
- 🔄 Métodos CRUD prontos: create, read, update, delete.
- 🛠️ Manipulação de múltiplos registros com
createMany,findMany, etc. - 💡 Abstração com
SnailRepositorye mapeamento simples de entidades.
🚀 Instalação #
Adicione o Snail ao seu projeto no pubspec.yaml:
dependencies:
snail: ^1.0.2
Instale com:
flutter pub get
🛠️ Configuração Inicial #
1⃣ Defina seu Modelo #
Crie uma classe representando a entidade:
class UserModel {
final int id;
final String name;
final String email;
UserModel({required this.id, required this.name, required this.email});
Map<String, dynamic> toMap() => {
'id': id,
'name': name,
'email': email,
};
factory UserModel.fromMap(Map<String, dynamic> map) => UserModel(
id: map['id'],
name: map['name'],
email: map['email'],
);
}
2⃣ Crie o Repositório #
Extenda o SnailRepository para definir o repositório de dados:
import 'package:snail/snail.dart';
import '../models/user_model.dart';
class UserRepository extends SnailRepository<UserModel, int> {
UserRepository()
: super(
tableName: 'users',
primaryKeyColumn: 'id',
defineFields: {
'id': int,
'name': String,
'email': String,
},
);
@override
Map<String, dynamic> toMap(UserModel entity) => entity.toMap();
@override
UserModel fromMap(Map<String, dynamic> map) => UserModel.fromMap(map);
}
3⃣ Inicialize o Banco de Dados #
Configure os repositórios no main():
import 'package:flutter/material.dart';
import 'package:snail/snail.dart';
import './repositories/user_repository.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Snail.initialize(
repositories: [
UserRepository(),
],
);
runApp(AppWidget());
}
🎉 Exemplo de Uso #
📌 Criar um Novo Registro #
final userRepo = UserRepository();
await userRepo.create(UserModel(id: 1, name: 'John Doe', email: '[email protected]'));
🔍 Buscar um Registro por ID #
final user = await userRepo.findOne(1);
if (user != null) {
print('User found: ${user.name}');
}
📋 Buscar Todos os Registros #
final users = await userRepo.findMany();
users.forEach((user) => print(user.name));
🛠️ Atualizar um Registro #
final updatedUser = UserModel(id: 1, name: 'Jane Doe', email: '[email protected]');
await userRepo.update(updatedUser);
🗑️ Deletar um Registro #
await userRepo.delete(1);
🚀 Criar Vários Registros #
await userRepo.createMany([
UserModel(id: 2, name: 'Alice', email: '[email protected]'),
UserModel(id: 3, name: 'Bob', email: '[email protected]'),
]);
🧪 API Completa #
Métodos CRUD: #
| Método | Descrição |
|---|---|
create(T entity) |
Cria um novo registro. |
createMany(List<T>) |
Cria múltiplos registros. |
findOne(ID id) |
Busca um registro por ID. |
findMany() |
Busca todos os registros. |
update(T entity) |
Atualiza um registro. |
updateMany(List<T>) |
Atualiza múltiplos registros. |
delete(ID id) |
Deleta um registro pelo ID. |
deleteMany(List<ID>) |
Deleta múltiplos registros. |
🧬 Testando #
Exemplo básico de teste unitário:
void main() async {
final repo = UserRepository();
await repo.create(UserModel(id: 1, name: 'Test User', email: '[email protected]'));
final user = await repo.findOne(1);
assert(user?.name == 'Test User');
print('Test passed 🎉');
}
💛 Contribuindo #
Contribuições são super bem-vindas! Abra uma issue ou envie um pull request no repositório do GitHub.
📜 Licença #
Este projeto está licenciado sob a licença MIT.
🚀 Pronto para usar? #
Dê um push na sua produtividade com Snail e torne suas operações no SQLite mais simples e rápidas! 🐌💨
Made with ❤️ for Flutter developers! 🎯