O futuro do desenvolvimento de aplicativos móveis: Flutter

Autor: Eric Grandt

Com a crescente complexidade dos sistemas e aplicativos, "escrever uma vez, executar em qualquer lugar" começou a se tornar o objetivo final de mais e mais ferramentas de desenvolvimento.

Com base nisso, o Google lançou a estrutura de interface do usuário móvel Flutter na I / O Conference 2017, que permite aos desenvolvedores construir rapidamente interfaces de usuário nativas de alta qualidade em sistemas iOS e Android. Ao mesmo tempo, a Apple também trouxe o SwiftUI, uma estrutura de IU que pode abranger os principais sistemas operacionais da Apple, para desenvolvedores na WWDC 2019.

Então, sob essa tendência, uma ferramenta como o Flutter é realmente o futuro de uma nova geração de desenvolvimento móvel?

Há alguns anos, me envolvi no desenvolvimento de Android e iOS, usando Java e Objective-C. Depois de passar cerca de um mês estudando, decidi não estudar a fundo. Eu simplesmente não consigo encontrar o estado que vai fundo nisso.

Mas recentemente, aprendi sobre o Flutter e decidi tentar novamente na direção do desenvolvimento de aplicativos móveis. Eu imediatamente me apaixonei por ele porque torna o desenvolvimento de aplicativos multiplataforma divertido. Desde que aprendi sobre isso, usei-o para criar um aplicativo e uma biblioteca. Flutter parece ser um passo muito promissor e quero explicar várias razões pelas quais acredito nisso.

1. Suporte técnico fornecido pela Dart

Flutter usa a linguagem Dart desenvolvida pelo Google. Se você já usou Java antes, estará familiarizado com a sintaxe do DART porque eles são muito semelhantes. Mas, além da sintaxe, o Dart é muito diferente do Java.

Não vou discutir o Dart em profundidade, para não divagar, mas quero discutir seus recursos mais úteis, na minha opinião. Esta função é uma operação assíncrona. O Dart não apenas oferece suporte a operações assíncronas, mas também o torna muito fácil.

Se você estiver fazendo IO ou outras operações demoradas (como consultar o banco de dados), poderá usar operações assíncronas em todos os aplicativos Flutter. Se não houver operação assíncrona, qualquer operação demorada fará com que o programa congele até que a operação seja concluída. Para evitar isso, o Dart nos fornece as palavras-chave async e await para permitir que nosso programa continue a execução enquanto espera a conclusão dessas operações mais longas.

Vejamos alguns exemplos: um com operações assíncronas e outro sem.

// Without asynchronous operations
import 'dart:async';

main() {
    longOperation();
    printSomething();
}

longOperation() {
    Duration delay = Duration(seconds: 3);
    Future.delayed(delay);
    print('Waited 3 seconds to print this and blocked execution.');
}

printSomething() {
    print('That sure took a while!');
}

Produto t:

Waited 3 seconds to print this and blocked execution.
That sure took a while!

Isso não é ideal. Ninguém quer usar um aplicativo que travará ao realizar operações longas. Então, vamos modificá-lo um pouco e usar as palavras-chave async e await.

// With asynchronous operations
import 'dart:async';

main() {
    longOperation();
    printSomething();
}

Future<void> longOperation() async {
    var retVal = await runLongOperation();

    print(retVal);
}

const retString = 'Waited 3 seconds to return this without blocking execution.';
Duration delay = Duration(seconds: 3);

Future<String> runLongOperation() => Future.delayed(delay, () => retString);

printSomething() {
    print('I printed right away!');
}

E a saída novamente:

I printed right away!
Waited 3 seconds to return this without blocking execution.

Com operações assíncronas, enquanto executamos o código que leva muito tempo para ser concluído, a execução do resto do código não será prejudicada.

2. Escreva o código apenas uma vez e execute-o no Android e no iOS

Considerando a necessidade de usar diferentes bases de código para Android e iOS, o desenvolvimento de aplicativos móveis pode levar muito tempo. A menos que você use um SDK como o Flutter, você terá uma base de código que pode se adaptar a ambos os sistemas operacionais. Além disso, você também pode executá-los de forma totalmente nativa. Isso significa que coisas como navegar nas páginas e navegação funcionam perfeitamente com diferentes sistemas operacionais.

Resumindo, contanto que você tenha um dispositivo ou simulador em execução, o Flutter pode tornar o processo de construção e execução de seu aplicativo para teste tão simples quanto seus dedos.

Três, desenvolvimento de IU

O desenvolvimento da interface do usuário é quase uma das coisas que não espero. Eu sou mais um desenvolvedor de back-end, então quando se trata de coisas que dependem muito disso, eu só quero algo simples. É aqui que Flutter brilha em meus olhos.

A IU é criada combinando diferentes widgets e modificando-os para se adequar à aparência do seu aplicativo. Você pode controlar quase completamente como esses widgets são exibidos, então você sempre obterá o que deseja no final. Para definir o layout da IU, você pode usar widgets como Linha, Coluna e Contêiner. Para conteúdo, existem como Text e RaisedButton. Esses são apenas alguns dos widgets fornecidos pelo Flutter, e há muitos outros além desses. Usando esses widgets, podemos construir uma IU muito simples:

@override
Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            title: Text('Flutter App'),
            centerTitle: true,
            elevation: 0,
        ),
        body: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
                Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                        Container(
                            child: Text('Some text'),
                        ),
                        Container(
                            child: RaisedButton(
                                onPressed: () {
                                    // Do something on press
                                },
                                child: Text('PRESS ME'),
                            ),
                        ),
                    ],
                ),
            ],
        ),
    );
}

[Falha na transferência da imagem do link externo. O site de origem pode ter um mecanismo de link anti-leech. É recomendável salvar a imagem e enviá-la diretamente (img-gcd7ipPE-1594103092983) (https://upload-images.jianshu.io/ upload_images / 22436740-905dc24af6484113? imageMogr2 / auto-orient / strip% 7CimageView2 / 2 / w / 1240)]

Flutter é como um mágico com uma variedade de adereços, permitindo que você crie facilmente temas de aplicativos. Você pode alterar manualmente a fonte, a cor e definir tudo um por um, mas vai demorar muito. Em vez disso, o Flutter nos fornece algo chamado ThemeData, que nos permite definir valores para cores, fontes, campos de entrada, etc. Esse recurso é excelente para manter a consistência da aparência do aplicativo.

theme: ThemeData(
    brightness: Brightness.dark,
    canvasColor: Colors.grey[900],
    primarySwatch: Colors.teal,
    primaryColor: Colors.teal[500],
    fontFamily: 'Helvetica',
    primaryTextTheme: Typography.whiteCupertino.copyWith(
        display4: TextStyle(
            color: Colors.white,
            fontSize: 36,
        ),
    ),
),

Usando este ThemeData, definimos a cor do aplicativo, a família da fonte e alguns estilos de texto. Tudo, exceto o estilo de texto, será aplicado automaticamente a todo o aplicativo. O estilo de texto de cada widget deve ser definido manualmente um por um, mas ainda é muito simples:

child: Text(
    'Some text',
    style: Theme.of(context).primaryTextTheme.display4,
),

Para melhorar ainda mais a eficiência, o Flutter pode recarregar o aplicativo a quente, para que você não precise reabri-lo sempre que alterar a IU. Você pode fazer alterações agora, salvá-las e ver o efeito das alterações em cerca de um segundo.

Quarto, a biblioteca

Flutter fornece muitos recursos poderosos prontos para uso, mas às vezes você precisa de mais recursos. Considerando o grande número de bibliotecas disponíveis para Dart e Flutter, isso não é um problema. Você tem interesse em anunciar em seu aplicativo? Existem bibliotecas para isso. Quer novos widgets? Existem bibliotecas para isso.

Se preferir fazer você mesmo, você pode criar sua própria biblioteca e compartilhá-la com outras pessoas da comunidade imediatamente. Adicionar uma biblioteca ao projeto é muito simples e pode ser feito adicionando uma linha de código ao arquivo pubspec.yaml. Por exemplo, se você deseja adicionar a biblioteca sqflite:

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^1.0.0

Depois de adicioná-lo ao arquivo, execute flutter packages get e pronto. Várias bibliotecas tornam o desenvolvimento de aplicativos Flutter uma brisa e economizam muito tempo no processo de desenvolvimento.

Cinco, desenvolvimento de back-end

A maioria dos aplicativos agora depende de algum tipo de dado, e todos esses dados precisam ser armazenados em algum lugar para que possam ser exibidos e usados ​​posteriormente. Portanto, é muito importante manter isso em mente ao procurar novos SDKs (como Flutter) para criar aplicativos.

Novamente, Flutter App é feito usando Dart, e Dart é muito bom no desenvolvimento de back-end. Falei sobre muitas funções simples e fáceis neste artigo, e o desenvolvimento back-end do Dart e Flutter não é exceção. Seja para iniciantes ou especialistas, criar aplicativos baseados em dados é muito simples, mas essa simplicidade não é o mesmo que qualidade.

Você pode usar bibliotecas para que possa usar o banco de dados de sua escolha. Usando a biblioteca sqflite, podemos iniciar e executar o banco de dados SQLite muito rapidamente. Graças ao modelo de uma peça, podemos acessar o banco de dados e consultar de quase qualquer lugar sem ter que recriar um objeto todas as vezes.

class DBProvider {
    // Singleton
    DBProvider._();

    // Static object to provide us access from practically anywhere
    static final DBProvider db = DBProvider._();
    Database _database;

    Future<Database> get database async {
        if (_database != null) {
            return _database;
        }

        _database = await initDB();
        return _database;
    }

    initDB() async {
        // Retrieve your app's directory, then create a path to a database for your app.
        Directory documentsDir = await getApplicationDocumentsDirectory();
        String path = join(documentsDir.path, 'money_clip.db');

        return await openDatabase(path, version: 1, onOpen: (db) async {
            // Do something when the database is opened
        }, onCreate: (Database db, int version) async {
            // Do something, such as creating tables, when the database is first created.
            // If the database already exists, this will not be called.
        }
    }
}

Depois de recuperar os dados do banco de dados, você pode usar um modelo para transformá-los em objetos. Ou, se quiser armazenar o objeto em um banco de dados, você pode usar o mesmo modelo para convertê-lo em JSON.

class User {
    int id;
    String name;

    User({
        this.id,
        this.name,
    });

    factory User.fromJson(Map<String, dynamic> json) => new User(
        id: json['id'],
        name: json['name'],
    );

    Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
    };
}

Se não houver maneira de mostrá-lo ao usuário, os dados não são tão úteis. É quando o Flutter entra em cena com widgets como FutureBuilder ou StreamBuilder. Se você estiver interessado em usar Flutter, SQLite e outras tecnologias para criar aplicativos orientados a dados para uma compreensão mais profunda, sugiro que você verifique este artigo:

Seis, algumas reflexões finais

Com o Flutter, existem possibilidades quase infinitas, então até mesmo aplicativos enormes podem ser criados facilmente. Se você está desenvolvendo um aplicativo móvel e ainda não experimentou o Flutter, recomendo fortemente que experimente, porque acredito que você também vai adorar. Depois de usar o Flutter por alguns meses, acho que pode ser dito que este é o futuro do desenvolvimento móvel. Se o futuro não pode ser contado, este é definitivamente um passo na direção certa.

Último

Aqui também compartilho um PDF de aprendizagem Android + vídeo de arquitetura + documento de entrevista + notas de origem , mapa mental avançado de tecnologia de arquitetura avançada, materiais especiais de entrevista de desenvolvimento Android, materiais de arquitetura avançada avançada coletados e organizados por vários caras importantes .

Estes são materiais excelentes que vou ler repetidas vezes nas minhas horas vagas. Pode ajudar efetivamente a todos a dominar o conhecimento e compreender os princípios Claro, você também pode usá-lo para verificar se há omissões e melhorar sua competitividade.

Se precisar, você pode  obtê-lo aqui

Se você gostou deste artigo, você também pode me dar um pequeno like, deixar uma mensagem na área de comentários ou encaminhar e apoiá-la ~

Acho que você gosta

Origin blog.csdn.net/River_ly/article/details/107180728
Recomendado
Clasificación