Introdução
Neste tutorial, vamos construir uma aplicação de gerenciamento de tarefas em tempo real utilizando Dart e Flutter, integrando com o Firebase para autenticação e armazenamento de dados. A proposta é fornecer um guia completo, desde a configuração do ambiente de desenvolvimento até a implementação final do aplicativo, passando pela criação do banco de dados no Firebase e a autenticação de usuários. Vamos detalhar todos os passos necessários, incluindo exemplos de código prontos para serem copiados. O Flutter oferece uma maneira rápida de criar interfaces de usuário responsivas, enquanto o Firebase facilita a configuração de serviços em nuvem como autenticação e banco de dados em tempo real. Ao final deste tutorial, você terá um aplicativo funcional e poderá expandi-lo com suas próprias funcionalidades.
Etapas
Configuração do Ambiente de Desenvolvimento
Certifique-se de ter o Flutter SDK instalado em sua máquina. Verifique a instalação executando o comando `flutter doctor` no terminal. Caso não tenha o Flutter instalado, siga as instruções oficiais no site do Flutter.
commands# Verificar versão do Flutter e instalação
flutter doctorCriação do Projeto Flutter
Crie um novo projeto Flutter utilizando o comando abaixo. O nome do projeto será ‘gerenciador_tarefas’.
commandsflutter create gerenciador_tarefas
cd gerenciador_tarefasConfiguração do Firebase
Acesse o Firebase Console e crie um novo projeto. Siga as instruções para adicionar um aplicativo Flutter, fazendo o download do arquivo ‘google-services.json’ e colocando-o na pasta ‘android/app/’.
commands# Após o download do google-services.json, mova-o para o diretório correto.
mv ~/Downloads/google-services.json android/app/Instalação das Dependências do Firebase
Adicione as dependências do Firebase no arquivo ‘pubspec.yaml’ do seu projeto. Vamos usar os pacotes ‘firebase_core’ e ‘firebase_auth’.
pubspec.yamldependencies: flutter: sdk: flutter firebase_core: ^2.4.0 firebase_auth: ^3.3.0
Inicialização do Firebase
Modifique o arquivo ‘main.dart’ para inicializar o Firebase ao iniciar o aplicativo.
main.dartimport 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Gerenciador de Tarefas', home: HomePage(), ); } } class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Gerenciador de Tarefas')), body: Center(child: Text('Bem-vindo ao Gerenciador de Tarefas!')), ); } }
Criação da Tela de Autenticação
Implemente a tela de login que permitirá aos usuários se autenticarem utilizando o Firebase.
login_page.dartimport 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; class LoginPage extends StatefulWidget { @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State<LoginPage> { final TextEditingController emailController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); Future<void> login() async { try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: emailController.text, password: passwordController.text, ); } catch (e) { print(e); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Login')), body: Padding( padding: EdgeInsets.all(16.0), child: Column( children: <Widget>[ // Campos de email e senha TextField(controller: emailController, decoration: InputDecoration(labelText: 'Email')), TextField(controller: passwordController, decoration: InputDecoration(labelText: 'Senha'), obscureText: true), ElevatedButton(onPressed: login, child: Text('Entrar')), ], ), ), ); } }
Adicionando Novo Usuário
Crie uma função que permita registrar novos usuários no Firebase.
register_page.dartimport 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; class RegisterPage extends StatefulWidget { @override _RegisterPageState createState() => _RegisterPageState(); } class _RegisterPageState extends State<RegisterPage> { final TextEditingController emailController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); Future<void> register() async { try { await FirebaseAuth.instance.createUserWithEmailAndPassword( email: emailController.text, password: passwordController.text, ); } catch (e) { print(e); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Registrar')), body: Padding( padding: EdgeInsets.all(16.0), child: Column( children: <Widget>[ TextField(controller: emailController, decoration: InputDecoration(labelText: 'Email')), TextField(controller: passwordController, decoration: InputDecoration(labelText: 'Senha'), obscureText: true), ElevatedButton(onPressed: register, child: Text('Registrar')), ], ), ), ); } }
Implementação do Firestore para Gerenciamento de Tarefas
Configurar o Firestore para armazenar e recuperar as tarefas dos usuários.
task_service.dartimport 'package:cloud_firestore/cloud_firestore.dart'; class TaskService { final FirebaseFirestore _db = FirebaseFirestore.instance; Future<void> addTask(String task) async { await _db.collection('tasks').add({'task': task, 'completed': false}); } Stream<QuerySnapshot> getTasks() { return _db.collection('tasks').snapshots(); } }
Construindo a Tela de Listagem de Tarefas
Crie uma tela para listar tarefas em tempo real, utilizando o serviço de tarefas que você implementou.
task_list_page.dartimport 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'task_service.dart'; class TaskListPage extends StatelessWidget { final TaskService taskService = TaskService(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Tarefas')), body: StreamBuilder<QuerySnapshot>( stream: taskService.getTasks(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } final tasks = snapshot.data.docs; return ListView.builder( itemCount: tasks.length, itemBuilder: (context, index) { return ListTile( title: Text(tasks[index]['task']), ); }, ); }, ), ); } }
Executando o Aplicativo
Execute o seu aplicativo Flutter, utilizando o comando abaixo, e teste o fluxo de autenticação e gerenciamento de tarefas.
commands# Execute o aplicativo
flutter run
Conclusão
Neste tutorial, você aprendeu a construir uma aplicação de gerenciamento de tarefas em tempo real utilizando Dart e Flutter, com integração ao Firebase para autenticação e banco de dados. Desde a configuração do ambiente até a implementação do fluxo de autenticação e a listagem de tarefas, cobrimos cada etapa de forma detalhada. Agora você tem uma base sólida para continuar expandindo sua aplicação com funcionalidades adicionais, como edição de tarefas, marcação como concluídas e notificações. Explore as possibilidades do Flutter e Firebase e continue aprimorando suas habilidades em desenvolvimento de aplicativos móveis!