Introdução

O Flutter, desenvolvido pelo Google, é um framework de UI que permite desenvolver aplicativos multiplataforma com uma única base de código. Com o uso do Dart, a linguagem de programação por trás do Flutter, os desenvolvedores podem criar aplicações modernas e reativas com facilidade. Este tutorial é direcionado a desenvolvedores que estão começando com Flutter e Dart, e tem como objetivo não apenas guiá-los na criação de um aplicativo multiplataforma, mas também na implementação de testes automatizados e integração contínua para garantir a qualidade e a eficácia de suas aplicações ao longo do ciclo de vida do desenvolvimento. Você aprenderá as melhores práticas e padrões de codificação, além de configurar o ambiente necessário para o desenvolvimento, o que permitirá uma abordagem mais estratégica em relação ao desenvolvimento de software.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Antes de começar a desenvolver em Flutter, você precisará configurar corretamente seu ambiente de desenvolvimento. Isso inclui a instalação do Flutter SDK e do Dart SDK, além de um IDE como o Visual Studio Code ou Android Studio. Siga as instruções na documentação oficial do Flutter para baixar e instalar essas ferramentas.

    commands
    # Baixe o Flutter SDK
    https://flutter.dev/docs/get-started/install
    # Adicione Flutter ao PATH
    export PATH="$PATH:`pwd`/flutter/bin"

  2. Criação de um Novo Projeto Flutter

    Uma vez que o ambiente esteja configurado, você pode criar um novo projeto Flutter. Abra seu terminal ou prompt de comando e execute o comando abaixo. Isso criará uma nova pasta com um aplicativo Flutter básico pré-configurado.

    commands
    flutter create nome_do_projeto
    cd nome_do_projeto

  3. Estrutura do Projeto

    Após a criação do projeto, observe a estrutura de diretórios. Os arquivos principais encontram-se na pasta `lib`, que contém o arquivo `main.dart`. Neste arquivo, você encontrará o ponto de entrada para sua aplicação Flutter. Edite esse arquivo para começar a desenvolver sua interface.

    main.dart
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Meu Aplicativo Flutter',
          home: Scaffold(
            appBar: AppBar(
              title: Text('Olá Flutter'),
            ),
            body: Center(
              child: Text('Bem-vindo ao Flutter!'),
            ),
          ),
        );
      }
    }

  4. Adicionando Dependências

    Neste passo, você pode adicionar dependências ao seu projeto. Abra o arquivo `pubspec.yaml` e adicione as dependências necessárias, como `http`, `provider` ou `flutter_test` para testes automatizados.

    pubspec.yaml
    dependencies:
      flutter:
        sdk: flutter
      http: ^0.13.3
      provider: ^5.0.0
    
    dev_dependencies:
      flutter_test:
        sdk: flutter

  5. Criando uma Página Simples

    Crie uma nova página chamada `home.dart` na pasta `lib` e implemente uma interface simples. Isso permitirá que você pratique a criação de widgets e a navegação entre páginas.

    home.dart
    import 'package:flutter/material.dart';
    
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Home'),
          ),
          body: Center(
            child: Text('Página Inicial'),
          ),
        );
      }
    }

  6. Implementando Navegação

    Modifique o arquivo `main.dart` para adicionar a navegação para a nova página que você criou. Isso pode ser feito utilizando o método `Navigator.push`.

    main.dart
    import 'package:flutter/material.dart';
    import 'home.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Meu Aplicativo Flutter',
          home: Scaffold(
            appBar: AppBar(
              title: Text('Olá Flutter'),
            ),
            body: Center(
              child: ElevatedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => HomePage()),
                  );
                },
                child: Text('Ir para Home'),
              ),
            ),
          ),
        );
      }
    }

  7. Criando Testes Automatizados

    Implemente testes para a sua aplicação usando o pacote `flutter_test`. Crie um arquivo de teste em `test/widget_test.dart` e escreva um teste para verificar se a página inicial é exibida corretamente.

    widget_test.dart
    import 'package:flutter_test/flutter_test.dart';
    import 'package:seu_projeto/main.dart';
    
    void main() {
      testWidgets('Verifica se o botão está presente', (WidgetTester tester) async {
        await tester.pumpWidget(MyApp());
        expect(find.text('Ir para Home'), findsOneWidget);
      });
    }

  8. Executando Testes

    Após a implementação dos testes, execute-os utilizando o comando abaixo. Isso garantirá que sua aplicação esteja funcionando como esperado antes de avançar para a integração contínua.

    commands
    flutter test

  9. Configuração de Integração Contínua

    Para configurar a integração contínua, utilize uma plataforma como GitHub Actions ou GitLab CI. Crie um arquivo de configuração (por exemplo, `.github/workflows/ci.yml`) que execute os testes sempre que houver um push ou uma pull request.

    ci.yml
    name: CI
    on: [push, pull_request]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@v2
          - name: Setup Flutter
            uses: subosito/flutter-action@v1
            with:
              flutter-version: 'latest'
          - name: Run Tests
            run: flutter test

  10. Executando o Aplicativo

    Finalmente, você pode executar seu aplicativo Flutter em um emulador ou dispositivo físico. Use o comando abaixo para iniciar o aplicativo.

    commands
    flutter run

Conclusão

Neste tutorial, exploramos o Flutter e Dart, criando um aplicativo simples e configurando testes automatizados e integração contínua. Através de uma abordagem passo a passo, você aprendeu a configurar seu ambiente, desenvolver uma aplicação básica, e garantir a qualidade do seu código com testes e um pipeline de CI. À medida que você se familiariza mais com Flutter, poderá expandir ainda mais funcionalidades e integrar serviços complexos na sua aplicação. A comunidade Flutter é vibrante e há sempre novos recursos para explorar!

Hashtags

#Flutter #Dart #DesenvolvimentoMobile #TestesAutomatizados #IntegracaoContinua #AplicativosMultiplataforma