Renat Fakhrutdinov
Committed by GitHub

Merge pull request #5 from jonataslaw/master

update
Showing 100 changed files with 624 additions and 1566 deletions

Too many changes to show.

To preserve performance only 100 of 100+ files are displayed.

1 -{  
2 - "files": [  
3 - "README.md"  
4 - ],  
5 - "imageSize": 100,  
6 - "commit": false,  
7 - "contributors": [  
8 - {  
9 - "login": "jonataslaw",  
10 - "name": "Jonny Borges",  
11 - "avatar_url": "https://avatars2.githubusercontent.com/u/35742643?v=4",  
12 - "profile": "https://github.com/jonataslaw",  
13 - "contributions": [  
14 - "code"  
15 - ]  
16 - },  
17 - {  
18 - "login": "Nipodemos",  
19 - "name": "Nipodemos",  
20 - "avatar_url": "https://avatars1.githubusercontent.com/u/11494727?v=4",  
21 - "profile": "https://github.com/Nipodemos",  
22 - "contributions": [  
23 - "doc"  
24 - ]  
25 - },  
26 - {  
27 - "login": "RodBr",  
28 - "name": "robr",  
29 - "avatar_url": "https://avatars2.githubusercontent.com/u/13925313?v=4",  
30 - "profile": "https://github.com/RodBr",  
31 - "contributions": [  
32 - "tutorial"  
33 - ]  
34 - },  
35 - {  
36 - "login": "chimon2000",  
37 - "name": "Ryan",  
38 - "avatar_url": "https://avatars1.githubusercontent.com/u/6907797?v=4",  
39 - "profile": "http://ryanedge.page",  
40 - "contributions": [  
41 - "test"  
42 - ]  
43 - },  
44 - {  
45 - "login": "kluverua",  
46 - "name": "kluverua",  
47 - "avatar_url": "https://avatars0.githubusercontent.com/u/13339896?v=4",  
48 - "profile": "https://github.com/kluverua",  
49 - "contributions": [  
50 - "maintenance"  
51 - ]  
52 - }  
53 - ],  
54 - "contributorsPerLine": 7,  
55 - "projectName": "get",  
56 - "projectOwner": "jonataslaw",  
57 - "repoType": "github",  
58 - "repoHost": "https://github.com",  
59 - "skipCi": true  
60 -}  
  1 +name: build
  2 +
  3 +on:
  4 + push:
  5 + branches: [ master ]
  6 + pull_request:
  7 + branches: [ master ]
  8 +
  9 +jobs:
  10 + build:
  11 + defaults:
  12 + run:
  13 + working-directory: packages/get_instance
  14 + runs-on: ubuntu-latest
  15 +
  16 + container:
  17 + image: google/dart:latest
  18 +
  19 + steps:
  20 + - uses: actions/checkout@v2
  21 + - name: Install dependencies
  22 + run: pub get
  23 + - name: Run tests
  24 + run: pub run test
  1 +#The name of your workflow.
  2 +name: build
  3 +# Trigger the workflow on push or pull request
  4 +on:
  5 + push:
  6 + branches: [ master ]
  7 + pull_request:
  8 + branches: [ master ]
  9 +#A workflow run is made up of one or more jobs. Jobs run in parallel by default.
  10 +jobs:
  11 +
  12 + test:
  13 + #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted]
  14 + defaults:
  15 + run:
  16 + working-directory: packages/get_navigation
  17 + runs-on: ubuntu-latest
  18 + #sequence of tasks called
  19 + steps:
  20 + # The branch or tag ref that triggered the workflow will be checked out.
  21 + # https://github.com/actions/checkout
  22 + - uses: actions/checkout@v1
  23 + # Setup a flutter environment.
  24 + # https://github.com/marketplace/actions/flutter-action
  25 + - uses: subosito/flutter-action@v1
  26 + with:
  27 + flutter-version: '1.20.4'
  28 + channel: 'stable'
  29 + - run: flutter pub get
  30 + #- run: flutter analyze
  31 + # run flutter widgets tests and unit tests
  32 + - run: flutter test --coverage
  33 + # Upload coverage reports to Codecov
  34 + # https://github.com/marketplace/actions/codecov
  35 + - uses: codecov/codecov-action@v1.0.7
  36 +
  1 +name: build
  2 +
  3 +on:
  4 + push:
  5 + branches: [ master ]
  6 + pull_request:
  7 + branches: [ master ]
  8 +
  9 +jobs:
  10 + build:
  11 + defaults:
  12 + run:
  13 + working-directory: packages/get_rx
  14 + runs-on: ubuntu-latest
  15 +
  16 + container:
  17 + image: google/dart:latest
  18 +
  19 + steps:
  20 + - uses: actions/checkout@v2
  21 + - name: Install dependencies
  22 + run: pub get
  23 + - name: Run tests
  24 + run: pub run test
  1 +#The name of your workflow.
  2 +name: build
  3 +# Trigger the workflow on push or pull request
  4 +on:
  5 + push:
  6 + branches: [ master ]
  7 + pull_request:
  8 + branches: [ master ]
  9 +#A workflow run is made up of one or more jobs. Jobs run in parallel by default.
  10 +jobs:
  11 +
  12 + test:
  13 + #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted]
  14 + defaults:
  15 + run:
  16 + working-directory: packages/get_state_manager
  17 + runs-on: ubuntu-latest
  18 + #sequence of tasks called
  19 + steps:
  20 + # The branch or tag ref that triggered the workflow will be checked out.
  21 + # https://github.com/actions/checkout
  22 + - uses: actions/checkout@v1
  23 + # Setup a flutter environment.
  24 + # https://github.com/marketplace/actions/flutter-action
  25 + - uses: subosito/flutter-action@v1
  26 + with:
  27 + flutter-version: '1.20.4'
  28 + channel: 'stable'
  29 + - run: flutter pub get
  30 + #- run: flutter analyze
  31 + # run flutter widgets tests and unit tests
  32 + - run: flutter test --coverage
  33 + # Upload coverage reports to Codecov
  34 + # https://github.com/marketplace/actions/codecov
  35 + - uses: codecov/codecov-action@v1.0.7
  36 +
  1 +#The name of your workflow.
  2 +name: build
  3 +# Trigger the workflow on push or pull request
  4 +on:
  5 + push:
  6 + branches: [ master ]
  7 + pull_request:
  8 + branches: [ master ]
  9 +#A workflow run is made up of one or more jobs. Jobs run in parallel by default.
  10 +jobs:
  11 +
  12 + test:
  13 + #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted]
  14 + defaults:
  15 + run:
  16 + working-directory: packages/get_utils
  17 + runs-on: ubuntu-latest
  18 + #sequence of tasks called
  19 + steps:
  20 + # The branch or tag ref that triggered the workflow will be checked out.
  21 + # https://github.com/actions/checkout
  22 + - uses: actions/checkout@v1
  23 + # Setup a flutter environment.
  24 + # https://github.com/marketplace/actions/flutter-action
  25 + - uses: subosito/flutter-action@v1
  26 + with:
  27 + flutter-version: '1.20.4'
  28 + channel: 'stable'
  29 + - run: flutter pub get
  30 + #- run: flutter analyze
  31 + # run flutter widgets tests and unit tests
  32 + - run: flutter test --coverage
  33 + # Upload coverage reports to Codecov
  34 + # https://github.com/marketplace/actions/codecov
  35 + - uses: codecov/codecov-action@v1.0.7
  36 +
1 #The name of your workflow. 1 #The name of your workflow.
2 name: build 2 name: build
3 # Trigger the workflow on push or pull request 3 # Trigger the workflow on push or pull request
4 -on: [push,pull_request] 4 +on:
  5 + push:
  6 + branches: [ master ]
  7 + pull_request:
  8 + branches: [ master ]
5 #A workflow run is made up of one or more jobs. Jobs run in parallel by default. 9 #A workflow run is made up of one or more jobs. Jobs run in parallel by default.
6 jobs: 10 jobs:
7 11
8 test: 12 test:
9 #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted] 13 #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted]
10 - runs-on: macos-latest 14 + defaults:
  15 + run:
  16 + working-directory: getx/
  17 + runs-on: ubuntu-latest
11 #sequence of tasks called 18 #sequence of tasks called
12 steps: 19 steps:
13 # The branch or tag ref that triggered the workflow will be checked out. 20 # The branch or tag ref that triggered the workflow will be checked out.
@@ -17,7 +24,7 @@ jobs: @@ -17,7 +24,7 @@ jobs:
17 # https://github.com/marketplace/actions/flutter-action 24 # https://github.com/marketplace/actions/flutter-action
18 - uses: subosito/flutter-action@v1 25 - uses: subosito/flutter-action@v1
19 with: 26 with:
20 - flutter-version: '1.20.2' 27 + flutter-version: '1.20.4'
21 channel: 'stable' 28 channel: 'stable'
22 - run: flutter pub get 29 - run: flutter pub get
23 #- run: flutter analyze 30 #- run: flutter analyze
1 -{  
2 - "cSpell.enableFiletypes": [  
3 - "markdown"  
4 - ]  
5 -}  
@@ -66,12 +66,12 @@ _Languages: English (this file), [Brazilian Portuguese](README.pt-br.md), [Spani @@ -66,12 +66,12 @@ _Languages: English (this file), [Brazilian Portuguese](README.pt-br.md), [Spani
66 - GetX is not a bloated. It has a multitude of features that allow you to start programming without worrying about anything, but each of these features are in separate containers, and are only started after use. If you only use State Management, only State Management will be compiled. If you only use routes, nothing from the state management will be compiled. You can compile the benchmark repository, and you will see that using only Get state management, the application compiled with Get has become smaller than all other applications that have only the state management of other packages, because nothing that is not used will be compiled into your code, and each GetX solution was designed to be extra lightweight. The merit here also comes from Flutter's tree shaking which is incredible, and manages to eliminate unused resources like no other framework does. 66 - GetX is not a bloated. It has a multitude of features that allow you to start programming without worrying about anything, but each of these features are in separate containers, and are only started after use. If you only use State Management, only State Management will be compiled. If you only use routes, nothing from the state management will be compiled. You can compile the benchmark repository, and you will see that using only Get state management, the application compiled with Get has become smaller than all other applications that have only the state management of other packages, because nothing that is not used will be compiled into your code, and each GetX solution was designed to be extra lightweight. The merit here also comes from Flutter's tree shaking which is incredible, and manages to eliminate unused resources like no other framework does.
67 67
68 - Getx has a huge ecosystem, capable of running with the same code on Android, iOS, Web, Mac, Linux, Windows, and on your server. 68 - Getx has a huge ecosystem, capable of running with the same code on Android, iOS, Web, Mac, Linux, Windows, and on your server.
69 - It is possible to fully reuse your code made on the frontend on your backend with **[Get Server](https://github.com/jonataslaw/get_server)**. 69 +**It is possible to fully reuse your code made on the frontend on your backend with [Get Server](https://github.com/jonataslaw/get_server)**.
70 70
71 -In addition, the entire development process can be completely automated, both on the server and on the front end with **[Get CLI](https://github.com/jonataslaw/get_cli)**. 71 +**In addition, the entire development process can be completely automated, both on the server and on the front end with [Get CLI](https://github.com/jonataslaw/get_cli)**.
72 72
73 -In addition, to further increase your productivity, we have the  
74 -**[extension to VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets)** and the **[extension to Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** 73 +**In addition, to further increase your productivity, we have the
  74 +[extension to VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) and the [extension to Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)**
75 75
76 # Installing 76 # Installing
77 77
@@ -226,6 +226,13 @@ Navigate to new screen: @@ -226,6 +226,13 @@ Navigate to new screen:
226 Get.to(NextScreen()); 226 Get.to(NextScreen());
227 ``` 227 ```
228 228
  229 +Navigate to new screen with name. See more details on named routes [here](./documentation/en_US/route_management.md#navigation-with-named-routes)
  230 +
  231 +```dart
  232 +
  233 +Get.toNamed('/details');
  234 +```
  235 +
229 To close snackbars, dialogs, bottomsheets, or anything you would normally close with Navigator.pop(context); 236 To close snackbars, dialogs, bottomsheets, or anything you would normally close with Navigator.pop(context);
230 237
231 ```dart 238 ```dart
@@ -328,7 +335,6 @@ return GetMaterialApp( @@ -328,7 +335,6 @@ return GetMaterialApp(
328 translations: Messages(), // your translations 335 translations: Messages(), // your translations
329 locale: Locale('en', 'US'), // translations will be displayed in that locale 336 locale: Locale('en', 'US'), // translations will be displayed in that locale
330 fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected. 337 fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected.
331 - supportedLocales: <Locale>[Locale('en', 'UK'), Locale('en', 'US'), Locale('de','DE')] // specify the supported locales  
332 ); 338 );
333 ``` 339 ```
334 340
@@ -16,9 +16,8 @@ @@ -16,9 +16,8 @@
16 16
17 ![](getx.png) 17 ![](getx.png)
18 18
19 -<h2> Pedimos desculpas por qualquer parte não traduzida aqui. O GetX é atualizado com muita frequência e as traduções podem não vir ao mesmo tempo. Então, para manter essa documentação pelo menos com tudo que a versão em inglês tem, eu vou deixar todos os textos não-traduzidos aqui (eu considero que é melhor ele estar lá em inglês do que não estar), então se alguém quiser traduzir, seria muito útil 😁</h2> 19 +<h2> Pedimos desculpas por qualquer parte não traduzida aqui. O GetX é atualizado com muita frequência e as traduções podem não vir ao mesmo tempo. Então, para manter essa documentação pelo menos com tudo que a versão em inglês tem, eu vou deixar todos os textos não-traduzidos aqui (eu considero que é melhor ele estar lá em inglês do que não estar), então se alguém quiser traduzir, seria muito útil 😁</h2>
20 20
21 -- [Canais para comunicação e suporte:](#canais-para-comunicação-e-suporte)  
22 - [Sobre Get](#sobre-get) 21 - [Sobre Get](#sobre-get)
23 - [Instalando](#instalando) 22 - [Instalando](#instalando)
24 - [App Counter usando GetX](#app-counter-usando-getx) 23 - [App Counter usando GetX](#app-counter-usando-getx)
@@ -32,41 +31,49 @@ @@ -32,41 +31,49 @@
32 - [Explicação em video do gerenciamento de rotas](#explicação-em-video-do-gerenciamento-de-rotas) 31 - [Explicação em video do gerenciamento de rotas](#explicação-em-video-do-gerenciamento-de-rotas)
33 - [Gerenciamento de Dependência](#gerenciamento-de-dependência) 32 - [Gerenciamento de Dependência](#gerenciamento-de-dependência)
34 - [Mais detalhes sobre gerenciamento de dependências](#mais-detalhes-sobre-gerenciamento-de-dependências) 33 - [Mais detalhes sobre gerenciamento de dependências](#mais-detalhes-sobre-gerenciamento-de-dependências)
35 -- [Como contribuir](#como-contribuir)  
36 - [Utilidades](#utilidades) 34 - [Utilidades](#utilidades)
37 - [Internacionalização](#internacionalização) 35 - [Internacionalização](#internacionalização)
  36 + - [Traduções](#traduções)
  37 + - [Usando traduções](#usando-traduções)
  38 + - [Localidade](#localidade)
  39 + - [Alterar Local](#alterar-local)
  40 + - [Localidade do sistema operacional](#localidade-do-sistema-operacional)
38 - [Mudar tema (changeTheme)](#mudar-tema-changetheme) 41 - [Mudar tema (changeTheme)](#mudar-tema-changetheme)
39 - [Outras APIs avançadas](#outras-apis-avançadas) 42 - [Outras APIs avançadas](#outras-apis-avançadas)
40 - [Configurações Globais opcionais e configurações manuais](#configurações-globais-opcionais-e-configurações-manuais) 43 - [Configurações Globais opcionais e configurações manuais](#configurações-globais-opcionais-e-configurações-manuais)
41 - - [Video explanation of Other GetX Features](#explicação-em-vídeo-sobre-outras-features-do-getx) 44 + - [Widgets de Estado Local](#widgets-de-estado-local)
  45 + - [ValueBuilder](#valuebuilder)
  46 + - [ObxValue](#obxvalue)
  47 + - [Dicas Úteis](#dicas-úteis)
  48 + - [GetView](#getview)
  49 + - [GetWidget](#getwidget)
  50 + - [GetxService](#getxservice)
  51 + - [Explicação em vídeo sobre Outras Features do GetX](#explicação-em-vídeo-sobre-outras-features-do-getx)
42 - [Breaking Changes da versão 2 para 3](#breaking-changes-da-versão-2-para-3) 52 - [Breaking Changes da versão 2 para 3](#breaking-changes-da-versão-2-para-3)
43 - [Tipagem Rx](#tipagem-rx) 53 - [Tipagem Rx](#tipagem-rx)
44 - [RxController e GetBuilder se uniram](#rxcontroller-e-getbuilder-se-uniram) 54 - [RxController e GetBuilder se uniram](#rxcontroller-e-getbuilder-se-uniram)
45 - [Rotas nomeadas](#rotas-nomeadas) 55 - [Rotas nomeadas](#rotas-nomeadas)
46 - [Porque essa mudança](#porque-essa-mudança) 56 - [Porque essa mudança](#porque-essa-mudança)
47 - [Por que GetX?](#por-que-getx) 57 - [Por que GetX?](#por-que-getx)
48 -  
49 -# Canais para comunicação e suporte:  
50 -  
51 -[**Slack (Inglês)**](https://communityinviter.com/apps/getxworkspace/getx)  
52 -  
53 -[**Discord (Inglês e Português)**](https://discord.com/invite/9Hpt99N)  
54 -  
55 -[**Telegram (Português)**](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) 58 +- [Comunidade](#comunidade)
  59 + - [Canais da comunidade](#canais-da-comunidade)
  60 + - [Como contribuir](#como-contribuir)
  61 + - [Artigos e vídeos](#artigos-e-vídeos)
56 62
57 # Sobre Get 63 # Sobre Get
58 64
59 - Get é uma biblioteca poderosa e extraleve para Flutter. Ela combina um gerenciador de estado de alta performance, injeção de dependência inteligente e gerenciamento de rotas de uma forma rápida e prática. 65 - Get é uma biblioteca poderosa e extraleve para Flutter. Ela combina um gerenciador de estado de alta performance, injeção de dependência inteligente e gerenciamento de rotas de uma forma rápida e prática.
60 -- Get não é para todos, seu foco é:  
61 - - **Performance**: Já que gasta o mínimo de recursos  
62 - - **Produtividade**: Usando uma sintaxe fácil e agradável  
63 - - **Organização**: Que permite o total desacoplamento da View e da lógica de negócio.  
64 -- Get vai economizar horas de desenvolvimento e vai extrair a performance máxima que sua aplicação pode entregar, enquanto é fácil para iniciantes e preciso para experts. 66 +- GetX™ possui 3 princípios básicos, o que significa que esta é a prioridade para todos os recursos da biblioteca
  67 + - **PERFOMANCE**: GetX™ é focado em desempenho e consumo mínimo de recursos. Os benchmarks quase sempre não são importantes no mundo real, mas se você quiser, há um indicador de consumo aqui ([benchmarks](https://github.com/jonataslaw/benchmarks)), onde GetX™ se sai melhor do que outras abordagens de gerenciamento de estado, por exemplo. A diferença não é grande, mas mostra nossa preocupação em não desperdiçar seus recursos.
  68 + - **PRODUTIVIDADE**: GetX™ usa uma sintaxe fácil e agradável. Não importa o que você queira fazer, sempre há uma maneira mais fácil com GetX™. Isso economizará horas de desenvolvimento e extrairá o máximo de desempenho que seu aplicativo pode oferecer.
  69 + - **ORGANIZAÇÃO**: GetX™ permite o desacoplamento total da View, lógica de apresentação, lógica de negócios, injeção de dependência e navegação. Você não precisa de contexto para navegar entre as rotas, portanto, você não depende da árvore do widget (visualização) para isso. Você não precisa de contexto para acessar seus Controllers / BLoCs por meio de um inheritedWidget, então você desacopla completamente sua lógica de apresentação e lógica de negócios de sua camada de visualização. Você não precisa injetar suas classes Controllers / Models / BLoCs em sua árvore de widgets através de multiproviders, pois GetX™ usa seu próprio recurso de injeção de dependência, desacoplando a DI de sua View completamente. Com GetX™ você sabe onde encontrar cada recurso de sua aplicação, tendo o código limpo por padrão. Isso além de facilitar a manutenção, torna o compartilhamento dos módulos, algo que até então em Flutter era impensável, algo totalmente possível. O BLoC foi um ponto de partida para organizar o código no Flutter, ele separa a lógica de negócios da visualização. GetX™ é uma evolução natural disso, separando não apenas a lógica de negócios, mas a lógica de apresentação. O bônus da injeção de dependências e rotas também são dissociadas e a camada de dados está fora de tudo. Você sabe onde está tudo e tudo isso de uma maneira mais fácil do que construir um hello world. GetX™ é a maneira mais fácil, prática e escalonável de construir aplicativos de alto desempenho com o Flutter SDK, com um grande ecossistema em torno dele que funciona perfeitamente em conjunto, sendo fácil para iniciantes e preciso para especialistas. É seguro, estável, atualizado e oferece uma grande variedade de APIs integradas que não estão presentes no Flutter SDK padrão.
  70 +- GetX™ não é inchado. Possui uma infinidade de recursos que permitem que você comece a programar sem se preocupar com nada, mas cada um desses recursos está em contêineres separados e só são iniciados após o uso. Se você usar apenas o Gerenciamento de estado, apenas o Gerenciamento de estado será compilado. Se você usar apenas rotas, nada do gerenciamento de estado será compilado. Você pode compilar o repositório de benchmark e verá que usando apenas o gerenciamento de estado Get, o aplicativo compilado com Get tornou-se menor do que todos os outros aplicativos que têm apenas o gerenciamento de estado de outros pacotes, porque nada que não seja usado será compilado em seu código e cada solução GetX™ foi projetada para ser extra leve. O mérito aqui também vem do tree shaking do Flutter, que é incrível e consegue eliminar recursos não utilizados como nenhum outro framework faz.
65 - Navegue por rotas sem `context`, abra `Dialog`s, `Snackbar`s ou `BottomSheet`s de qualquer lugar no código, gerencie estados e injete dependências de uma forma simples e prática. 71 - Navegue por rotas sem `context`, abra `Dialog`s, `Snackbar`s ou `BottomSheet`s de qualquer lugar no código, gerencie estados e injete dependências de uma forma simples e prática.
66 -- Get é seguro, estável, atualizado e oferece uma enorme gama de APIs que não estão presentes no framework padrão.  
67 -- GetX é desacoplado. Ele tem uma variedade de recursos que te permite começar a programar sem se preocupar com nada, mas cada um desses recursos estão em um container separado, ou seja, nenhuma depende da outra para funcionar. Elas só são inicializadas após o uso. Se você usa apenas o gerenciador de estado, apenas ele será compilado. Teste você mesmo, vá no repositório de benchmark do getX e perceberá: usando somente o gerenciador de estado do Get, a aplicação ficou mais leve do que outros projetos que também estão usando só o gerenciador de estado, porque nada que não seja usado será compilado no seu código e cada recuro do GetX foi feito para ser muito leve. O mérito vem também do AOT do próprio Flutter que é incrível e consegue eliminar recursos não utilizados de uma forma que nenhum outro framework consegue. 72 +- GetX™ possui um enorme ecossistema, capaz de rodar com o mesmo código no Android, iOS, Web, Mac, Linux, Windows e em seu servidor. É possível reutilizar totalmente o código feito no front-end em seu back-end com **[Get Server](https://github.com/jonataslaw/get_server)**.
68 73
69 -**GetX faz seu desenvolvimento mais produtivo, mas quer deixá-lo mais produtivo ainda? Adicione a extensão [GetX extension](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) no seu VSCode**. Não disponível para outras IDEs por enquanto. 74 +Além disso, todo o processo de desenvolvimento pode ser totalmente automatizado, tanto no servidor quanto no front-end com **[Get CLI](https://github.com/jonataslaw/get_cli)**.
  75 +
  76 +Além disso, para aumentar ainda mais sua produtividade, temos a **[extensão para VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets)** e a **[extensão para Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)**
70 77
71 # Instalando 78 # Instalando
72 79
@@ -121,8 +128,7 @@ class Home extends StatelessWidget { @@ -121,8 +128,7 @@ class Home extends StatelessWidget {
121 final Controller c = Get.put(Controller()); 128 final Controller c = Get.put(Controller());
122 @override 129 @override
123 Widget build(context) => Scaffold( 130 Widget build(context) => Scaffold(
124 - appBar: AppBar(title: Obx(  
125 - () => Text("Total of clicks: " + c.count.string))), 131 + appBar: AppBar(title: Obx(() => Text("Total de cliques: ${c.count}"))),
126 // Troque o Navigator.push de 8 linhas por um simples Get.to(). Você não precisa do 'context' 132 // Troque o Navigator.push de 8 linhas por um simples Get.to(). Você não precisa do 'context'
127 body: Center(child: RaisedButton( 133 body: Center(child: RaisedButton(
128 child: Text("Ir pra Outra tela"), onPressed: () => Get.to(Outra()))), 134 child: Text("Ir pra Outra tela"), onPressed: () => Get.to(Outra()))),
@@ -134,7 +140,7 @@ class Outra extends StatelessWidget { @@ -134,7 +140,7 @@ class Outra extends StatelessWidget {
134 // Você pode pedir o Get para encontrar o controller que foi usado em outra página e redirecionar você pra ele. 140 // Você pode pedir o Get para encontrar o controller que foi usado em outra página e redirecionar você pra ele.
135 final Controller c = Get.find(); 141 final Controller c = Get.find();
136 @override 142 @override
137 - Widget build(context) => Scaffold(body: Center(child: Text(c.count.string))); 143 + Widget build(context) => Scaffold(body: Center(child: Text("${c.count}")));
138 } 144 }
139 145
140 ``` 146 ```
@@ -160,9 +166,11 @@ Get não é melhor ou pior que nenhum gerenciador de estado, mas você deveria a @@ -160,9 +166,11 @@ Get não é melhor ou pior que nenhum gerenciador de estado, mas você deveria a
160 166
161 Definitivamente, Get não é o inimigo de nenhum gerenciador, porque Get é um microframework, não apenas um gerenciador, e pode ser usado tanto sozinho quanto em conjunto com eles. 167 Definitivamente, Get não é o inimigo de nenhum gerenciador, porque Get é um microframework, não apenas um gerenciador, e pode ser usado tanto sozinho quanto em conjunto com eles.
162 168
  169 +Get tem dois gerenciadores de estado diferentes: o simple state manager (vamos chamá-lo de GetBuilder) e o reactive state manager (que tem o nome do pacote, GetX)
  170 +
163 ### Reactive state manager 171 ### Reactive state manager
164 172
165 -Programação reativa pode alienar muitas pessoas porque é dito que é complicado. GetX transforma a programação reativa em algo bem simples: 173 +Programação reativa pode alienar muitas pessoas porque é dito que é complicado. GetX transforma a programação reativa em algo bem simples:
166 174
167 * Você não precisa criar StreamControllers 175 * Você não precisa criar StreamControllers
168 * Você não precisa criar um StreamBuilder para cada variável 176 * Você não precisa criar um StreamBuilder para cada variável
@@ -187,7 +195,6 @@ var name = 'Jonatas Borges'.obs; @@ -187,7 +195,6 @@ var name = 'Jonatas Borges'.obs;
187 195
188 E Na UI, quando quiser mostrar a variável e escutar as mudanças dela, simplesmente faça isso: 196 E Na UI, quando quiser mostrar a variável e escutar as mudanças dela, simplesmente faça isso:
189 197
190 -  
191 ```dart 198 ```dart
192 Obx (() => Text (controller.name)); 199 Obx (() => Text (controller.name));
193 ``` 200 ```
@@ -202,10 +209,20 @@ Só isso. É *simples assim*; @@ -202,10 +209,20 @@ Só isso. É *simples assim*;
202 209
203 Amateur Coder fez um vídeo ótimo sobre o gerenciamento de estado! (em inglês). Link: [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) 210 Amateur Coder fez um vídeo ótimo sobre o gerenciamento de estado! (em inglês). Link: [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw)
204 211
205 -Você vai ter uma boa idea do poder do GetX 212 +Você vai ter uma boa idea do poder do GetX
206 213
207 ## Gerenciamento de rotas 214 ## Gerenciamento de rotas
208 215
  216 +Se você for usar routes / snackbars / dialogs / bottomsheets sem contexto, GetX™ é excelente para você também, veja:
  217 +
  218 +Adicione "Get" antes do seu MaterialApp, transformando-o em GetMaterialApp
  219 +
  220 +```dart
  221 +GetMaterialApp( // Antes: MaterialApp(
  222 + home: MyHome(),
  223 +)
  224 +```
  225 +
209 Para navegar para uma próxima tela: 226 Para navegar para uma próxima tela:
210 227
211 ```dart 228 ```dart
@@ -236,11 +253,11 @@ Para navegar para a próxima rota e receber ou atualizar dados assim que retorna @@ -236,11 +253,11 @@ Para navegar para a próxima rota e receber ou atualizar dados assim que retorna
236 var dados = await Get.to(Pagamento()); 253 var dados = await Get.to(Pagamento());
237 ``` 254 ```
238 255
239 -Notou que você não precisou usar `context` para fazer nenhuma dessas coisas? Essa é uma das maiores vantagens de usar o gerenciamento de rotas do GetX. Com isso, você pode executar todos esse métodos de dentro da classe Controller, sem preocupações. 256 +Notou que você não precisou usar `context` para fazer nenhuma dessas coisas? Essa é uma das maiores vantagens de usar o gerenciamento de rotas do GetX. Com isso, você pode executar todos esse métodos de dentro da classe Controller, sem preocupações.
240 257
241 ### Mais detalhes sobre gerenciamento de rotas 258 ### Mais detalhes sobre gerenciamento de rotas
242 259
243 -**GetX funciona com rotas nomeadas também! Veja uma explicação mais completa do gerenciamento de rotas [aqui](./documentation/pt_BR/route_management.md)** 260 +**GetX funciona com rotas nomeadas também! Veja uma explicação mais completa do gerenciamento de rotas [aqui](./documentation/pt_BR/route_management.md)**
244 261
245 ### Explicação em video do gerenciamento de rotas 262 ### Explicação em video do gerenciamento de rotas
246 263
@@ -256,9 +273,10 @@ Já está usando o Get e quer fazer seu projeto o melhor possível? Get tem um g @@ -256,9 +273,10 @@ Já está usando o Get e quer fazer seu projeto o melhor possível? Get tem um g
256 Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller(); 273 Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller();
257 ``` 274 ```
258 275
259 -Em vez de instanciar sua classe dentro da classe que você está usando, você está instanciando ele dentro da instância do Get, que vai fazer ele ficar disponível por todo o App 276 +Em vez de instanciar sua classe dentro da classe que você está usando, você está instanciando ele dentro da instância do Get, que vai fazer ele ficar disponível por todo o App para que então você possa usar seu controller (ou uma classe Bloc) normalmente
  277 +
260 278
261 -Para que então você possa usar seu controller (ou uma classe Bloc) normalmente 279 +**Dica:** O gerenciamento de dependência Get é desacoplado de outras partes do pacote, então se, por exemplo, seu aplicativo já estiver usando um gerenciador de estado (qualquer um, não importa), você não precisa reescrever tudo, você pode usar esta injeção de dependência sem problemas
262 280
263 ```dart 281 ```dart
264 controller.fetchApi(); 282 controller.fetchApi();
@@ -290,42 +308,31 @@ Get.lazyPut<Service>(()=> ApiMock()); @@ -290,42 +308,31 @@ Get.lazyPut<Service>(()=> ApiMock());
290 308
291 **Veja uma explicação mais completa do gerenciamento de dependência [aqui](./documentation/pt_BR/dependency_management.md)** 309 **Veja uma explicação mais completa do gerenciamento de dependência [aqui](./documentation/pt_BR/dependency_management.md)**
292 310
293 -# Como contribuir  
294 -  
295 -Quer contribuir no projeto? Nós ficaremos orgulhosos de ressaltar você como um dos colaboradores. Aqui vai algumas formas em que você pode contribuir e fazer Get (e Flutter) ainda melhores  
296 -  
297 -- Ajudando a traduzir o README para outras linguagens.  
298 -- Adicionando mais documentação ao README (até o momento, várias das funcionalidades do Get não foram documentadas).  
299 -- Fazendo artigos/vídeos ensinando a usar o Get (eles serão inseridos no README e no futuro na nossa Wiki).  
300 -- Fazendo PR's (Pull-Requests) para código/testes.  
301 -- Incluindo novas funcionalidades.  
302 -  
303 -Qualquer contribuição é bem-vinda!  
304 -  
305 # Utilidades 311 # Utilidades
306 312
307 ## Internacionalização 313 ## Internacionalização
308 ### Traduções 314 ### Traduções
309 -As traduções são mantidas num simples dictionary map de chave-valor. 315 +Nós mantemos as traduções num simples dictionary map de chave-valor.
310 Para adicionar traduções personalizadas, crie uma classe e estenda `Translations`. 316 Para adicionar traduções personalizadas, crie uma classe e estenda `Translations`.
  317 +
311 ```dart 318 ```dart
312 import 'package:get/get.dart'; 319 import 'package:get/get.dart';
313 320
314 class Messages extends Translations { 321 class Messages extends Translations {
315 @override 322 @override
316 Map<String, Map<String, String>> get keys => { 323 Map<String, Map<String, String>> get keys => {
317 - 'en_US': {  
318 - 'hello': 'Hello World',  
319 - },  
320 - 'de_DE': {  
321 - 'hello': 'Hallo Welt',  
322 - }  
323 - }; 324 + 'en_US': {
  325 + 'hello': 'Hello World',
  326 + },
  327 + 'de_DE': {
  328 + 'hello': 'Hallo Welt',
  329 + }
  330 + };
324 } 331 }
325 ``` 332 ```
326 333
327 #### Usando traduções 334 #### Usando traduções
328 -Basta anexar `.tr` a chave especificada e ela será traduzida, usando o valor atual de `Get.locale` e `Get.fallbackLocale`. 335 +Basta anexar `.tr` a chave especificada e ela será traduzida, usando o valor atual de `Get.locale` ou `Get.fallbackLocale`.
329 ```dart 336 ```dart
330 Text('hello'.tr); 337 Text('hello'.tr);
331 ``` 338 ```
@@ -338,12 +345,11 @@ return GetMaterialApp( @@ -338,12 +345,11 @@ return GetMaterialApp(
338 translations: Messages(), // suas traduções 345 translations: Messages(), // suas traduções
339 locale: Locale('en', 'US'), // as traduções serão exibidas para esta localidade 346 locale: Locale('en', 'US'), // as traduções serão exibidas para esta localidade
340 fallbackLocale: Locale('en', 'UK'), // especifica uma localidade em caso de falha na localidade definida 347 fallbackLocale: Locale('en', 'UK'), // especifica uma localidade em caso de falha na localidade definida
341 - supportedLocales: <Locale>[Locale('en', 'UK'), Locale('en', 'US'), Locale('de','DE')] // especifica as localidades suportados  
342 ); 348 );
343 ``` 349 ```
344 350
345 #### Alterar local 351 #### Alterar local
346 -Use `Get.updateLocale(locale)` para atualizar a localidade. As traduções usarão automaticamente a nova localidade. 352 +Use `Get.updateLocale(locale)` para atualizar a localidade. As traduções usarão automaticamente a nova localidade e a UI será atualizada.
347 ```dart 353 ```dart
348 var locale = Locale('en', 'US'); 354 var locale = Locale('en', 'US');
349 Get.updateLocale(locale); 355 Get.updateLocale(locale);
@@ -361,7 +367,7 @@ return GetMaterialApp( @@ -361,7 +367,7 @@ return GetMaterialApp(
361 367
362 ## Mudar tema (changeTheme) 368 ## Mudar tema (changeTheme)
363 369
364 -Por favor não use widget acima do GetMaterialApp para atualizar o tema. Isso pode causar keys duplicadas. Várias pessoas estão acostumadas com o jeito normal de criar um Widget `ThemeProvider` só pra alterar o tema do app, mas isso definitivamente NÃO é necessário no Get. 370 +Por favor não use widget acima do GetMaterialApp para atualizar o tema. Isso pode causar keys duplicadas. Várias pessoas estão acostumadas com o jeito normal de criar um Widget `ThemeProvider` só pra alterar o tema do app, mas isso definitivamente NÃO é necessário com GetX™.
365 371
366 Você pode criar seu tema customizado e simplesmente adicionar dentro do `Get.changeTheme` sem nenhum boilerplate para isso: 372 Você pode criar seu tema customizado e simplesmente adicionar dentro do `Get.changeTheme` sem nenhum boilerplate para isso:
367 373
@@ -369,14 +375,12 @@ Você pode criar seu tema customizado e simplesmente adicionar dentro do `Get.ch @@ -369,14 +375,12 @@ Você pode criar seu tema customizado e simplesmente adicionar dentro do `Get.ch
369 Get.changeTheme(ThemeData.light()) 375 Get.changeTheme(ThemeData.light())
370 ``` 376 ```
371 377
372 -Se você quer criar algo como um botão que muda o tema com o toque, você pode combinar duas APIs Get pra isso: a API que checa se o tema dark está sendo aplicado, e a API de mudar o tema, e colocar isso no `onPressed:` 378 +Se você quer criar algo como um botão que muda o tema com o toque, você pode combinar duas APIs GetX™ pra isso:
  379 +- A API que checa se o tema dark está sendo aplicado;
  380 +- A API de mudar o tema e colocar isso no `onPressed:`
373 381
374 ```dart 382 ```dart
375 -Get.changeTheme(  
376 - Get.isDarkMode  
377 - ? ThemeData.light()  
378 - : ThemeData.dark()  
379 -) 383 +Get.changeTheme(Get.isDarkMode ? ThemeData.light() : ThemeData.dark())
380 ``` 384 ```
381 385
382 Quando o modo Dark está ativado, ele vai trocar pro modo light e vice versa. 386 Quando o modo Dark está ativado, ele vai trocar pro modo light e vice versa.
@@ -426,14 +430,26 @@ Get.offUntil() @@ -426,14 +430,26 @@ Get.offUntil()
426 //rotas anteriores até que o predicate retorne true. 430 //rotas anteriores até que o predicate retorne true.
427 Get.offNamedUntil() 431 Get.offNamedUntil()
428 432
429 -// retorna qual é a plataforma  
430 -//(Esse método é completamente compatível com o FlutterWeb,  
431 -//diferente do método do framework "Platform.isAndroid") 433 +// Verifica em que plataforma o app está sendo executado
  434 +// (Esse método é completamente compatível com o FlutterWeb,
  435 +// diferente do método do framework "Platform.isAndroid")
432 GetPlatform.isAndroid 436 GetPlatform.isAndroid
433 GetPlatform.isIOS 437 GetPlatform.isIOS
  438 +GetPlatform.isMacOS
  439 +GetPlatform.isWindows
  440 +GetPlatform.isLinux
  441 +GetPlatform.isFuchsia
  442 +
  443 +// Verifica o tipo de dispositivo
  444 +GetPlatform.isMobile
  445 +GetPlatform.isDesktop
  446 +// Todas as plataformas são suportadas de forma independente na web!
  447 +// Você pode saber se está executando dentro de um navegador
  448 +// no Windows, iOS, OSX, Android, etc.
434 GetPlatform.isWeb 449 GetPlatform.isWeb
435 450
436 -// Equivalente ao método: MediaQuery.of(context).size.width ou height, mas é imutável. Significa que não irá atualizar mesmo que o tamanho da tela mude (como em navegadores ou app desktop) 451 +// Equivalente ao método: MediaQuery.of(context).size.width ou height, mas é imutável.
  452 +// Significa que não irá atualizar mesmo que o tamanho da tela mude (como em navegadores ou app desktop)
437 Get.height 453 Get.height
438 Get.width 454 Get.width
439 455
@@ -446,7 +462,8 @@ Get.contextOverlay @@ -446,7 +462,8 @@ Get.contextOverlay
446 // Obs: os métodos a seguir são extensions do context. Já que se 462 // Obs: os métodos a seguir são extensions do context. Já que se
447 // tem acesso ao context em qualquer lugar do código da UI, você pode usar lá 463 // tem acesso ao context em qualquer lugar do código da UI, você pode usar lá
448 464
449 -// Se você precisa de um width/height adaptável (como em navegadores em que a janela pode ser redimensionada) você precisa usar 'context' 465 +// Se você precisa de um width/height adaptável (como em navegadores em que a janela pode ser redimensionada)
  466 +// você precisa usar 'context'
450 context.width 467 context.width
451 context.height 468 context.height
452 469
@@ -551,7 +568,7 @@ Get.config( @@ -551,7 +568,7 @@ Get.config(
551 ) 568 )
552 ``` 569 ```
553 570
554 -É possível redirecionar todas as mensagens de log do GetX. Útil quando se tem um package de logging e vc quer que ele lide com todos os logs 571 +É possível redirecionar todas as mensagens de log do GetX. Útil quando se tem um package de logging e vc quer que ele lide com todos os logs
555 572
556 ```dart 573 ```dart
557 GetMaterialApp( 574 GetMaterialApp(
@@ -569,10 +586,10 @@ void localLogWriter(String text, {bool isError = false}) { @@ -569,10 +586,10 @@ void localLogWriter(String text, {bool isError = false}) {
569 586
570 ### Widgets de Estado Local 587 ### Widgets de Estado Local
571 588
572 -Esses Widgets permitem que você gerencie um único valor e mantenha o estado efêmero e localmente. Temos versões para Reativo e Simples. Por exemplo, você pode usá-los para alternar obscureText em um TextField, talvez criar um painel expansível personalizado ou talvez modificar o índice atual em um BottomNavigationBar enquanto altera o conteúdo do corpo em um Scaffold. 589 +Esses Widgets permitem que você gerencie um único valor e mantenha o estado efêmero e localmente. Temos versões para Reativo e Simples. Por exemplo, você pode usá-los para alternar obscureText em um `TextField`, talvez criar um painel expansível personalizado ou talvez modificar o índice atual em um `BottomNavigationBar` enquanto altera o conteúdo do corpo em um `Scaffold`.
573 590
574 #### ValueBuilder 591 #### ValueBuilder
575 -Uma simplificação de StatefulWidget que funciona com um callback de "setState" que passa o valor atualizado. 592 +Uma simplificação de `StatefulWidget` que funciona com um callback de `setState` que passa o valor atualizado.
576 593
577 594
578 ```dart 595 ```dart
@@ -583,8 +600,8 @@ ValueBuilder<bool>( @@ -583,8 +600,8 @@ ValueBuilder<bool>(
583 onChanged: updateFn, // mesma assinatura! Você poderia usar ( newValue ) => updateFn( newValue ) 600 onChanged: updateFn, // mesma assinatura! Você poderia usar ( newValue ) => updateFn( newValue )
584 ), 601 ),
585 // se você precisa chamar algo fora do método builder. 602 // se você precisa chamar algo fora do método builder.
586 - onUpdate: (value) => print("Value updated: $value"),  
587 - onDispose: () => print("Widget unmounted"), 603 + onUpdate: (value) => print("Valor atualizado: $value"),
  604 + onDispose: () => print("Widget desmontado"),
588 ), 605 ),
589 ``` 606 ```
590 607
@@ -602,11 +619,207 @@ ObxValue( @@ -602,11 +619,207 @@ ObxValue(
602 ), 619 ),
603 ``` 620 ```
604 621
605 -## Explicação em vídeo sobre Outras Features do GetX  
606 - 622 +### Explicação em vídeo sobre Outras Features do GetX
607 623
608 Amateur Coder fez um vídeo incrível sobre utils, storage, bindings e outras features! Link: [GetX Other Features](https://youtu.be/ttQtlX_Q0eU) 624 Amateur Coder fez um vídeo incrível sobre utils, storage, bindings e outras features! Link: [GetX Other Features](https://youtu.be/ttQtlX_Q0eU)
609 625
  626 +
  627 +## Dicas Úteis
  628 +
  629 +`.obs`ervables (também conhecidos como _Rx_ Types) possuem uma grande variedade de métodos e operadores internos.
  630 +
  631 +> É muito comum acreditar que uma propriedade com `.obs` **É** o valor real... mas não se engane!
  632 +> Evitamos a declaração de tipo da variável, porque o compilador do Dart é inteligente o suficiente e o código
  633 +> parece mais limpo, mas:
  634 +
  635 +```dart
  636 +var message = 'Hello world'.obs;
  637 +print( 'Message "$message" é do tipo ${message.runtimeType}');
  638 +```
  639 +
  640 +Mesmo que `message` _imprima_ o valor da string, seu tipo é **RxString**!
  641 +
  642 +Então, você não pode fazer `message.substring( 0, 4 )`.
  643 +Você tem que acessar o `valor` real dentro do _observable_:
  644 +A "maneira" mais usada é utilizando `.value`, mas, você sabia que também pode usar:
  645 +
  646 +```dart
  647 +final name = 'GetX'.obs;
  648 +// apenas "atualiza" o stream, se o valor for diferente do atual.
  649 +name.value = 'Hey';
  650 +
  651 +// Todas as propriedades Rx são "chamáveis" e retorna o novo valor.
  652 +// mas esta abordagem não aceita `null`, a UI não será reconstruída
  653 +name('Hello');
  654 +
  655 +// é como um getter, imprime 'Hello'
  656 +name() ;
  657 +
  658 +/// números:
  659 +
  660 +final count = 0.obs;
  661 +
  662 +// Você pode usar todas as operações não mutáveis ​​de um num!
  663 +count + 1;
  664 +
  665 +// Cuidado! isso só é válido se `count` não for final, mas var
  666 +count += 1;
  667 +
  668 +// Você também pode comparar com os valores:
  669 +count > 2;
  670 +
  671 +/// booleans:
  672 +
  673 +final flag = false.obs;
  674 +
  675 +// mude o valor entre true/false
  676 +flag.toggle();
  677 +
  678 +
  679 +/// todos os tipos:
  680 +
  681 +// Defina `value` como null.
  682 +flag.nil();
  683 +
  684 +// Todas as operações toString() e toJson() são passada para `value`
  685 +print( count ); // chama `toString()` de RxInt
  686 +
  687 +final abc = [0,1,2].obs;
  688 +// Converte o valor em um Array json, imprime RxList
  689 +// Json é suportado por todos os Rx types!
  690 +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}');
  691 +
  692 +// RxMap, RxList e RxSet são Rx types especiais, que estendem seus tipos nativos.
  693 +// mas você pode trabalhar com uma lista como uma lista normal, embora seja reativa!
  694 +abc.add(12); // Coloca 12 na lista, e ATUALIZA o stream.
  695 +abc[3]; // como uma lista lê o índice 3.
  696 +
  697 +// a igualdade funciona com o Rx e o value do observável, mas o hashCode é sempre obtido do value
  698 +final number = 12.obs;
  699 +print( number == 12 ); // prints > true
  700 +
  701 +/// Rx Models personalizados:
  702 +
  703 +// toJson(), toString() são transferidos para o filho, para que você possa implementar
  704 +// override neles e imprimir o observável diretamente.
  705 +
  706 +class User {
  707 + String name, last;
  708 + int age;
  709 + User({this.name, this.last, this.age});
  710 +
  711 + @override
  712 + String toString() => '$name $last, $age years old';
  713 +}
  714 +
  715 +final user = User(name: 'John', last: 'Doe', age: 33).obs;
  716 +
  717 +// `user` é "reativo", mas as propriedades dentro NÃO SÃO!
  718 +// Então, se mudarmos alguma variável dentro dele:
  719 +user.value.name = 'Roi';
  720 +// O widget não vai reconstruir!,
  721 +// `Rx` não tem nenhuma notificação quando você muda algo dentro do usuário.
  722 +// Portanto, para classes personalizadas, precisamos "notificar" manualmente a mudança.
  723 +user.refresh();
  724 +
  725 +// ou podemos usar o método `update()`!
  726 +user.update((value){
  727 + value.name='Roi';
  728 +});
  729 +
  730 +print( user ); // Resultado (toString): Roi Doe, 33 years old
  731 +```
  732 +
  733 +#### GetView
  734 +
  735 +Eu amo este Widget, é tão simples, mas tão útil!
  736 +
  737 +É um Widget `const Stateless` que tem um getter `controller` registrado para Controller, só isso.
  738 +
  739 +```dart
  740 +class AwesomeController extends GetxController {
  741 + final String title = 'My Awesome View';
  742 +}
  743 +
  744 +// SEMPRE lembre de passar o `Type` que você usou para registrar seu controlador!
  745 +class AwesomeView extends GetView<AwesomeController> {
  746 + @override
  747 + Widget build(BuildContext context) {
  748 + return Container(
  749 + padding: EdgeInsets.all(20),
  750 + child: Text( controller.title ), // apenas chame `controller.something`
  751 + );
  752 + }
  753 +}
  754 +```
  755 +
  756 +#### GetWidget
  757 +
  758 +A maioria das pessoas não tem ideia sobre este widget, ou confunde totalmente o uso dele.
  759 +O caso de uso é muito raro, mas muito específico: Ele armazena em `cache` um Controller.
  760 +Por causa do _cache_, não pode ser um `const Stateless`.
  761 +
  762 +> Então, quando você precisa armazenar em "cache" um Controller?
  763 +
  764 +Se você usar, uma outra característica "não tão comum" de **GetX™**: `Get.create()`.
  765 +
  766 +`Get.create(()=>Controller())` irá gerar um novo `Controller` cada vez que você chamar
  767 +`Get.find<Controller>()`,
  768 +
  769 +É aí que `GetWidget` brilha... já que você pode usá-lo, por exemplo,
  770 +para manter uma lista de itens Todo. Portanto, se o widget for "reconstruído", ele manterá a mesma instância do controlador.
  771 +
  772 +#### GetxService
  773 +
  774 +Esta classe é como um `GetxController`, ele compartilha o mesmo ciclo de vida ( `onInit()`, `onReady()`, `onClose()`).
  775 +Mas não tem "lógica" dentro dele. Ele apenas notifica o sistema de injeção de dependência do GetX™ de que esta subclasse
  776 +**não pode** ser removida da memória.
  777 +
  778 +Portanto, é muito útil manter seus "Services" sempre acessíveis e ativos com `Get.find()`. Como:
  779 +`ApiService`, `StorageService`, `CacheService`.
  780 +
  781 +```dart
  782 +Future<void> main() async {
  783 + await initServices(); /// Aguarda a inicialização dos Services.
  784 + runApp(SomeApp());
  785 +}
  786 +
  787 +/// É uma jogada inteligente para inicializar seus services antes de executar o aplicativo Flutter,
  788 +/// já que você pode controlar o fluxo de execução (talvez você precise carregar alguma configuração de tema,
  789 +/// apiKey, linguagem definida pelo usuário ... então carregue SettingService antes de executar ApiService.
  790 +/// então GetMaterialApp() não precisa reconstruir e obtém os valores diretamente.
  791 +void initServices() async {
  792 + print('iniciando serviços...');
  793 + /// Aqui é onde você coloca a inicialização de get_storage, hive, shared_pref.
  794 + /// ou checa a conexão, ou o que quer que seja assíncrono.
  795 + await Get.putAsync(() => DbService().init());
  796 + await Get.putAsync(SettingsService()).init();
  797 + print('Todos os serviços iniciados.');
  798 +}
  799 +
  800 +class DbService extends GetxService {
  801 + Future<DbService> init() async {
  802 + print('$runtimeType delays 2 sec');
  803 + await 2.delay();
  804 + print('$runtimeType ready!');
  805 + return this;
  806 + }
  807 +}
  808 +
  809 +class SettingsService extends GetxService {
  810 + void init() async {
  811 + print('$runtimeType delays 1 sec');
  812 + await 1.delay();
  813 + print('$runtimeType ready!');
  814 + }
  815 +}
  816 +```
  817 +
  818 +A única maneira de realmente excluir um `GetxService`, é com o `Get.reset()`, que é como uma
  819 +"hot restart" do seu aplicativo. Portanto, lembre-se, se você precisar de persistência absoluta de uma instância de classe durante
  820 +o ciclo de vida de seu aplicativo, use GetxService.
  821 +
  822 +
610 # Breaking Changes da versão 2 para 3 823 # Breaking Changes da versão 2 para 3
611 824
612 ## Tipagem Rx 825 ## Tipagem Rx
@@ -618,7 +831,7 @@ Amateur Coder fez um vídeo incrível sobre utils, storage, bindings e outras fe @@ -618,7 +831,7 @@ Amateur Coder fez um vídeo incrível sobre utils, storage, bindings e outras fe
618 | MapX | `RxMap` | 831 | MapX | `RxMap` |
619 | ListX | `RxList` | 832 | ListX | `RxList` |
620 | NumX | `RxNum` | 833 | NumX | `RxNum` |
621 -| RxDouble | `RxDouble` | 834 +| DoubleX | `RxDouble` |
622 835
623 ## RxController e GetBuilder se uniram 836 ## RxController e GetBuilder se uniram
624 837
@@ -667,7 +880,7 @@ GetMaterialApp( @@ -667,7 +880,7 @@ GetMaterialApp(
667 ) 880 )
668 ``` 881 ```
669 882
670 -### Porque essa mudança 883 +### Porque essa mudança?
671 884
672 Frequentemente, pode ser necessário decidir qual pagina vai ser mostrada ao usuário a partir de um parâmetro, como um token de login. A forma abordada anteriormente não era flexível, já que não permitia isso. 885 Frequentemente, pode ser necessário decidir qual pagina vai ser mostrada ao usuário a partir de um parâmetro, como um token de login. A forma abordada anteriormente não era flexível, já que não permitia isso.
673 886
@@ -686,13 +899,49 @@ GetMaterialApp( @@ -686,13 +899,49 @@ GetMaterialApp(
686 ) 899 )
687 ``` 900 ```
688 901
689 -# Por que GetX? 902 +# Por que GetX?
690 903
691 1- Muitas vezes após uma atualização do Flutter, muitos dos seus packages irão quebrar. As vezes acontecem erros de compilação, muitas vezes aparecem erros que ainda não existem respostas sobre e o desenvolvedor necessita saber de onde o erro veio, rastreá-lo, para só então tentar abrir uma issue no repositório correspondente e ver seu problema resolvido. Get centraliza os principais recursos para o desenvolvimento (Gerência de estado, de dependências e de rotas), permitindo você adicionar um único package em seu pubspec e começar a trabalhar. Após uma atualização do Flutter, a única coisa que você precisa fazer é atualizar a dependencia do Get e começar a trabalhar. Get também resolve problemas de compatibilidade. Quantas vezes uma versão de um package não é compatível com a versão de outro, porque um utiliza uma dependência em uma versão e o outro em outra versão? Essa também não é uma preocupação usando Get, já que tudo está no mesmo package e é totalmente compatível. 904 1- Muitas vezes após uma atualização do Flutter, muitos dos seus packages irão quebrar. As vezes acontecem erros de compilação, muitas vezes aparecem erros que ainda não existem respostas sobre e o desenvolvedor necessita saber de onde o erro veio, rastreá-lo, para só então tentar abrir uma issue no repositório correspondente e ver seu problema resolvido. Get centraliza os principais recursos para o desenvolvimento (Gerência de estado, de dependências e de rotas), permitindo você adicionar um único package em seu pubspec e começar a trabalhar. Após uma atualização do Flutter, a única coisa que você precisa fazer é atualizar a dependencia do Get e começar a trabalhar. Get também resolve problemas de compatibilidade. Quantas vezes uma versão de um package não é compatível com a versão de outro, porque um utiliza uma dependência em uma versão e o outro em outra versão? Essa também não é uma preocupação usando Get, já que tudo está no mesmo package e é totalmente compatível.
692 905
693 -2- Flutter é fácil, Flutter é incrível, mas Flutter ainda tem algum boilerplate que pode ser indesejado para maioria dos desenvolvedores, como o Navigator.of(context).push(context, builder[...]. Get simplifica o desenvolvimento. Em vez de escrever 8 linhas de código para apenas chamar uma rota, você pode simplesmente fazer: Get.to(Home()) e pronto, você irá para a próxima página. Urls dinâmicas da web é algo realmente doloroso de fazer com o Flutter atualmente e isso com o GetX é estupidamente simples. Gerenciar estados no Flutter e gerenciar dependências também é algo que gera muita discussão, por haver centenas de padrões na pub. Mas não há nada que seja tão fácil quanto adicionar um ".obs" no final de sua variável, colocar o seu widget dentro de um Obx e pronto, todas atualizações daquela variável serão automaticamente atualizadas na tela. 906 +2- Flutter é fácil, Flutter é incrível, mas Flutter ainda tem algum boilerplate que pode ser indesejado para maioria dos desenvolvedores, como o Navigator.of(context).push(context, builder[...]. Get simplifica o desenvolvimento. Em vez de escrever 8 linhas de código para apenas chamar uma rota, você pode simplesmente fazer: Get.to(Home()) e pronto, você irá para a próxima página. Urls dinâmicas da web é algo realmente doloroso de fazer com o Flutter atualmente e isso com o GetX é estupidamente simples. Gerenciar estados no Flutter e gerenciar dependências também é algo que gera muita discussão, por haver centenas de padrões na pub. Mas não há nada que seja tão fácil quanto adicionar um ".obs" no final de sua variável, colocar o seu widget dentro de um Obx e pronto, todas atualizações daquela variável serão automaticamente atualizadas na tela.
694 907
695 -3- Facilidade sem se preocupar com desempenho. O desempenho do Flutter já é incrível, mas imagine que você use um gerenciador de estados e um locator para distribuir suas classes blocs/stores/controllers/ etc. Você deverá chamar manualmente a exclusão daquela dependência quando não precisar dela. Mas já pensou em simplesmente usar seu controlador e quando ele não tivesse mais sendo usado por ninguém, ele simplesmente fosse excluído da memória? É isso que GetX faz. Com o SmartManagement, tudo que não está sendo usado é excluído da memória e você não deve se preocupar em nada além de programar. Você terá garantia que está consumindo o mínimo de recursos necessários, sem ao menos ter criado uma lógica para isso. 908 +3- Facilidade sem se preocupar com desempenho. O desempenho do Flutter já é incrível, mas imagine que você use um gerenciador de estados e um locator para distribuir suas classes blocs/stores/controllers/ etc. Você deverá chamar manualmente a exclusão daquela dependência quando não precisar dela. Mas já pensou em simplesmente usar seu controlador e quando ele não tivesse mais sendo usado por ninguém, ele simplesmente fosse excluído da memória? É isso que GetX faz. Com o SmartManagement, tudo que não está sendo usado é excluído da memória e você não deve se preocupar em nada além de programar. Você terá garantia que está consumindo o mínimo de recursos necessários, sem ao menos ter criado uma lógica para isso.
696 909
697 4- Desacoplamento real. Você já deve ter ouvido o conceito "separar a view da lógica de negócios". Isso não é uma peculiaridade do BLoC, MVC ou MVVM, qualquer outro padrão existente no mercado tem esse conceito. No entanto, muitas vezes esse conceito pode ser mitigado no Flutter por conta do uso do context. 910 4- Desacoplamento real. Você já deve ter ouvido o conceito "separar a view da lógica de negócios". Isso não é uma peculiaridade do BLoC, MVC ou MVVM, qualquer outro padrão existente no mercado tem esse conceito. No entanto, muitas vezes esse conceito pode ser mitigado no Flutter por conta do uso do context.
698 -Se você precisa de context para localizar um InheritedWidget, você precisa disso na view ou passar o context por parâmetro. Eu particularmente acho essa solução muito feia e para trabalhar em equipes teremos sempre uma dependência da lógica de negócios da View. Getx é pouco ortodoxo com a abordagem padrão e apesar de não proibir totalmente o uso de StatefulWidgets, InitState e etc, ele tem sempre uma abordagem similar que pode ser mais limpa. Os controllers tem ciclos de vida e quando você precisa fazer uma solicitação APIREST por exemplo, você não depende de nada da view. Você pode usar onInit para iniciar a chamada http e quando os dados chegarem, as variáveis serão preenchidas. Como GetX é totalmente reativo (de verdade e trabalha sob streams), assim que os itens forem preenchidos, automaticamente será atualizado na view todos os widgets que usam aquela variável. Isso permite que as pessoas especialistas em UI trabalhem apenas com widgets e não precisem enviar nada para a lógica de negócio além de eventos do usuário (como clicar em um botão), enquanto as pessoas que trabalham com a lógica de negócio ficarão livres para criá-la e testá-la separadamente. 911 +Se você precisa de context para localizar um InheritedWidget, você precisa disso na view ou passar o context por parâmetro. Eu particularmente acho essa solução muito feia e para trabalhar em equipes teremos sempre uma dependência da lógica de negócios da View. GetX™ é pouco ortodoxo com a abordagem padrão e apesar de não proibir totalmente o uso de StatefulWidgets, InitState e etc, ele tem sempre uma abordagem similar que pode ser mais limpa. Os controllers tem ciclos de vida e quando você precisa fazer uma solicitação APIREST por exemplo, você não depende de nada da view. Você pode usar onInit para iniciar a chamada http e quando os dados chegarem, as variáveis serão preenchidas. Como GetX™ é totalmente reativo (de verdade e trabalha sob streams), assim que os itens forem preenchidos, automaticamente será atualizado na view todos os widgets que usam aquela variável. Isso permite que as pessoas especialistas em UI trabalhem apenas com widgets e não precisem enviar nada para a lógica de negócio além de eventos do usuário (como clicar em um botão), enquanto as pessoas que trabalham com a lógica de negócio ficarão livres para criá-la e testá-la separadamente.
  912 +
  913 +# Comunidade
  914 +
  915 +## Canais da comunidade
  916 +
  917 +GetX™ tem uma comunidade altamente ativa e útil. Se você tiver dúvidas, ou quiser alguma ajuda com relação ao uso deste framework, por favor entre em nossos canais da comunidade, sua dúvida será respondida mais rapidamente, e será o lugar mais adequado. Este repositório é exclusivo para abertura de issues e solicitação de recursos, mas fique à vontade para fazer parte da Comunidade GetX™.
  918 +
  919 +| **Slack (Inglês)** | **Discord (Inglês e Português)** | **Telegram (Português)** |
  920 +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- |
  921 +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) |
  922 +
  923 +## Como contribuir
  924 +
  925 +_Quer contribuir com o projeto? Teremos o orgulho de destacá-lo como um de nossos colaboradores. Aqui estão alguns pontos onde você pode contribuir e tornar o Get (e Flutter) ainda melhor._
  926 +
  927 +- Ajudando a traduzir o readme para outros idiomas.
  928 +- Adicionando documentação ao readme (muitas funções do Get ainda não foram documentadas).
  929 +- Escreva artigos ou faça vídeos ensinando como usar o Get (eles serão inseridos no Readme e futuramente em nosso Wiki).
  930 +- Fazendo PRs para código/testes.
  931 +- Incluindo novas funções.
  932 +
  933 +Qualquer contribuição é bem-vinda!
  934 +
  935 +
  936 +## Artigos e vídeos
  937 +
  938 +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). (inglês)
  939 +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. (inglês)
  940 +- [Complete GetX™ State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. (inglês)
  941 +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. (inglês)
  942 +- [Firestore User with GetX™ | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. (inglês)
  943 +- [Firebase Auth with GetX™ | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. (inglês)
  944 +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). (inglês)
  945 +- [GetX™, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. (inglês)
  946 +- [Build a To-do List App from scratch using Flutter and GetX™](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. (inglês)
  947 +- [GetX™ Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. (inglês)
1 -#Mon Sep 14 00:47:46 IST 2020  
2 -gradle.version=5.6.2  
1 -package io.flutter.plugins;  
2 -  
3 -import androidx.annotation.Keep;  
4 -import androidx.annotation.NonNull;  
5 -  
6 -import io.flutter.embedding.engine.FlutterEngine;  
7 -  
8 -/**  
9 - * Generated file. Do not edit.  
10 - * This file is generated by the Flutter tool based on the  
11 - * plugins that support the Android platform.  
12 - */  
13 -@Keep  
14 -public final class GeneratedPluginRegistrant {  
15 - public static void registerWith(@NonNull FlutterEngine flutterEngine) {  
16 - }  
17 -}  
1 -#!/usr/bin/env bash  
2 -  
3 -##############################################################################  
4 -##  
5 -## Gradle start up script for UN*X  
6 -##  
7 -##############################################################################  
8 -  
9 -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.  
10 -DEFAULT_JVM_OPTS=""  
11 -  
12 -APP_NAME="Gradle"  
13 -APP_BASE_NAME=`basename "$0"`  
14 -  
15 -# Use the maximum available, or set MAX_FD != -1 to use that value.  
16 -MAX_FD="maximum"  
17 -  
18 -warn ( ) {  
19 - echo "$*"  
20 -}  
21 -  
22 -die ( ) {  
23 - echo  
24 - echo "$*"  
25 - echo  
26 - exit 1  
27 -}  
28 -  
29 -# OS specific support (must be 'true' or 'false').  
30 -cygwin=false  
31 -msys=false  
32 -darwin=false  
33 -case "`uname`" in  
34 - CYGWIN* )  
35 - cygwin=true  
36 - ;;  
37 - Darwin* )  
38 - darwin=true  
39 - ;;  
40 - MINGW* )  
41 - msys=true  
42 - ;;  
43 -esac  
44 -  
45 -# Attempt to set APP_HOME  
46 -# Resolve links: $0 may be a link  
47 -PRG="$0"  
48 -# Need this for relative symlinks.  
49 -while [ -h "$PRG" ] ; do  
50 - ls=`ls -ld "$PRG"`  
51 - link=`expr "$ls" : '.*-> \(.*\)$'`  
52 - if expr "$link" : '/.*' > /dev/null; then  
53 - PRG="$link"  
54 - else  
55 - PRG=`dirname "$PRG"`"/$link"  
56 - fi  
57 -done  
58 -SAVED="`pwd`"  
59 -cd "`dirname \"$PRG\"`/" >/dev/null  
60 -APP_HOME="`pwd -P`"  
61 -cd "$SAVED" >/dev/null  
62 -  
63 -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar  
64 -  
65 -# Determine the Java command to use to start the JVM.  
66 -if [ -n "$JAVA_HOME" ] ; then  
67 - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then  
68 - # IBM's JDK on AIX uses strange locations for the executables  
69 - JAVACMD="$JAVA_HOME/jre/sh/java"  
70 - else  
71 - JAVACMD="$JAVA_HOME/bin/java"  
72 - fi  
73 - if [ ! -x "$JAVACMD" ] ; then  
74 - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME  
75 -  
76 -Please set the JAVA_HOME variable in your environment to match the  
77 -location of your Java installation."  
78 - fi  
79 -else  
80 - JAVACMD="java"  
81 - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.  
82 -  
83 -Please set the JAVA_HOME variable in your environment to match the  
84 -location of your Java installation."  
85 -fi  
86 -  
87 -# Increase the maximum file descriptors if we can.  
88 -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then  
89 - MAX_FD_LIMIT=`ulimit -H -n`  
90 - if [ $? -eq 0 ] ; then  
91 - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then  
92 - MAX_FD="$MAX_FD_LIMIT"  
93 - fi  
94 - ulimit -n $MAX_FD  
95 - if [ $? -ne 0 ] ; then  
96 - warn "Could not set maximum file descriptor limit: $MAX_FD"  
97 - fi  
98 - else  
99 - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"  
100 - fi  
101 -fi  
102 -  
103 -# For Darwin, add options to specify how the application appears in the dock  
104 -if $darwin; then  
105 - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""  
106 -fi  
107 -  
108 -# For Cygwin, switch paths to Windows format before running java  
109 -if $cygwin ; then  
110 - APP_HOME=`cygpath --path --mixed "$APP_HOME"`  
111 - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`  
112 - JAVACMD=`cygpath --unix "$JAVACMD"`  
113 -  
114 - # We build the pattern for arguments to be converted via cygpath  
115 - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`  
116 - SEP=""  
117 - for dir in $ROOTDIRSRAW ; do  
118 - ROOTDIRS="$ROOTDIRS$SEP$dir"  
119 - SEP="|"  
120 - done  
121 - OURCYGPATTERN="(^($ROOTDIRS))"  
122 - # Add a user-defined pattern to the cygpath arguments  
123 - if [ "$GRADLE_CYGPATTERN" != "" ] ; then  
124 - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"  
125 - fi  
126 - # Now convert the arguments - kludge to limit ourselves to /bin/sh  
127 - i=0  
128 - for arg in "$@" ; do  
129 - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`  
130 - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option  
131 -  
132 - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition  
133 - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`  
134 - else  
135 - eval `echo args$i`="\"$arg\""  
136 - fi  
137 - i=$((i+1))  
138 - done  
139 - case $i in  
140 - (0) set -- ;;  
141 - (1) set -- "$args0" ;;  
142 - (2) set -- "$args0" "$args1" ;;  
143 - (3) set -- "$args0" "$args1" "$args2" ;;  
144 - (4) set -- "$args0" "$args1" "$args2" "$args3" ;;  
145 - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;  
146 - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;  
147 - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;  
148 - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;  
149 - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;  
150 - esac  
151 -fi  
152 -  
153 -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules  
154 -function splitJvmOpts() {  
155 - JVM_OPTS=("$@")  
156 -}  
157 -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS  
158 -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"  
159 -  
160 -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"  
1 -@if "%DEBUG%" == "" @echo off  
2 -@rem ##########################################################################  
3 -@rem  
4 -@rem Gradle startup script for Windows  
5 -@rem  
6 -@rem ##########################################################################  
7 -  
8 -@rem Set local scope for the variables with windows NT shell  
9 -if "%OS%"=="Windows_NT" setlocal  
10 -  
11 -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.  
12 -set DEFAULT_JVM_OPTS=  
13 -  
14 -set DIRNAME=%~dp0  
15 -if "%DIRNAME%" == "" set DIRNAME=.  
16 -set APP_BASE_NAME=%~n0  
17 -set APP_HOME=%DIRNAME%  
18 -  
19 -@rem Find java.exe  
20 -if defined JAVA_HOME goto findJavaFromJavaHome  
21 -  
22 -set JAVA_EXE=java.exe  
23 -%JAVA_EXE% -version >NUL 2>&1  
24 -if "%ERRORLEVEL%" == "0" goto init  
25 -  
26 -echo.  
27 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.  
28 -echo.  
29 -echo Please set the JAVA_HOME variable in your environment to match the  
30 -echo location of your Java installation.  
31 -  
32 -goto fail  
33 -  
34 -:findJavaFromJavaHome  
35 -set JAVA_HOME=%JAVA_HOME:"=%  
36 -set JAVA_EXE=%JAVA_HOME%/bin/java.exe  
37 -  
38 -if exist "%JAVA_EXE%" goto init  
39 -  
40 -echo.  
41 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%  
42 -echo.  
43 -echo Please set the JAVA_HOME variable in your environment to match the  
44 -echo location of your Java installation.  
45 -  
46 -goto fail  
47 -  
48 -:init  
49 -@rem Get command-line arguments, handling Windowz variants  
50 -  
51 -if not "%OS%" == "Windows_NT" goto win9xME_args  
52 -if "%@eval[2+2]" == "4" goto 4NT_args  
53 -  
54 -:win9xME_args  
55 -@rem Slurp the command line arguments.  
56 -set CMD_LINE_ARGS=  
57 -set _SKIP=2  
58 -  
59 -:win9xME_args_slurp  
60 -if "x%~1" == "x" goto execute  
61 -  
62 -set CMD_LINE_ARGS=%*  
63 -goto execute  
64 -  
65 -:4NT_args  
66 -@rem Get arguments from the 4NT Shell from JP Software  
67 -set CMD_LINE_ARGS=%$  
68 -  
69 -:execute  
70 -@rem Setup the command line  
71 -  
72 -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar  
73 -  
74 -@rem Execute Gradle  
75 -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%  
76 -  
77 -:end  
78 -@rem End local scope for the variables with windows NT shell  
79 -if "%ERRORLEVEL%"=="0" goto mainEnd  
80 -  
81 -:fail  
82 -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of  
83 -rem the _cmd.exe /c_ return code!  
84 -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1  
85 -exit /b 1  
86 -  
87 -:mainEnd  
88 -if "%OS%"=="Windows_NT" endlocal  
89 -  
90 -:omega  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
3 -<plist version="1.0">  
4 -<dict>  
5 - <key>CFBundleDevelopmentRegion</key>  
6 - <string>$(DEVELOPMENT_LANGUAGE)</string>  
7 - <key>CFBundleExecutable</key>  
8 - <string>App</string>  
9 - <key>CFBundleIdentifier</key>  
10 - <string>io.flutter.flutter.app</string>  
11 - <key>CFBundleInfoDictionaryVersion</key>  
12 - <string>6.0</string>  
13 - <key>CFBundleName</key>  
14 - <string>App</string>  
15 - <key>CFBundlePackageType</key>  
16 - <string>FMWK</string>  
17 - <key>CFBundleShortVersionString</key>  
18 - <string>1.0</string>  
19 - <key>CFBundleSignature</key>  
20 - <string>????</string>  
21 - <key>CFBundleVersion</key>  
22 - <string>1.0</string>  
23 - <key>MinimumOSVersion</key>  
24 - <string>9.0</string>  
25 -</dict>  
26 -</plist>  
1 -#include "Generated.xcconfig"  
1 -#include "Generated.xcconfig"  
1 -// !$*UTF8*$!  
2 -{  
3 - archiveVersion = 1;  
4 - classes = {  
5 - };  
6 - objectVersion = 46;  
7 - objects = {  
8 -  
9 -/* Begin PBXBuildFile section */  
10 - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };  
11 - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };  
12 - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };  
13 - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };  
14 - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };  
15 - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };  
16 -/* End PBXBuildFile section */  
17 -  
18 -/* Begin PBXCopyFilesBuildPhase section */  
19 - 9705A1C41CF9048500538489 /* Embed Frameworks */ = {  
20 - isa = PBXCopyFilesBuildPhase;  
21 - buildActionMask = 2147483647;  
22 - dstPath = "";  
23 - dstSubfolderSpec = 10;  
24 - files = (  
25 - );  
26 - name = "Embed Frameworks";  
27 - runOnlyForDeploymentPostprocessing = 0;  
28 - };  
29 -/* End PBXCopyFilesBuildPhase section */  
30 -  
31 -/* Begin PBXFileReference section */  
32 - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };  
33 - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };  
34 - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };  
35 - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };  
36 - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };  
37 - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };  
38 - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };  
39 - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };  
40 - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };  
41 - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };  
42 - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };  
43 - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };  
44 - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };  
45 -/* End PBXFileReference section */  
46 -  
47 -/* Begin PBXFrameworksBuildPhase section */  
48 - 97C146EB1CF9000F007C117D /* Frameworks */ = {  
49 - isa = PBXFrameworksBuildPhase;  
50 - buildActionMask = 2147483647;  
51 - files = (  
52 - );  
53 - runOnlyForDeploymentPostprocessing = 0;  
54 - };  
55 -/* End PBXFrameworksBuildPhase section */  
56 -  
57 -/* Begin PBXGroup section */  
58 - 9740EEB11CF90186004384FC /* Flutter */ = {  
59 - isa = PBXGroup;  
60 - children = (  
61 - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,  
62 - 9740EEB21CF90195004384FC /* Debug.xcconfig */,  
63 - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,  
64 - 9740EEB31CF90195004384FC /* Generated.xcconfig */,  
65 - );  
66 - name = Flutter;  
67 - sourceTree = "<group>";  
68 - };  
69 - 97C146E51CF9000F007C117D = {  
70 - isa = PBXGroup;  
71 - children = (  
72 - 9740EEB11CF90186004384FC /* Flutter */,  
73 - 97C146F01CF9000F007C117D /* Runner */,  
74 - 97C146EF1CF9000F007C117D /* Products */,  
75 - );  
76 - sourceTree = "<group>";  
77 - };  
78 - 97C146EF1CF9000F007C117D /* Products */ = {  
79 - isa = PBXGroup;  
80 - children = (  
81 - 97C146EE1CF9000F007C117D /* Runner.app */,  
82 - );  
83 - name = Products;  
84 - sourceTree = "<group>";  
85 - };  
86 - 97C146F01CF9000F007C117D /* Runner */ = {  
87 - isa = PBXGroup;  
88 - children = (  
89 - 97C146FA1CF9000F007C117D /* Main.storyboard */,  
90 - 97C146FD1CF9000F007C117D /* Assets.xcassets */,  
91 - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,  
92 - 97C147021CF9000F007C117D /* Info.plist */,  
93 - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,  
94 - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,  
95 - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,  
96 - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,  
97 - );  
98 - path = Runner;  
99 - sourceTree = "<group>";  
100 - };  
101 -/* End PBXGroup section */  
102 -  
103 -/* Begin PBXNativeTarget section */  
104 - 97C146ED1CF9000F007C117D /* Runner */ = {  
105 - isa = PBXNativeTarget;  
106 - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;  
107 - buildPhases = (  
108 - 9740EEB61CF901F6004384FC /* Run Script */,  
109 - 97C146EA1CF9000F007C117D /* Sources */,  
110 - 97C146EB1CF9000F007C117D /* Frameworks */,  
111 - 97C146EC1CF9000F007C117D /* Resources */,  
112 - 9705A1C41CF9048500538489 /* Embed Frameworks */,  
113 - 3B06AD1E1E4923F5004D2608 /* Thin Binary */,  
114 - );  
115 - buildRules = (  
116 - );  
117 - dependencies = (  
118 - );  
119 - name = Runner;  
120 - productName = Runner;  
121 - productReference = 97C146EE1CF9000F007C117D /* Runner.app */;  
122 - productType = "com.apple.product-type.application";  
123 - };  
124 -/* End PBXNativeTarget section */  
125 -  
126 -/* Begin PBXProject section */  
127 - 97C146E61CF9000F007C117D /* Project object */ = {  
128 - isa = PBXProject;  
129 - attributes = {  
130 - LastUpgradeCheck = 1020;  
131 - ORGANIZATIONNAME = "";  
132 - TargetAttributes = {  
133 - 97C146ED1CF9000F007C117D = {  
134 - CreatedOnToolsVersion = 7.3.1;  
135 - LastSwiftMigration = 1100;  
136 - };  
137 - };  
138 - };  
139 - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;  
140 - compatibilityVersion = "Xcode 9.3";  
141 - developmentRegion = en;  
142 - hasScannedForEncodings = 0;  
143 - knownRegions = (  
144 - en,  
145 - Base,  
146 - );  
147 - mainGroup = 97C146E51CF9000F007C117D;  
148 - productRefGroup = 97C146EF1CF9000F007C117D /* Products */;  
149 - projectDirPath = "";  
150 - projectRoot = "";  
151 - targets = (  
152 - 97C146ED1CF9000F007C117D /* Runner */,  
153 - );  
154 - };  
155 -/* End PBXProject section */  
156 -  
157 -/* Begin PBXResourcesBuildPhase section */  
158 - 97C146EC1CF9000F007C117D /* Resources */ = {  
159 - isa = PBXResourcesBuildPhase;  
160 - buildActionMask = 2147483647;  
161 - files = (  
162 - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,  
163 - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,  
164 - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,  
165 - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,  
166 - );  
167 - runOnlyForDeploymentPostprocessing = 0;  
168 - };  
169 -/* End PBXResourcesBuildPhase section */  
170 -  
171 -/* Begin PBXShellScriptBuildPhase section */  
172 - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {  
173 - isa = PBXShellScriptBuildPhase;  
174 - buildActionMask = 2147483647;  
175 - files = (  
176 - );  
177 - inputPaths = (  
178 - );  
179 - name = "Thin Binary";  
180 - outputPaths = (  
181 - );  
182 - runOnlyForDeploymentPostprocessing = 0;  
183 - shellPath = /bin/sh;  
184 - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";  
185 - };  
186 - 9740EEB61CF901F6004384FC /* Run Script */ = {  
187 - isa = PBXShellScriptBuildPhase;  
188 - buildActionMask = 2147483647;  
189 - files = (  
190 - );  
191 - inputPaths = (  
192 - );  
193 - name = "Run Script";  
194 - outputPaths = (  
195 - );  
196 - runOnlyForDeploymentPostprocessing = 0;  
197 - shellPath = /bin/sh;  
198 - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";  
199 - };  
200 -/* End PBXShellScriptBuildPhase section */  
201 -  
202 -/* Begin PBXSourcesBuildPhase section */  
203 - 97C146EA1CF9000F007C117D /* Sources */ = {  
204 - isa = PBXSourcesBuildPhase;  
205 - buildActionMask = 2147483647;  
206 - files = (  
207 - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,  
208 - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,  
209 - );  
210 - runOnlyForDeploymentPostprocessing = 0;  
211 - };  
212 -/* End PBXSourcesBuildPhase section */  
213 -  
214 -/* Begin PBXVariantGroup section */  
215 - 97C146FA1CF9000F007C117D /* Main.storyboard */ = {  
216 - isa = PBXVariantGroup;  
217 - children = (  
218 - 97C146FB1CF9000F007C117D /* Base */,  
219 - );  
220 - name = Main.storyboard;  
221 - sourceTree = "<group>";  
222 - };  
223 - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {  
224 - isa = PBXVariantGroup;  
225 - children = (  
226 - 97C147001CF9000F007C117D /* Base */,  
227 - );  
228 - name = LaunchScreen.storyboard;  
229 - sourceTree = "<group>";  
230 - };  
231 -/* End PBXVariantGroup section */  
232 -  
233 -/* Begin XCBuildConfiguration section */  
234 - 249021D3217E4FDB00AE95B9 /* Profile */ = {  
235 - isa = XCBuildConfiguration;  
236 - buildSettings = {  
237 - ALWAYS_SEARCH_USER_PATHS = NO;  
238 - CLANG_ANALYZER_NONNULL = YES;  
239 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";  
240 - CLANG_CXX_LIBRARY = "libc++";  
241 - CLANG_ENABLE_MODULES = YES;  
242 - CLANG_ENABLE_OBJC_ARC = YES;  
243 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;  
244 - CLANG_WARN_BOOL_CONVERSION = YES;  
245 - CLANG_WARN_COMMA = YES;  
246 - CLANG_WARN_CONSTANT_CONVERSION = YES;  
247 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;  
248 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;  
249 - CLANG_WARN_EMPTY_BODY = YES;  
250 - CLANG_WARN_ENUM_CONVERSION = YES;  
251 - CLANG_WARN_INFINITE_RECURSION = YES;  
252 - CLANG_WARN_INT_CONVERSION = YES;  
253 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;  
254 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;  
255 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;  
256 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;  
257 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;  
258 - CLANG_WARN_STRICT_PROTOTYPES = YES;  
259 - CLANG_WARN_SUSPICIOUS_MOVE = YES;  
260 - CLANG_WARN_UNREACHABLE_CODE = YES;  
261 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;  
262 - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";  
263 - COPY_PHASE_STRIP = NO;  
264 - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";  
265 - ENABLE_NS_ASSERTIONS = NO;  
266 - ENABLE_STRICT_OBJC_MSGSEND = YES;  
267 - GCC_C_LANGUAGE_STANDARD = gnu99;  
268 - GCC_NO_COMMON_BLOCKS = YES;  
269 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;  
270 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;  
271 - GCC_WARN_UNDECLARED_SELECTOR = YES;  
272 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;  
273 - GCC_WARN_UNUSED_FUNCTION = YES;  
274 - GCC_WARN_UNUSED_VARIABLE = YES;  
275 - IPHONEOS_DEPLOYMENT_TARGET = 9.0;  
276 - MTL_ENABLE_DEBUG_INFO = NO;  
277 - SDKROOT = iphoneos;  
278 - SUPPORTED_PLATFORMS = iphoneos;  
279 - TARGETED_DEVICE_FAMILY = "1,2";  
280 - VALIDATE_PRODUCT = YES;  
281 - };  
282 - name = Profile;  
283 - };  
284 - 249021D4217E4FDB00AE95B9 /* Profile */ = {  
285 - isa = XCBuildConfiguration;  
286 - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;  
287 - buildSettings = {  
288 - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;  
289 - CLANG_ENABLE_MODULES = YES;  
290 - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";  
291 - ENABLE_BITCODE = NO;  
292 - FRAMEWORK_SEARCH_PATHS = (  
293 - "$(inherited)",  
294 - "$(PROJECT_DIR)/Flutter",  
295 - );  
296 - INFOPLIST_FILE = Runner/Info.plist;  
297 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";  
298 - LIBRARY_SEARCH_PATHS = (  
299 - "$(inherited)",  
300 - "$(PROJECT_DIR)/Flutter",  
301 - );  
302 - PRODUCT_BUNDLE_IDENTIFIER = getx.demo.app.example;  
303 - PRODUCT_NAME = "$(TARGET_NAME)";  
304 - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";  
305 - SWIFT_VERSION = 5.0;  
306 - VERSIONING_SYSTEM = "apple-generic";  
307 - };  
308 - name = Profile;  
309 - };  
310 - 97C147031CF9000F007C117D /* Debug */ = {  
311 - isa = XCBuildConfiguration;  
312 - buildSettings = {  
313 - ALWAYS_SEARCH_USER_PATHS = NO;  
314 - CLANG_ANALYZER_NONNULL = YES;  
315 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";  
316 - CLANG_CXX_LIBRARY = "libc++";  
317 - CLANG_ENABLE_MODULES = YES;  
318 - CLANG_ENABLE_OBJC_ARC = YES;  
319 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;  
320 - CLANG_WARN_BOOL_CONVERSION = YES;  
321 - CLANG_WARN_COMMA = YES;  
322 - CLANG_WARN_CONSTANT_CONVERSION = YES;  
323 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;  
324 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;  
325 - CLANG_WARN_EMPTY_BODY = YES;  
326 - CLANG_WARN_ENUM_CONVERSION = YES;  
327 - CLANG_WARN_INFINITE_RECURSION = YES;  
328 - CLANG_WARN_INT_CONVERSION = YES;  
329 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;  
330 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;  
331 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;  
332 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;  
333 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;  
334 - CLANG_WARN_STRICT_PROTOTYPES = YES;  
335 - CLANG_WARN_SUSPICIOUS_MOVE = YES;  
336 - CLANG_WARN_UNREACHABLE_CODE = YES;  
337 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;  
338 - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";  
339 - COPY_PHASE_STRIP = NO;  
340 - DEBUG_INFORMATION_FORMAT = dwarf;  
341 - ENABLE_STRICT_OBJC_MSGSEND = YES;  
342 - ENABLE_TESTABILITY = YES;  
343 - GCC_C_LANGUAGE_STANDARD = gnu99;  
344 - GCC_DYNAMIC_NO_PIC = NO;  
345 - GCC_NO_COMMON_BLOCKS = YES;  
346 - GCC_OPTIMIZATION_LEVEL = 0;  
347 - GCC_PREPROCESSOR_DEFINITIONS = (  
348 - "DEBUG=1",  
349 - "$(inherited)",  
350 - );  
351 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;  
352 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;  
353 - GCC_WARN_UNDECLARED_SELECTOR = YES;  
354 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;  
355 - GCC_WARN_UNUSED_FUNCTION = YES;  
356 - GCC_WARN_UNUSED_VARIABLE = YES;  
357 - IPHONEOS_DEPLOYMENT_TARGET = 9.0;  
358 - MTL_ENABLE_DEBUG_INFO = YES;  
359 - ONLY_ACTIVE_ARCH = YES;  
360 - SDKROOT = iphoneos;  
361 - TARGETED_DEVICE_FAMILY = "1,2";  
362 - };  
363 - name = Debug;  
364 - };  
365 - 97C147041CF9000F007C117D /* Release */ = {  
366 - isa = XCBuildConfiguration;  
367 - buildSettings = {  
368 - ALWAYS_SEARCH_USER_PATHS = NO;  
369 - CLANG_ANALYZER_NONNULL = YES;  
370 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";  
371 - CLANG_CXX_LIBRARY = "libc++";  
372 - CLANG_ENABLE_MODULES = YES;  
373 - CLANG_ENABLE_OBJC_ARC = YES;  
374 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;  
375 - CLANG_WARN_BOOL_CONVERSION = YES;  
376 - CLANG_WARN_COMMA = YES;  
377 - CLANG_WARN_CONSTANT_CONVERSION = YES;  
378 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;  
379 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;  
380 - CLANG_WARN_EMPTY_BODY = YES;  
381 - CLANG_WARN_ENUM_CONVERSION = YES;  
382 - CLANG_WARN_INFINITE_RECURSION = YES;  
383 - CLANG_WARN_INT_CONVERSION = YES;  
384 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;  
385 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;  
386 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;  
387 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;  
388 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;  
389 - CLANG_WARN_STRICT_PROTOTYPES = YES;  
390 - CLANG_WARN_SUSPICIOUS_MOVE = YES;  
391 - CLANG_WARN_UNREACHABLE_CODE = YES;  
392 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;  
393 - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";  
394 - COPY_PHASE_STRIP = NO;  
395 - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";  
396 - ENABLE_NS_ASSERTIONS = NO;  
397 - ENABLE_STRICT_OBJC_MSGSEND = YES;  
398 - GCC_C_LANGUAGE_STANDARD = gnu99;  
399 - GCC_NO_COMMON_BLOCKS = YES;  
400 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;  
401 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;  
402 - GCC_WARN_UNDECLARED_SELECTOR = YES;  
403 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;  
404 - GCC_WARN_UNUSED_FUNCTION = YES;  
405 - GCC_WARN_UNUSED_VARIABLE = YES;  
406 - IPHONEOS_DEPLOYMENT_TARGET = 9.0;  
407 - MTL_ENABLE_DEBUG_INFO = NO;  
408 - SDKROOT = iphoneos;  
409 - SUPPORTED_PLATFORMS = iphoneos;  
410 - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";  
411 - TARGETED_DEVICE_FAMILY = "1,2";  
412 - VALIDATE_PRODUCT = YES;  
413 - };  
414 - name = Release;  
415 - };  
416 - 97C147061CF9000F007C117D /* Debug */ = {  
417 - isa = XCBuildConfiguration;  
418 - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;  
419 - buildSettings = {  
420 - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;  
421 - CLANG_ENABLE_MODULES = YES;  
422 - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";  
423 - ENABLE_BITCODE = NO;  
424 - FRAMEWORK_SEARCH_PATHS = (  
425 - "$(inherited)",  
426 - "$(PROJECT_DIR)/Flutter",  
427 - );  
428 - INFOPLIST_FILE = Runner/Info.plist;  
429 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";  
430 - LIBRARY_SEARCH_PATHS = (  
431 - "$(inherited)",  
432 - "$(PROJECT_DIR)/Flutter",  
433 - );  
434 - PRODUCT_BUNDLE_IDENTIFIER = getx.demo.app.example;  
435 - PRODUCT_NAME = "$(TARGET_NAME)";  
436 - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";  
437 - SWIFT_OPTIMIZATION_LEVEL = "-Onone";  
438 - SWIFT_VERSION = 5.0;  
439 - VERSIONING_SYSTEM = "apple-generic";  
440 - };  
441 - name = Debug;  
442 - };  
443 - 97C147071CF9000F007C117D /* Release */ = {  
444 - isa = XCBuildConfiguration;  
445 - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;  
446 - buildSettings = {  
447 - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;  
448 - CLANG_ENABLE_MODULES = YES;  
449 - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";  
450 - ENABLE_BITCODE = NO;  
451 - FRAMEWORK_SEARCH_PATHS = (  
452 - "$(inherited)",  
453 - "$(PROJECT_DIR)/Flutter",  
454 - );  
455 - INFOPLIST_FILE = Runner/Info.plist;  
456 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";  
457 - LIBRARY_SEARCH_PATHS = (  
458 - "$(inherited)",  
459 - "$(PROJECT_DIR)/Flutter",  
460 - );  
461 - PRODUCT_BUNDLE_IDENTIFIER = getx.demo.app.example;  
462 - PRODUCT_NAME = "$(TARGET_NAME)";  
463 - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";  
464 - SWIFT_VERSION = 5.0;  
465 - VERSIONING_SYSTEM = "apple-generic";  
466 - };  
467 - name = Release;  
468 - };  
469 -/* End XCBuildConfiguration section */  
470 -  
471 -/* Begin XCConfigurationList section */  
472 - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {  
473 - isa = XCConfigurationList;  
474 - buildConfigurations = (  
475 - 97C147031CF9000F007C117D /* Debug */,  
476 - 97C147041CF9000F007C117D /* Release */,  
477 - 249021D3217E4FDB00AE95B9 /* Profile */,  
478 - );  
479 - defaultConfigurationIsVisible = 0;  
480 - defaultConfigurationName = Release;  
481 - };  
482 - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {  
483 - isa = XCConfigurationList;  
484 - buildConfigurations = (  
485 - 97C147061CF9000F007C117D /* Debug */,  
486 - 97C147071CF9000F007C117D /* Release */,  
487 - 249021D4217E4FDB00AE95B9 /* Profile */,  
488 - );  
489 - defaultConfigurationIsVisible = 0;  
490 - defaultConfigurationName = Release;  
491 - };  
492 -/* End XCConfigurationList section */  
493 - };  
494 - rootObject = 97C146E61CF9000F007C117D /* Project object */;  
495 -}  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<Workspace  
3 - version = "1.0">  
4 - <FileRef  
5 - location = "group:Runner.xcodeproj">  
6 - </FileRef>  
7 -</Workspace>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
3 -<plist version="1.0">  
4 -<dict>  
5 - <key>IDEDidComputeMac32BitWarning</key>  
6 - <true/>  
7 -</dict>  
8 -</plist>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
3 -<plist version="1.0">  
4 -<dict>  
5 - <key>PreviewsEnabled</key>  
6 - <false/>  
7 -</dict>  
8 -</plist>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<Scheme  
3 - LastUpgradeVersion = "1020"  
4 - version = "1.3">  
5 - <BuildAction  
6 - parallelizeBuildables = "YES"  
7 - buildImplicitDependencies = "YES">  
8 - <BuildActionEntries>  
9 - <BuildActionEntry  
10 - buildForTesting = "YES"  
11 - buildForRunning = "YES"  
12 - buildForProfiling = "YES"  
13 - buildForArchiving = "YES"  
14 - buildForAnalyzing = "YES">  
15 - <BuildableReference  
16 - BuildableIdentifier = "primary"  
17 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
18 - BuildableName = "Runner.app"  
19 - BlueprintName = "Runner"  
20 - ReferencedContainer = "container:Runner.xcodeproj">  
21 - </BuildableReference>  
22 - </BuildActionEntry>  
23 - </BuildActionEntries>  
24 - </BuildAction>  
25 - <TestAction  
26 - buildConfiguration = "Debug"  
27 - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"  
28 - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"  
29 - shouldUseLaunchSchemeArgsEnv = "YES">  
30 - <Testables>  
31 - </Testables>  
32 - <MacroExpansion>  
33 - <BuildableReference  
34 - BuildableIdentifier = "primary"  
35 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
36 - BuildableName = "Runner.app"  
37 - BlueprintName = "Runner"  
38 - ReferencedContainer = "container:Runner.xcodeproj">  
39 - </BuildableReference>  
40 - </MacroExpansion>  
41 - <AdditionalOptions>  
42 - </AdditionalOptions>  
43 - </TestAction>  
44 - <LaunchAction  
45 - buildConfiguration = "Debug"  
46 - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"  
47 - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"  
48 - launchStyle = "0"  
49 - useCustomWorkingDirectory = "NO"  
50 - ignoresPersistentStateOnLaunch = "NO"  
51 - debugDocumentVersioning = "YES"  
52 - debugServiceExtension = "internal"  
53 - allowLocationSimulation = "YES">  
54 - <BuildableProductRunnable  
55 - runnableDebuggingMode = "0">  
56 - <BuildableReference  
57 - BuildableIdentifier = "primary"  
58 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
59 - BuildableName = "Runner.app"  
60 - BlueprintName = "Runner"  
61 - ReferencedContainer = "container:Runner.xcodeproj">  
62 - </BuildableReference>  
63 - </BuildableProductRunnable>  
64 - <AdditionalOptions>  
65 - </AdditionalOptions>  
66 - </LaunchAction>  
67 - <ProfileAction  
68 - buildConfiguration = "Profile"  
69 - shouldUseLaunchSchemeArgsEnv = "YES"  
70 - savedToolIdentifier = ""  
71 - useCustomWorkingDirectory = "NO"  
72 - debugDocumentVersioning = "YES">  
73 - <BuildableProductRunnable  
74 - runnableDebuggingMode = "0">  
75 - <BuildableReference  
76 - BuildableIdentifier = "primary"  
77 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
78 - BuildableName = "Runner.app"  
79 - BlueprintName = "Runner"  
80 - ReferencedContainer = "container:Runner.xcodeproj">  
81 - </BuildableReference>  
82 - </BuildableProductRunnable>  
83 - </ProfileAction>  
84 - <AnalyzeAction  
85 - buildConfiguration = "Debug">  
86 - </AnalyzeAction>  
87 - <ArchiveAction  
88 - buildConfiguration = "Release"  
89 - revealArchiveInOrganizer = "YES">  
90 - </ArchiveAction>  
91 -</Scheme>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<Workspace  
3 - version = "1.0">  
4 - <FileRef  
5 - location = "group:Runner.xcodeproj">  
6 - </FileRef>  
7 -</Workspace>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
3 -<plist version="1.0">  
4 -<dict>  
5 - <key>IDEDidComputeMac32BitWarning</key>  
6 - <true/>  
7 -</dict>  
8 -</plist>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
3 -<plist version="1.0">  
4 -<dict>  
5 - <key>PreviewsEnabled</key>  
6 - <false/>  
7 -</dict>  
8 -</plist>  
1 -import UIKit  
2 -import Flutter  
3 -  
4 -@UIApplicationMain  
5 -@objc class AppDelegate: FlutterAppDelegate {  
6 - override func application(  
7 - _ application: UIApplication,  
8 - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?  
9 - ) -> Bool {  
10 - GeneratedPluginRegistrant.register(with: self)  
11 - return super.application(application, didFinishLaunchingWithOptions: launchOptions)  
12 - }  
13 -}  
1 -{  
2 - "images" : [  
3 - {  
4 - "size" : "20x20",  
5 - "idiom" : "iphone",  
6 - "filename" : "Icon-App-20x20@2x.png",  
7 - "scale" : "2x"  
8 - },  
9 - {  
10 - "size" : "20x20",  
11 - "idiom" : "iphone",  
12 - "filename" : "Icon-App-20x20@3x.png",  
13 - "scale" : "3x"  
14 - },  
15 - {  
16 - "size" : "29x29",  
17 - "idiom" : "iphone",  
18 - "filename" : "Icon-App-29x29@1x.png",  
19 - "scale" : "1x"  
20 - },  
21 - {  
22 - "size" : "29x29",  
23 - "idiom" : "iphone",  
24 - "filename" : "Icon-App-29x29@2x.png",  
25 - "scale" : "2x"  
26 - },  
27 - {  
28 - "size" : "29x29",  
29 - "idiom" : "iphone",  
30 - "filename" : "Icon-App-29x29@3x.png",  
31 - "scale" : "3x"  
32 - },  
33 - {  
34 - "size" : "40x40",  
35 - "idiom" : "iphone",  
36 - "filename" : "Icon-App-40x40@2x.png",  
37 - "scale" : "2x"  
38 - },  
39 - {  
40 - "size" : "40x40",  
41 - "idiom" : "iphone",  
42 - "filename" : "Icon-App-40x40@3x.png",  
43 - "scale" : "3x"  
44 - },  
45 - {  
46 - "size" : "60x60",  
47 - "idiom" : "iphone",  
48 - "filename" : "Icon-App-60x60@2x.png",  
49 - "scale" : "2x"  
50 - },  
51 - {  
52 - "size" : "60x60",  
53 - "idiom" : "iphone",  
54 - "filename" : "Icon-App-60x60@3x.png",  
55 - "scale" : "3x"  
56 - },  
57 - {  
58 - "size" : "20x20",  
59 - "idiom" : "ipad",  
60 - "filename" : "Icon-App-20x20@1x.png",  
61 - "scale" : "1x"  
62 - },  
63 - {  
64 - "size" : "20x20",  
65 - "idiom" : "ipad",  
66 - "filename" : "Icon-App-20x20@2x.png",  
67 - "scale" : "2x"  
68 - },  
69 - {  
70 - "size" : "29x29",  
71 - "idiom" : "ipad",  
72 - "filename" : "Icon-App-29x29@1x.png",  
73 - "scale" : "1x"  
74 - },  
75 - {  
76 - "size" : "29x29",  
77 - "idiom" : "ipad",  
78 - "filename" : "Icon-App-29x29@2x.png",  
79 - "scale" : "2x"  
80 - },  
81 - {  
82 - "size" : "40x40",  
83 - "idiom" : "ipad",  
84 - "filename" : "Icon-App-40x40@1x.png",  
85 - "scale" : "1x"  
86 - },  
87 - {  
88 - "size" : "40x40",  
89 - "idiom" : "ipad",  
90 - "filename" : "Icon-App-40x40@2x.png",  
91 - "scale" : "2x"  
92 - },  
93 - {  
94 - "size" : "76x76",  
95 - "idiom" : "ipad",  
96 - "filename" : "Icon-App-76x76@1x.png",  
97 - "scale" : "1x"  
98 - },  
99 - {  
100 - "size" : "76x76",  
101 - "idiom" : "ipad",  
102 - "filename" : "Icon-App-76x76@2x.png",  
103 - "scale" : "2x"  
104 - },  
105 - {  
106 - "size" : "83.5x83.5",  
107 - "idiom" : "ipad",  
108 - "filename" : "Icon-App-83.5x83.5@2x.png",  
109 - "scale" : "2x"  
110 - },  
111 - {  
112 - "size" : "1024x1024",  
113 - "idiom" : "ios-marketing",  
114 - "filename" : "Icon-App-1024x1024@1x.png",  
115 - "scale" : "1x"  
116 - }  
117 - ],  
118 - "info" : {  
119 - "version" : 1,  
120 - "author" : "xcode"  
121 - }  
122 -}  
1 -{  
2 - "images" : [  
3 - {  
4 - "idiom" : "universal",  
5 - "filename" : "LaunchImage.png",  
6 - "scale" : "1x"  
7 - },  
8 - {  
9 - "idiom" : "universal",  
10 - "filename" : "LaunchImage@2x.png",  
11 - "scale" : "2x"  
12 - },  
13 - {  
14 - "idiom" : "universal",  
15 - "filename" : "LaunchImage@3x.png",  
16 - "scale" : "3x"  
17 - }  
18 - ],  
19 - "info" : {  
20 - "version" : 1,  
21 - "author" : "xcode"  
22 - }  
23 -}  
1 -# Launch Screen Assets  
2 -  
3 -You can customize the launch screen with your own desired assets by replacing the image files in this directory.  
4 -  
5 -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.  
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>  
2 -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">  
3 - <dependencies>  
4 - <deployment identifier="iOS"/>  
5 - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>  
6 - </dependencies>  
7 - <scenes>  
8 - <!--View Controller-->  
9 - <scene sceneID="EHf-IW-A2E">  
10 - <objects>  
11 - <viewController id="01J-lp-oVM" sceneMemberID="viewController">  
12 - <layoutGuides>  
13 - <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>  
14 - <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>  
15 - </layoutGuides>  
16 - <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">  
17 - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>  
18 - <subviews>  
19 - <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">  
20 - </imageView>  
21 - </subviews>  
22 - <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>  
23 - <constraints>  
24 - <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>  
25 - <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>  
26 - </constraints>  
27 - </view>  
28 - </viewController>  
29 - <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>  
30 - </objects>  
31 - <point key="canvasLocation" x="53" y="375"/>  
32 - </scene>  
33 - </scenes>  
34 - <resources>  
35 - <image name="LaunchImage" width="168" height="185"/>  
36 - </resources>  
37 -</document>  
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>  
2 -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">  
3 - <dependencies>  
4 - <deployment identifier="iOS"/>  
5 - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>  
6 - </dependencies>  
7 - <scenes>  
8 - <!--Flutter View Controller-->  
9 - <scene sceneID="tne-QT-ifu">  
10 - <objects>  
11 - <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">  
12 - <layoutGuides>  
13 - <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>  
14 - <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>  
15 - </layoutGuides>  
16 - <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">  
17 - <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>  
18 - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>  
19 - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>  
20 - </view>  
21 - </viewController>  
22 - <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>  
23 - </objects>  
24 - </scene>  
25 - </scenes>  
26 -</document>  
1 -//  
2 -// Generated file. Do not edit.  
3 -//  
4 -  
5 -#ifndef GeneratedPluginRegistrant_h  
6 -#define GeneratedPluginRegistrant_h  
7 -  
8 -#import <Flutter/Flutter.h>  
9 -  
10 -NS_ASSUME_NONNULL_BEGIN  
11 -  
12 -@interface GeneratedPluginRegistrant : NSObject  
13 -+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry;  
14 -@end  
15 -  
16 -NS_ASSUME_NONNULL_END  
17 -#endif /* GeneratedPluginRegistrant_h */  
1 -//  
2 -// Generated file. Do not edit.  
3 -//  
4 -  
5 -#import "GeneratedPluginRegistrant.h"  
6 -  
7 -@implementation GeneratedPluginRegistrant  
8 -  
9 -+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {  
10 -}  
11 -  
12 -@end  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
3 -<plist version="1.0">  
4 -<dict>  
5 - <key>CFBundleDevelopmentRegion</key>  
6 - <string>$(DEVELOPMENT_LANGUAGE)</string>  
7 - <key>CFBundleExecutable</key>  
8 - <string>$(EXECUTABLE_NAME)</string>  
9 - <key>CFBundleIdentifier</key>  
10 - <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>  
11 - <key>CFBundleInfoDictionaryVersion</key>  
12 - <string>6.0</string>  
13 - <key>CFBundleName</key>  
14 - <string>example</string>  
15 - <key>CFBundlePackageType</key>  
16 - <string>APPL</string>  
17 - <key>CFBundleShortVersionString</key>  
18 - <string>$(FLUTTER_BUILD_NAME)</string>  
19 - <key>CFBundleSignature</key>  
20 - <string>????</string>  
21 - <key>CFBundleVersion</key>  
22 - <string>$(FLUTTER_BUILD_NUMBER)</string>  
23 - <key>LSRequiresIPhoneOS</key>  
24 - <true/>  
25 - <key>UILaunchStoryboardName</key>  
26 - <string>LaunchScreen</string>  
27 - <key>UIMainStoryboardFile</key>  
28 - <string>Main</string>  
29 - <key>UISupportedInterfaceOrientations</key>  
30 - <array>  
31 - <string>UIInterfaceOrientationPortrait</string>  
32 - <string>UIInterfaceOrientationLandscapeLeft</string>  
33 - <string>UIInterfaceOrientationLandscapeRight</string>  
34 - </array>  
35 - <key>UISupportedInterfaceOrientations~ipad</key>  
36 - <array>  
37 - <string>UIInterfaceOrientationPortrait</string>  
38 - <string>UIInterfaceOrientationPortraitUpsideDown</string>  
39 - <string>UIInterfaceOrientationLandscapeLeft</string>  
40 - <string>UIInterfaceOrientationLandscapeRight</string>  
41 - </array>  
42 - <key>UIViewControllerBasedStatusBarAppearance</key>  
43 - <false/>  
44 -</dict>  
45 -</plist>  
1 -#import "GeneratedPluginRegistrant.h"  
1 -# Generated by pub  
2 -# See https://dart.dev/tools/pub/glossary#lockfile  
3 -packages:  
4 - async:  
5 - dependency: transitive  
6 - description:  
7 - name: async  
8 - url: "https://pub.dartlang.org"  
9 - source: hosted  
10 - version: "2.4.2"  
11 - boolean_selector:  
12 - dependency: transitive  
13 - description:  
14 - name: boolean_selector  
15 - url: "https://pub.dartlang.org"  
16 - source: hosted  
17 - version: "2.0.0"  
18 - characters:  
19 - dependency: transitive  
20 - description:  
21 - name: characters  
22 - url: "https://pub.dartlang.org"  
23 - source: hosted  
24 - version: "1.0.0"  
25 - charcode:  
26 - dependency: transitive  
27 - description:  
28 - name: charcode  
29 - url: "https://pub.dartlang.org"  
30 - source: hosted  
31 - version: "1.1.3"  
32 - clock:  
33 - dependency: transitive  
34 - description:  
35 - name: clock  
36 - url: "https://pub.dartlang.org"  
37 - source: hosted  
38 - version: "1.0.1"  
39 - collection:  
40 - dependency: transitive  
41 - description:  
42 - name: collection  
43 - url: "https://pub.dartlang.org"  
44 - source: hosted  
45 - version: "1.14.13"  
46 - dio:  
47 - dependency: "direct main"  
48 - description:  
49 - name: dio  
50 - url: "https://pub.dartlang.org"  
51 - source: hosted  
52 - version: "3.0.10"  
53 - fake_async:  
54 - dependency: transitive  
55 - description:  
56 - name: fake_async  
57 - url: "https://pub.dartlang.org"  
58 - source: hosted  
59 - version: "1.1.0"  
60 - flutter:  
61 - dependency: "direct main"  
62 - description: flutter  
63 - source: sdk  
64 - version: "0.0.0"  
65 - flutter_test:  
66 - dependency: "direct dev"  
67 - description: flutter  
68 - source: sdk  
69 - version: "0.0.0"  
70 - get:  
71 - dependency: "direct main"  
72 - description:  
73 - path: ".."  
74 - relative: true  
75 - source: path  
76 - version: "3.10.2"  
77 - http_parser:  
78 - dependency: transitive  
79 - description:  
80 - name: http_parser  
81 - url: "https://pub.dartlang.org"  
82 - source: hosted  
83 - version: "3.1.4"  
84 - matcher:  
85 - dependency: transitive  
86 - description:  
87 - name: matcher  
88 - url: "https://pub.dartlang.org"  
89 - source: hosted  
90 - version: "0.12.8"  
91 - meta:  
92 - dependency: transitive  
93 - description:  
94 - name: meta  
95 - url: "https://pub.dartlang.org"  
96 - source: hosted  
97 - version: "1.1.8"  
98 - path:  
99 - dependency: transitive  
100 - description:  
101 - name: path  
102 - url: "https://pub.dartlang.org"  
103 - source: hosted  
104 - version: "1.7.0"  
105 - sky_engine:  
106 - dependency: transitive  
107 - description: flutter  
108 - source: sdk  
109 - version: "0.0.99"  
110 - source_span:  
111 - dependency: transitive  
112 - description:  
113 - name: source_span  
114 - url: "https://pub.dartlang.org"  
115 - source: hosted  
116 - version: "1.7.0"  
117 - stack_trace:  
118 - dependency: transitive  
119 - description:  
120 - name: stack_trace  
121 - url: "https://pub.dartlang.org"  
122 - source: hosted  
123 - version: "1.9.5"  
124 - stream_channel:  
125 - dependency: transitive  
126 - description:  
127 - name: stream_channel  
128 - url: "https://pub.dartlang.org"  
129 - source: hosted  
130 - version: "2.0.0"  
131 - string_scanner:  
132 - dependency: transitive  
133 - description:  
134 - name: string_scanner  
135 - url: "https://pub.dartlang.org"  
136 - source: hosted  
137 - version: "1.0.5"  
138 - term_glyph:  
139 - dependency: transitive  
140 - description:  
141 - name: term_glyph  
142 - url: "https://pub.dartlang.org"  
143 - source: hosted  
144 - version: "1.1.0"  
145 - test_api:  
146 - dependency: transitive  
147 - description:  
148 - name: test_api  
149 - url: "https://pub.dartlang.org"  
150 - source: hosted  
151 - version: "0.2.17"  
152 - typed_data:  
153 - dependency: transitive  
154 - description:  
155 - name: typed_data  
156 - url: "https://pub.dartlang.org"  
157 - source: hosted  
158 - version: "1.2.0"  
159 - vector_math:  
160 - dependency: transitive  
161 - description:  
162 - name: vector_math  
163 - url: "https://pub.dartlang.org"  
164 - source: hosted  
165 - version: "2.0.8"  
166 -sdks:  
167 - dart: ">=2.9.0-14.0.dev <3.0.0"  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<module type="JAVA_MODULE" version="4">  
3 - <component name="NewModuleRootManager" inherit-compiler-output="true">  
4 - <exclude-output />  
5 - <content url="file://$MODULE_DIR$">  
6 - <excludeFolder url="file://$MODULE_DIR$/.dart_tool" />  
7 - <excludeFolder url="file://$MODULE_DIR$/.pub" />  
8 - <excludeFolder url="file://$MODULE_DIR$/build" />  
9 - <excludeFolder url="file://$MODULE_DIR$/example/.dart_tool" />  
10 - <excludeFolder url="file://$MODULE_DIR$/example/.pub" />  
11 - <excludeFolder url="file://$MODULE_DIR$/example/build" />  
12 - </content>  
13 - <orderEntry type="sourceFolder" forTests="false" />  
14 - <orderEntry type="library" name="Dart SDK" level="project" />  
15 - <orderEntry type="library" name="Dart Packages" level="project" />  
16 - </component>  
17 -</module>  
  1 +# See https://www.dartlang.org/guides/libraries/private-files
  2 +
  3 +# See https://www.dartlang.org/guides/libraries/private-files
  4 +
  5 +# Files and directories created by pub
  6 +.dart_tool/
  7 +.packages
  8 +build/
  9 +# If you're building an application, you may want to check-in your pubspec.lock
  10 +pubspec.lock
  11 +.pub/
  12 +
  13 +# Directory created by dartdoc
  14 +# If you don't generate documentation locally you can remove this line.
  15 +doc/api/
  16 +
  17 +# Avoid committing generated Javascript files:
  18 +*.dart.js
  19 +*.info.json # Produced by the --dump-info flag.
  20 +*.js # When generated by dart2js. Don't specify *.js if your
  21 + # project includes source files written in JavaScript.
  22 +*.js_
  23 +*.js.deps
  24 +*.js.map
  25 +
  26 +# Files and directories created when test or run example
  27 +example/android/local.properties
  28 +example/ios/
  29 +example/.dart_tool/
  30 +example/.packages
  31 +
  32 +# IntelliJ
  33 +*.iml
  34 +.idea/*
  35 +#.idea/workspace.xml
  36 +#.idea/tasks.xml
  37 +#.idea/gradle.xml
  38 +#.idea/assetWizardSettings.xml
  39 +#.idea/dictionaries
  40 +#.idea/libraries
  41 +#.idea/caches
  42 +
  43 +# User-specific stuff
  44 +.idea/**/workspace.xml
  45 +.idea/**/tasks.xml
  46 +.idea/**/dictionaries
  47 +.idea/**/shelf
  48 +
  49 +# Sensitive or high-churn files
  50 +.idea/**/dataSources/
  51 +.idea/**/dataSources.ids
  52 +.idea/**/dataSources.local.xml
  53 +.idea/**/sqlDataSources.xml
  54 +.idea/**/dynamic.xml
  55 +.idea/**/uiDesigner.xml
  56 +.idea/**/dbnavigator.xml
  57 +
  58 +# Gradle
  59 +.idea/**/gradle.xml
  60 +.idea/**/libraries
  61 +
  62 +# Android Studio Navigation editor temp files
  63 +.navigation/
  64 +
  65 +# Android Studio captures folder
  66 +captures/
  67 +
  68 +# External native build folder generated in Android Studio 2.2 and later
  69 +.externalNativeBuild
  70 +
  71 +### https://raw.github.com/github/gitignore/80a8803b004013d17291196825a327b9e871f009/Global/VisualStudioCode.gitignore
  72 +.vscode/*
  73 +!.vscode/settings.json
  74 +!.vscode/tasks.json
  75 +!.vscode/launch.json
  76 +!.vscode/extensions.json
  77 +
  78 +example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig
  79 +
  80 +example/macos/Flutter/ephemeral/
  81 +
  82 +example/macos/Flutter/GeneratedPluginRegistrant.swift
  1 +MIT License
  2 +
  3 +Copyright (c) 2019 Jonny Borges
  4 +
  5 +Permission is hereby granted, free of charge, to any person obtaining a copy
  6 +of this software and associated documentation files (the "Software"), to deal
  7 +in the Software without restriction, including without limitation the rights
  8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9 +copies of the Software, and to permit persons to whom the Software is
  10 +furnished to do so, subject to the following conditions:
  11 +
  12 +The above copyright notice and this permission notice shall be included in all
  13 +copies or substantial portions of the Software.
  14 +
  15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21 +SOFTWARE.
  1 +gradle-wrapper.jar
  2 +/.gradle
  3 +/captures/
  4 +/gradlew
  5 +/gradlew.bat
  6 +/local.properties
  7 +GeneratedPluginRegistrant.java
  8 +
  9 +# Remember to never publicly share your keystore.
  10 +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
  11 +key.properties
  1 +package getx.demo.app.example
  2 +
  3 +import io.flutter.embedding.android.FlutterActivity
  4 +
  5 +class MainActivity: FlutterActivity() {
  6 +}
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:get/get.dart'; 2 import 'package:get/get.dart';
3 -  
4 import 'routes/app_pages.dart'; 3 import 'routes/app_pages.dart';
5 import 'shared/logger/logger_utils.dart'; 4 import 'shared/logger/logger_utils.dart';
6 5