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

  1. 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 doctor

  2. Criação do Projeto Flutter

    Crie um novo projeto Flutter utilizando o comando abaixo. O nome do projeto será ‘gerenciador_tarefas’.

    commands
    flutter create gerenciador_tarefas
    cd gerenciador_tarefas

  3. Configuraçã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/

  4. 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.yaml
    dependencies:
      flutter:
        sdk: flutter
      firebase_core: ^2.4.0
      firebase_auth: ^3.3.0

  5. Inicialização do Firebase

    Modifique o arquivo ‘main.dart’ para inicializar o Firebase ao iniciar o aplicativo.

    main.dart
    import '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!')),
        );
      }
    }

  6. Criação da Tela de Autenticação

    Implemente a tela de login que permitirá aos usuários se autenticarem utilizando o Firebase.

    login_page.dart
    import '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')),
              ],
            ),
          ),
        );
      }
    }

  7. Adicionando Novo Usuário

    Crie uma função que permita registrar novos usuários no Firebase.

    register_page.dart
    import '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')),
              ],
            ),
          ),
        );
      }
    }

  8. Implementação do Firestore para Gerenciamento de Tarefas

    Configurar o Firestore para armazenar e recuperar as tarefas dos usuários.

    task_service.dart
    import '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();
      }
    }

  9. 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.dart
    import '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']),
                  );
                },
              );
            },
          ),
        );
      }
    }

  10. 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!

Hashtags

#Flutter #Dart #Firebase #GerenciamentoDeTarefas #DesenvolvimentoMobile