roi peker

Merge remote-tracking branch 'upstream/master' into docs

Showing 126 changed files with 457 additions and 2734 deletions
@@ -6,6 +6,7 @@ labels: '' @@ -6,6 +6,7 @@ labels: ''
6 assignees: jonataslaw 6 assignees: jonataslaw
7 7
8 --- 8 ---
  9 +**ATTENTION: DO NOT USE THIS FIELD TO ASK SUPPORT QUESTIONS. USE THE PLATFORM CHANNELS FOR THIS. THIS SPACE IS DEDICATED ONLY FOR BUGS DESCRIPTION.**
9 **Fill in the template. Issues that do not respect the model will be closed.** 10 **Fill in the template. Issues that do not respect the model will be closed.**
10 11
11 **Describe the bug** 12 **Describe the bug**
@@ -27,8 +28,8 @@ If applicable, add screenshots to help explain your problem. @@ -27,8 +28,8 @@ If applicable, add screenshots to help explain your problem.
27 **Flutter Version:** 28 **Flutter Version:**
28 Enter the version of the Flutter you are using 29 Enter the version of the Flutter you are using
29 30
30 -**Get Version:**  
31 -Enter the version of the Get you are using 31 +**Getx Version:**
  32 +Enter the version of the Getx you are using
32 33
33 **Describe on which device you found the bug:** 34 **Describe on which device you found the bug:**
34 ex: Moto z2 - Android. 35 ex: Moto z2 - Android.
@@ -6,6 +6,7 @@ labels: '' @@ -6,6 +6,7 @@ labels: ''
6 assignees: '' 6 assignees: ''
7 7
8 --- 8 ---
  9 +**ATTENTION: DO NOT USE THIS FIELD TO ASK SUPPORT QUESTIONS. USE THE PLATFORM CHANNELS FOR THIS. THIS SPACE IS DEDICATED ONLY FOR FEATURE REQUESTS**
9 10
10 **Is your feature request related to a problem? Please describe.** 11 **Is your feature request related to a problem? Please describe.**
11 A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
1 -## [3.6.3]  
2 -- Fix onStart called null on tests 1 +## [3.7.0]
  2 +- Added: RxSet. Sets can now also be reactive.
  3 +- Added isDesktop/isMobile (@roipeker)
  4 +- Improve GetPlatform: It is now possible to know which device the user is using if GetPlatform.isWeb is true.
  5 +context.responsiveValue used device orientation based on web and non-web applications. Now it checks if it is a desktop application (web or desktop application) to do the responsiveness calculation. (@roipeker)
  6 +- Change: The documentation previously stated that Iterables should not access the ".value" property.
  7 +However, many users did not pay attention to this fact, and ended up generating unnecessary issues and bugs in their application.
  8 +In this version, we focus on code security. Now ".value" is protected, so it cannot be accessed externally by Lists, Maps or Sets.
  9 +- Change: Observable lists are now Dart Lists.
  10 +There is no difference in your use:
  11 +`RxList list = [].obs;`
  12 +And you use
  13 +`List list = [].obs;`
  14 +- Change: You do not need to access the ".value" property of primitives.
  15 +For Strings you need interpolation.
  16 +For num, int, double, you will have the normal operators, and use it as dart types.
  17 +This way, `.value` can be used exclusively in ModelClasses.
  18 +Example:
  19 +
  20 +```dart
  21 +var name = "Jonny" .obs;
  22 +// usage:
  23 +Text ("$name");
  24 +
  25 +var count = 0.obs;
  26 +// usage:
  27 +increment() => count ++;
  28 +Text("$count");
  29 +```
  30 +
  31 +Thus: List, Map, Set, num, int, double and String, as of this release, will no longer use the .value property.
  32 +
  33 +NOTE:
  34 +The changes were not break changes, however, you may have missed the details of the documentation, so if you faced the message: "The member 'value' can only be used within instance members of subclasses of 'rx_list.dart' "you just need to remove the" .value "property from your list, and everything will work as planned.
  35 +The same goes for Maps and Sets.
3 36
4 ## [3.6.2] 37 ## [3.6.2]
5 - Fix more formatting issues 38 - Fix more formatting issues
@@ -90,7 +90,7 @@ import 'package:get/get.dart'; @@ -90,7 +90,7 @@ import 'package:get/get.dart';
90 90
91 # Proyecto Counter no GetX 91 # Proyecto Counter no GetX
92 92
93 -Vea una explicación más detallada de la administración del estado [aquí](./docs/es_ES/state_management.md). Allí verá más ejemplos y también la diferencia entre el Gestión del Estado simple y el Gestión del Estado reactivo 93 +Vea una explicación más detallada de la administración del estado [aquí](./documentation/es_ES/state_management.md). Allí verá más ejemplos y también la diferencia entre el Gestión del Estado simple y el Gestión del Estado reactivo
94 94
95 El proyecto "contador" creado por defecto en un nuevo proyecto en Flutter tiene más de 100 líneas (con comentarios). Para mostrar el poder de GetX, demostraré cómo hacer un "contador" cambiando el estado con cada clic, cambiando de página y compartiendo el estado entre pantallas, todo de manera organizada, separando la vista de la lógica de negocio, SOLO 26 LÍNEAS DE CÓDIGO INCLUIDOS COMENTARIOS. 95 El proyecto "contador" creado por defecto en un nuevo proyecto en Flutter tiene más de 100 líneas (con comentarios). Para mostrar el poder de GetX, demostraré cómo hacer un "contador" cambiando el estado con cada clic, cambiando de página y compartiendo el estado entre pantallas, todo de manera organizada, separando la vista de la lógica de negocio, SOLO 26 LÍNEAS DE CÓDIGO INCLUIDOS COMENTARIOS.
96 96
@@ -191,7 +191,7 @@ Obx(() => Text (controller.name)); @@ -191,7 +191,7 @@ Obx(() => Text (controller.name));
191 191
192 ### Más detalles sobre la gestión del estado. 192 ### Más detalles sobre la gestión del estado.
193 193
194 -**Vea una explicación más detallada de la administración del estado [aquí](./docs/es_ES/state_management.md). Allí verá más ejemplos y también la diferencia entre el Gestión del Estado simple y el Gestión del Estado reactivo** 194 +**Vea una explicación más detallada de la administración del estado [aquí](./documentation/es_ES/state_management.md). Allí verá más ejemplos y también la diferencia entre el Gestión del Estado simple y el Gestión del Estado reactivo**
195 195
196 ### Explicación en video sobre state management 196 ### Explicación en video sobre state management
197 197
@@ -233,7 +233,7 @@ var data = await Get.to(Payment()); @@ -233,7 +233,7 @@ var data = await Get.to(Payment());
233 233
234 ### Más detalles sobre la gestión de rutas. 234 ### Más detalles sobre la gestión de rutas.
235 235
236 -**Vea una explicación más detallada de la Gestión de Rutas [aquí](./docs/es_ES/route_management.md).** 236 +**Vea una explicación más detallada de la Gestión de Rutas [aquí](./documentation/es_ES/route_management.md).**
237 237
238 ### Explicación del video 238 ### Explicación del video
239 239
@@ -277,7 +277,7 @@ Get.lazyPut<Service>(()=> ApiMock()); @@ -277,7 +277,7 @@ Get.lazyPut<Service>(()=> ApiMock());
277 277
278 ### Más detalles sobre la gestión de dependencias. 278 ### Más detalles sobre la gestión de dependencias.
279 279
280 -**Vea una explicación más detallada de la Gestión de dependencias [aquí](./docs/es_ES/dependency_management.md).** 280 +**Vea una explicación más detallada de la Gestión de dependencias [aquí](./documentation/es_ES/dependency_management.md).**
281 281
282 # Utilidades 282 # Utilidades
283 283
@@ -514,7 +514,7 @@ Ahora: @@ -514,7 +514,7 @@ Ahora:
514 ```dart 514 ```dart
515 GetMaterialApp( 515 GetMaterialApp(
516 getPages: [ 516 getPages: [
517 - GetPage(name: '/', page:()=> Home()), 517 + GetPage(name: '/', page: () => Home()),
518 ] 518 ]
519 ) 519 )
520 ``` 520 ```
@@ -29,10 +29,11 @@ @@ -29,10 +29,11 @@
29 - [More details about dependency management](#more-details-about-dependency-management) 29 - [More details about dependency management](#more-details-about-dependency-management)
30 - [How to contribute](#how-to-contribute) 30 - [How to contribute](#how-to-contribute)
31 - [Utils](#utils) 31 - [Utils](#utils)
  32 + - [Internationalization](#internationalization)
32 - [Change Theme](#change-theme) 33 - [Change Theme](#change-theme)
33 - [Other Advanced APIs](#other-advanced-apis) 34 - [Other Advanced APIs](#other-advanced-apis)
34 - [Optional Global Settings and Manual configurations](#optional-global-settings-and-manual-configurations) 35 - [Optional Global Settings and Manual configurations](#optional-global-settings-and-manual-configurations)
35 - - [Video explanation of Other GetX Features](#video-explanation-of-other-getx-features) 36 + - [Video explanation of Other GetX Features](#video-explanation-of-other-getx-features)
36 - [Breaking changes from 2.0](#breaking-changes-from-20) 37 - [Breaking changes from 2.0](#breaking-changes-from-20)
37 - [Why Getx?](#why-getx) 38 - [Why Getx?](#why-getx)
38 39
@@ -191,7 +192,7 @@ That's all. It's *that* simple. @@ -191,7 +192,7 @@ That's all. It's *that* simple.
191 192
192 ### More details about state management 193 ### More details about state management
193 194
194 -**See an more in-depth explanation of state management [here](./docs/en_US/state_management.md). There you will see more examples and also the difference between the simple stage manager and the reactive state manager** 195 +**See an more in-depth explanation of state management [here](./documentation/en_US/state_management.md). There you will see more examples and also the difference between the simple stage manager and the reactive state manager**
195 196
196 ### Video explanation about state management 197 ### Video explanation about state management
197 198
@@ -240,7 +241,7 @@ Noticed that you didn't had to use context to do any of these things? That's one @@ -240,7 +241,7 @@ Noticed that you didn't had to use context to do any of these things? That's one
240 241
241 ### More details about route management 242 ### More details about route management
242 243
243 -**Get work with named routes and also offer a lower level control over your routes! There is a in-depth documentation [here](./docs/en_US/route_management.md)** 244 +**Get work with named routes and also offer a lower level control over your routes! There is a in-depth documentation [here](./documentation/en_US/route_management.md)**
244 245
245 ### Video Explanation 246 ### Video Explanation
246 247
@@ -281,7 +282,7 @@ Text(controller.textFromApi); @@ -281,7 +282,7 @@ Text(controller.textFromApi);
281 282
282 ### More details about dependency management 283 ### More details about dependency management
283 284
284 -**See a more in-depth explanation of dependency management [here](./docs/en_US/dependency_management.md)** 285 +**See a more in-depth explanation of dependency management [here](./documentation/en_US/dependency_management.md)**
285 286
286 # How to contribute 287 # How to contribute
287 288
@@ -296,6 +297,60 @@ Text(controller.textFromApi); @@ -296,6 +297,60 @@ Text(controller.textFromApi);
296 Any contribution is welcome! 297 Any contribution is welcome!
297 298
298 # Utils 299 # Utils
  300 +## Internationalization
  301 +### Translations
  302 +Translations are kept as a simple key-value dictionary map.
  303 +To add custom translations, create a class and extend `Translations`.
  304 +```dart
  305 +import 'package:get/get.dart';
  306 +
  307 +class Messages extends Translations {
  308 + @override
  309 + Map<String, Map<String, String>> get keys => {
  310 + 'en_US': {
  311 + 'hello': 'Hello World',
  312 + },
  313 + 'de_DE': {
  314 + 'hello': 'Hallo Welt',
  315 + }
  316 + };
  317 +}
  318 +```
  319 +
  320 +#### Using translations
  321 +Just append `.tr` to the specified key and it will be translated, using the current value of `Get.locale` and `Get.fallbackLocale`.
  322 +```dart
  323 +Text('title'.tr);
  324 +```
  325 +
  326 +### Locales
  327 +Pass parameters to `GetMaterialApp` to define the locale and translations.
  328 +
  329 +```dart
  330 +return GetMaterialApp(
  331 + translations: Messages(), // your translations
  332 + locale: Locale('en', 'US'), // translations will be displayed in that locale
  333 + fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected.
  334 + supportedLocales: <Locale>[Locale('en', 'UK'), Locale('en', 'US'), Locale('de','DE')] // specify the supported locales
  335 +);
  336 +```
  337 +
  338 +#### Change locale
  339 +Call `Get.updateLocale(locale)` to update the locale. Translations then automatically use the new locale.
  340 +```dart
  341 +var locale = Locale('en', 'US');
  342 +Get.updateLocale(locale);
  343 +```
  344 +
  345 +#### System locale
  346 +To read the system locale, you could use `window.locale`.
  347 +```dart
  348 +import 'dart:ui' as ui;
  349 +
  350 +return GetMaterialApp(
  351 + locale: ui.window.locale,
  352 +);
  353 +```
299 354
300 ## Change Theme 355 ## Change Theme
301 356
@@ -572,7 +627,7 @@ Now: @@ -572,7 +627,7 @@ Now:
572 ```dart 627 ```dart
573 GetMaterialApp( 628 GetMaterialApp(
574 getPages: [ 629 getPages: [
575 - GetPage(name: '/', page:()=> Home()), 630 + GetPage(name: '/', page: () => Home()),
576 ] 631 ]
577 ) 632 )
578 ``` 633 ```
@@ -176,7 +176,7 @@ Obx (() => Text (controller.name)); @@ -176,7 +176,7 @@ Obx (() => Text (controller.name));
176 To wszystko. *Proste*, co nie? 176 To wszystko. *Proste*, co nie?
177 177
178 ### Bardziej szczegółowo o menadżerze stanu 178 ### Bardziej szczegółowo o menadżerze stanu
179 -**Zobacz bardziej szczegółowe wytłumaczenie menadz=żera sranu [tutaj](./docs/en_US/state_management.md). Znajdują się tam przykłady jak o różnice między prostym menadżerem stanu oraz reaktywnym** 179 +**Zobacz bardziej szczegółowe wytłumaczenie menadz=żera sranu [tutaj](./documentation/en_US/state_management.md). Znajdują się tam przykłady jak o różnice między prostym menadżerem stanu oraz reaktywnym**
180 180
181 ### Video tłumaczące użycie menadżera stanu 181 ### Video tłumaczące użycie menadżera stanu
182 182
@@ -237,7 +237,7 @@ Zobacz, ze do żadnej z tych operacji nie potrzebowałeś contextu. Jest to jedn @@ -237,7 +237,7 @@ Zobacz, ze do żadnej z tych operacji nie potrzebowałeś contextu. Jest to jedn
237 237
238 ### Więcej o routach 238 ### Więcej o routach
239 239
240 -**Get używa named routes i także oferuje niskopoziomową obsługę routów! Zobacz bardziej szczegółową dokumentacje [tutaj](./docs/en_US/route_management.md)** 240 +**Get używa named routes i także oferuje niskopoziomową obsługę routów! Zobacz bardziej szczegółową dokumentacje [tutaj](./documentation/en_US/route_management.md)**
241 241
242 ### Video tłumaczące użycie 242 ### Video tłumaczące użycie
243 243
@@ -274,7 +274,7 @@ Text(controller.textFromApi); @@ -274,7 +274,7 @@ Text(controller.textFromApi);
274 ``` 274 ```
275 ### Bardziej szczegółowo o menadżerze dependencies 275 ### Bardziej szczegółowo o menadżerze dependencies
276 276
277 -**Zobzcz więcej w dokumentacji [tutaj](./docs/en_US/dependency_management.md)** 277 +**Zobzcz więcej w dokumentacji [tutaj](./documentation/en_US/dependency_management.md)**
278 278
279 # Jak włożyć coś od siebie 279 # Jak włożyć coś od siebie
280 280
@@ -518,7 +518,7 @@ Teraz: @@ -518,7 +518,7 @@ Teraz:
518 ```dart 518 ```dart
519 GetMaterialApp( 519 GetMaterialApp(
520 getPages: [ 520 getPages: [
521 - GetPage(name: '/', page:()=> Home()), 521 + GetPage(name: '/', page: () => Home()),
522 ] 522 ]
523 ) 523 )
524 ``` 524 ```
@@ -191,7 +191,7 @@ Só isso. É *simples assim*; @@ -191,7 +191,7 @@ Só isso. É *simples assim*;
191 191
192 ### Mais detalhes sobre gerenciamento de estado 192 ### Mais detalhes sobre gerenciamento de estado
193 193
194 -**Veja uma explicação mais completa do gerenciamento de estado [aqui](./docs/pt_BR/state_management.md). Lá terá mais exemplos e também a diferença do simple state manager do reactive state manager** 194 +**Veja uma explicação mais completa do gerenciamento de estado [aqui](./documentation/pt_BR/state_management.md). Lá terá mais exemplos e também a diferença do simple state manager do reactive state manager**
195 195
196 ### Explicação em video do gerenciamento de estado 196 ### Explicação em video do gerenciamento de estado
197 197
@@ -235,7 +235,7 @@ Notou que você não precisou usar `context` para fazer nenhuma dessas coisas? E @@ -235,7 +235,7 @@ Notou que você não precisou usar `context` para fazer nenhuma dessas coisas? E
235 235
236 ### Mais detalhes sobre gerenciamento de rotas 236 ### Mais detalhes sobre gerenciamento de rotas
237 237
238 -**GetX funciona com rotas nomeadas também! Veja uma explicação mais completa do gerenciamento de rotas [aqui](./docs/pt_BR/route_management.md)** 238 +**GetX funciona com rotas nomeadas também! Veja uma explicação mais completa do gerenciamento de rotas [aqui](./documentation/pt_BR/route_management.md)**
239 239
240 ### Explicação em video do gerenciamento de rotas 240 ### Explicação em video do gerenciamento de rotas
241 241
@@ -283,7 +283,7 @@ Get.lazyPut<Service>(()=> ApiMock()); @@ -283,7 +283,7 @@ Get.lazyPut<Service>(()=> ApiMock());
283 283
284 ### Mais detalhes sobre gerenciamento de dependências 284 ### Mais detalhes sobre gerenciamento de dependências
285 285
286 -**Veja uma explicação mais completa do gerenciamento de dependência [aqui](./docs/pt_BR/dependency_management.md)** 286 +**Veja uma explicação mais completa do gerenciamento de dependência [aqui](./documentation/pt_BR/dependency_management.md)**
287 287
288 # Como contribuir 288 # Como contribuir
289 289
@@ -549,7 +549,7 @@ Agora: @@ -549,7 +549,7 @@ Agora:
549 ```dart 549 ```dart
550 GetMaterialApp( 550 GetMaterialApp(
551 getPages: [ 551 getPages: [
552 - GetPage(name: '/', page:()=> Home()), 552 + GetPage(name: '/', page: () => Home()),
553 ] 553 ]
554 ) 554 )
555 ``` 555 ```
1 -# benchmarks  
2 -A repository to benchmark Flutter libs.  
3 -Creators of the tested libs can suggest improvements, as long as they follow the same design structure.  
4 -  
5 -# 1- State Managers  
6 -  
7 -![](benchmark.png)  
8 -  
9 -The idle application consumes 4.288k of ram.  
10 -Items were added dynamically to a ListView.  
11 -The amount of RAM was measured after the test, and the following calculation was made:  
12 -Number of RAM consumed by the app after testing with the state manager - RAM in idle state without any state manager.  
13 -  
14 -In addition to the RAM calculation, the size of the apk was also observed after compilation. And we had the following results:  
15 -  
16 -- flutter_bloc: 8.3mb  
17 -- mobx: 8.3mb  
18 -- provider: 8.3mb  
19 -- redux: 8.2mb  
20 -- get: 8.2mb  
21 -- getx: 8.2mb  
22 -  
23 -The creators of flutter_bloc and provider made changes to use their library. If you want to make changes (within the scope of the project, without eliminating classes), you can do so by offering a PR.  
1 -# Miscellaneous  
2 -*.class  
3 -*.log  
4 -*.pyc  
5 -*.swp  
6 -.DS_Store  
7 -.atom/  
8 -.buildlog/  
9 -.history  
10 -.svn/  
11 -  
12 -# IntelliJ related  
13 -*.iml  
14 -*.ipr  
15 -*.iws  
16 -.idea/  
17 -  
18 -# The .vscode folder contains launch configuration and tasks you configure in  
19 -# VS Code which you may wish to be included in version control, so this line  
20 -# is commented out by default.  
21 -#.vscode/  
22 -  
23 -# Flutter/Dart/Pub related  
24 -**/doc/api/  
25 -**/ios/Flutter/.last_build_id  
26 -.dart_tool/  
27 -.flutter-plugins  
28 -.flutter-plugins-dependencies  
29 -.packages  
30 -.pub-cache/  
31 -.pub/  
32 -/build/  
33 -  
34 -# Web related  
35 -lib/generated_plugin_registrant.dart  
36 -  
37 -# Symbolication related  
38 -app.*.symbols  
39 -  
40 -# Obfuscation related  
41 -app.*.map.json  
42 -  
43 -# Exceptions to above rules.  
44 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages  
1 -# Flutter State Management  
1 -def localProperties = new Properties()  
2 -def localPropertiesFile = rootProject.file('local.properties')  
3 -if (localPropertiesFile.exists()) {  
4 - localPropertiesFile.withReader('UTF-8') { reader ->  
5 - localProperties.load(reader)  
6 - }  
7 -}  
8 -  
9 -def flutterRoot = localProperties.getProperty('flutter.sdk')  
10 -if (flutterRoot == null) {  
11 - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")  
12 -}  
13 -  
14 -apply plugin: 'com.android.application'  
15 -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"  
16 -  
17 -android {  
18 - compileSdkVersion 29  
19 -  
20 - lintOptions {  
21 - disable 'InvalidPackage'  
22 - }  
23 -  
24 - defaultConfig {  
25 - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).  
26 - applicationId "de.udos.flutterstatemanagement"  
27 - minSdkVersion 16  
28 - targetSdkVersion 29  
29 - versionCode 1  
30 - versionName "1.0"  
31 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"  
32 - }  
33 -  
34 - buildTypes {  
35 - release {  
36 - // TODO: Add your own signing config for the release build.  
37 - // Signing with the debug keys for now, so `flutter run --release` works.  
38 - signingConfig signingConfigs.debug  
39 - }  
40 - }  
41 -}  
42 -  
43 -flutter {  
44 - source '../..'  
45 -}  
46 -  
47 -dependencies {  
48 - testImplementation 'junit:junit:4.12'  
49 - androidTestImplementation 'androidx.test.ext:junit:1.1.1'  
50 - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'  
51 -}  
1 -<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
2 - package="de.udos.benchmarks">  
3 - <!-- Flutter needs it to communicate with the running application  
4 - to allow setting breakpoints, to provide hot reload, etc.  
5 - -->  
6 - <uses-permission android:name="android.permission.INTERNET"/>  
7 -</manifest>  
1 -<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
2 - package="de.udos.benchmarks">  
3 -  
4 - <!-- The INTERNET permission is required for development. Specifically,  
5 - flutter needs it to communicate with the running application  
6 - to allow setting breakpoints, to provide hot reload, etc.  
7 - -->  
8 - <uses-permission android:name="android.permission.INTERNET"/>  
9 -  
10 - <!-- io.flutter.app.FlutterApplication is an android.app.Application that  
11 - calls FlutterMain.startInitialization(this); in its onCreate method.  
12 - In most cases you can leave this as-is, but you if you want to provide  
13 - additional functionality it is fine to subclass or reimplement  
14 - FlutterApplication and put your custom class here. -->  
15 - <application  
16 - android:name="io.flutter.app.FlutterApplication"  
17 - android:label="benckmark"  
18 - android:icon="@mipmap/ic_launcher">  
19 - <activity  
20 - android:name=".MainActivity"  
21 - android:launchMode="singleTop"  
22 - android:theme="@style/LaunchTheme"  
23 - android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"  
24 - android:hardwareAccelerated="true"  
25 - android:windowSoftInputMode="adjustResize">  
26 - <!-- This keeps the window background of the activity showing  
27 - until Flutter renders its first frame. It can be removed if  
28 - there is no splash screen (such as the default splash screen  
29 - defined in @style/LaunchTheme). -->  
30 - <meta-data  
31 - android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"  
32 - android:value="true" />  
33 - <intent-filter>  
34 - <action android:name="android.intent.action.MAIN"/>  
35 - <category android:name="android.intent.category.LAUNCHER"/>  
36 - </intent-filter>  
37 - </activity>  
38 - </application>  
39 -</manifest>  
1 -package de.udos.benchmarks;  
2 -  
3 -import android.os.Bundle;  
4 -import io.flutter.app.FlutterActivity;  
5 -import io.flutter.plugins.GeneratedPluginRegistrant;  
6 -  
7 -public class MainActivity extends FlutterActivity {  
8 - @Override  
9 - protected void onCreate(Bundle savedInstanceState) {  
10 - super.onCreate(savedInstanceState);  
11 - GeneratedPluginRegistrant.registerWith(this);  
12 - }  
13 -}  
1 -package io.flutter.plugins;  
2 -  
3 -import io.flutter.plugin.common.PluginRegistry;  
4 -  
5 -/**  
6 - * Generated file. Do not edit.  
7 - */  
8 -public final class GeneratedPluginRegistrant {  
9 - public static void registerWith(PluginRegistry registry) {  
10 - if (alreadyRegisteredWith(registry)) {  
11 - return;  
12 - }  
13 - }  
14 -  
15 - private static boolean alreadyRegisteredWith(PluginRegistry registry) {  
16 - final String key = GeneratedPluginRegistrant.class.getCanonicalName();  
17 - if (registry.hasPlugin(key)) {  
18 - return true;  
19 - }  
20 - registry.registrarFor(key);  
21 - return false;  
22 - }  
23 -}  
1 -package de.udos.benchmarks  
2 -  
3 -import io.flutter.embedding.android.FlutterActivity  
4 -  
5 -class MainActivity: FlutterActivity() {  
6 -}  
1 -package de.udos.benchs  
2 -  
3 -import io.flutter.embedding.android.FlutterActivity  
4 -  
5 -class MainActivity: FlutterActivity() {  
6 -}  
1 -<?xml version="1.0" encoding="utf-8"?>  
2 -<!-- Modify this file to customize your launch splash screen -->  
3 -<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
4 - <item android:drawable="@android:color/white" />  
5 -  
6 - <!-- You can insert your own image assets here -->  
7 - <!-- <item>  
8 - <bitmap  
9 - android:gravity="center"  
10 - android:src="@mipmap/launch_image" />  
11 - </item> -->  
12 -</layer-list>  
1 -<?xml version="1.0" encoding="utf-8"?>  
2 -<resources>  
3 - <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">  
4 - <!-- Show a splash screen on the activity. Automatically removed when  
5 - Flutter draws its first frame -->  
6 - <item name="android:windowBackground">@drawable/launch_background</item>  
7 - </style>  
8 -</resources>  
1 -<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
2 - package="de.udos.benchmarks">  
3 - <!-- Flutter needs it to communicate with the running application  
4 - to allow setting breakpoints, to provide hot reload, etc.  
5 - -->  
6 - <uses-permission android:name="android.permission.INTERNET"/>  
7 -</manifest>  
1 -buildscript {  
2 - repositories {  
3 - google()  
4 - jcenter()  
5 - }  
6 -  
7 - dependencies {  
8 - classpath 'com.android.tools.build:gradle:3.5.3'  
9 - }  
10 -}  
11 -  
12 -allprojects {  
13 - repositories {  
14 - google()  
15 - jcenter()  
16 - }  
17 -}  
18 -  
19 -rootProject.buildDir = '../build'  
20 -subprojects {  
21 - project.buildDir = "${rootProject.buildDir}/${project.name}"  
22 -}  
23 -subprojects {  
24 - project.evaluationDependsOn(':app')  
25 -}  
26 -  
27 -task clean(type: Delete) {  
28 - delete rootProject.buildDir  
29 -}  
1 -org.gradle.jvmargs=-Xmx1536M  
2 -android.enableR8=true  
3 -android.useAndroidX=true  
4 -android.enableJetifier=true  
1 -#Sat Jan 11 20:55:27 CET 2020  
2 -distributionBase=GRADLE_USER_HOME  
3 -distributionPath=wrapper/dists  
4 -zipStoreBase=GRADLE_USER_HOME  
5 -zipStorePath=wrapper/dists  
6 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip  
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 -sdk.dir=/home/jonny/Android/Sdk  
2 -flutter.sdk=/opt/flutter  
3 -flutter.buildMode=profile  
1 -include ':app'  
2 -  
3 -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()  
4 -  
5 -def plugins = new Properties()  
6 -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')  
7 -if (pluginsFile.exists()) {  
8 - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }  
9 -}  
10 -  
11 -plugins.each { name, path ->  
12 - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()  
13 - include ":$name"  
14 - project(":$name").projectDir = pluginDirectory  
15 -}  
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>en</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>8.0</string>  
25 -</dict>  
26 -</plist>  
1 -// This is a generated file; do not edit or check into version control.  
2 -FLUTTER_ROOT=/opt/flutter  
3 -FLUTTER_APPLICATION_PATH=/home/jonny/Área de trabalho/getx/benchmark/state_managers  
4 -FLUTTER_TARGET=lib/main.dart  
5 -FLUTTER_BUILD_DIR=build  
6 -SYMROOT=${SOURCE_ROOT}/../build/ios  
7 -OTHER_LDFLAGS=$(inherited) -framework Flutter  
8 -FLUTTER_FRAMEWORK_DIR=/opt/flutter/bin/cache/artifacts/engine/ios  
9 -FLUTTER_BUILD_NAME=1.0.0  
10 -FLUTTER_BUILD_NUMBER=1  
11 -DART_OBFUSCATION=false  
12 -TRACK_WIDGET_CREATION=false  
13 -TREE_SHAKE_ICONS=false  
14 -PACKAGE_CONFIG=.packages  
1 -#!/bin/sh  
2 -# This is a generated file; do not edit or check into version control.  
3 -export "FLUTTER_ROOT=/opt/flutter"  
4 -export "FLUTTER_APPLICATION_PATH=/home/jonny/Área de trabalho/getx/benchmark/state_managers"  
5 -export "FLUTTER_TARGET=lib/main.dart"  
6 -export "FLUTTER_BUILD_DIR=build"  
7 -export "SYMROOT=${SOURCE_ROOT}/../build/ios"  
8 -export "OTHER_LDFLAGS=$(inherited) -framework Flutter"  
9 -export "FLUTTER_FRAMEWORK_DIR=/opt/flutter/bin/cache/artifacts/engine/ios"  
10 -export "FLUTTER_BUILD_NAME=1.0.0"  
11 -export "FLUTTER_BUILD_NUMBER=1"  
12 -export "DART_OBFUSCATION=false"  
13 -export "TRACK_WIDGET_CREATION=false"  
14 -export "TREE_SHAKE_ICONS=false"  
15 -export "PACKAGE_CONFIG=.packages"  
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 = "0910"  
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 - language = ""  
30 - shouldUseLaunchSchemeArgsEnv = "YES">  
31 - <Testables>  
32 - </Testables>  
33 - <MacroExpansion>  
34 - <BuildableReference  
35 - BuildableIdentifier = "primary"  
36 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
37 - BuildableName = "Runner.app"  
38 - BlueprintName = "Runner"  
39 - ReferencedContainer = "container:Runner.xcodeproj">  
40 - </BuildableReference>  
41 - </MacroExpansion>  
42 - <AdditionalOptions>  
43 - </AdditionalOptions>  
44 - </TestAction>  
45 - <LaunchAction  
46 - buildConfiguration = "Debug"  
47 - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"  
48 - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"  
49 - language = ""  
50 - launchStyle = "0"  
51 - useCustomWorkingDirectory = "NO"  
52 - ignoresPersistentStateOnLaunch = "NO"  
53 - debugDocumentVersioning = "YES"  
54 - debugServiceExtension = "internal"  
55 - allowLocationSimulation = "YES">  
56 - <BuildableProductRunnable  
57 - runnableDebuggingMode = "0">  
58 - <BuildableReference  
59 - BuildableIdentifier = "primary"  
60 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
61 - BuildableName = "Runner.app"  
62 - BlueprintName = "Runner"  
63 - ReferencedContainer = "container:Runner.xcodeproj">  
64 - </BuildableReference>  
65 - </BuildableProductRunnable>  
66 - <AdditionalOptions>  
67 - </AdditionalOptions>  
68 - </LaunchAction>  
69 - <ProfileAction  
70 - buildConfiguration = "Release"  
71 - shouldUseLaunchSchemeArgsEnv = "YES"  
72 - savedToolIdentifier = ""  
73 - useCustomWorkingDirectory = "NO"  
74 - debugDocumentVersioning = "YES">  
75 - <BuildableProductRunnable  
76 - runnableDebuggingMode = "0">  
77 - <BuildableReference  
78 - BuildableIdentifier = "primary"  
79 - BlueprintIdentifier = "97C146ED1CF9000F007C117D"  
80 - BuildableName = "Runner.app"  
81 - BlueprintName = "Runner"  
82 - ReferencedContainer = "container:Runner.xcodeproj">  
83 - </BuildableReference>  
84 - </BuildableProductRunnable>  
85 - </ProfileAction>  
86 - <AnalyzeAction  
87 - buildConfiguration = "Debug">  
88 - </AnalyzeAction>  
89 - <ArchiveAction  
90 - buildConfiguration = "Release"  
91 - revealArchiveInOrganizer = "YES">  
92 - </ArchiveAction>  
93 -</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 <Flutter/Flutter.h>  
2 -#import <UIKit/UIKit.h>  
3 -  
4 -@interface AppDelegate : FlutterAppDelegate  
5 -  
6 -@end  
1 -#include "AppDelegate.h"  
2 -#include "GeneratedPluginRegistrant.h"  
3 -  
4 -@implementation AppDelegate  
5 -  
6 -- (BOOL)application:(UIApplication *)application  
7 - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
8 - [GeneratedPluginRegistrant registerWithRegistry:self];  
9 - // Override point for customization after application launch.  
10 - return [super application:application didFinishLaunchingWithOptions:launchOptions];  
11 -}  
12 -  
13 -@end  
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>en</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>benckmark</string>  
15 - <key>CFBundlePackageType</key>  
16 - <string>APPL</string>  
17 - <key>CFBundleShortVersionString</key>  
18 - <string>1.0</string>  
19 - <key>CFBundleSignature</key>  
20 - <string>????</string>  
21 - <key>CFBundleVersion</key>  
22 - <string>1</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 <Flutter/Flutter.h>  
2 -#import <UIKit/UIKit.h>  
3 -#import "AppDelegate.h"  
4 -  
5 -int main(int argc, char* argv[]) {  
6 - @autoreleasepool {  
7 - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));  
8 - }  
9 -}  
1 -import 'dart:async';  
2 -  
3 -import 'package:bloc/bloc.dart';  
4 -import 'package:benckmark/item.dart';  
5 -  
6 -part 'items_event.dart';  
7 -  
8 -class ItemsBloc extends Bloc<ItemsEvent, List<Item>> {  
9 - ItemsBloc() {  
10 - Timer.periodic(const Duration(milliseconds: 500), (timer) {  
11 - add(AddItemEvent(Item(title: DateTime.now().toString())));  
12 - if (state.length == 10) {  
13 - timer.cancel();  
14 - print("It's done. Print now!");  
15 - }  
16 - });  
17 - }  
18 -  
19 - @override  
20 - List<Item> get initialState => sampleItems;  
21 -  
22 - @override  
23 - Stream<List<Item>> mapEventToState(ItemsEvent event) async* {  
24 - if (event is AddItemEvent) {  
25 - yield List.from(state)..add(event.item);  
26 - }  
27 - }  
28 -}  
1 -part of 'items_bloc.dart';  
2 -  
3 -abstract class ItemsEvent {}  
4 -  
5 -class AddItemEvent extends ItemsEvent {  
6 - AddItemEvent(this.item);  
7 -  
8 - final Item item;  
9 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:flutter_bloc/flutter_bloc.dart';  
3 -import 'package:benckmark/item.dart';  
4 -import 'package:benckmark/_bloc_lib/_blocs/items/items_bloc.dart';  
5 -  
6 -class App extends StatelessWidget {  
7 - Widget build(BuildContext context) {  
8 - return MaterialApp(  
9 - title: 'BLoC Lib Sample',  
10 - theme: ThemeData(primarySwatch: Colors.blue),  
11 - home: BlocProvider(  
12 - create: (_) => ItemsBloc(),  
13 - child: Page(title: 'BLoC Lib Sample'),  
14 - ),  
15 - );  
16 - }  
17 -}  
18 -  
19 -class Page extends StatelessWidget {  
20 - const Page({Key key, this.title}) : super(key: key);  
21 -  
22 - final String title;  
23 -  
24 - @override  
25 - Widget build(BuildContext context) {  
26 - return Scaffold(  
27 - appBar: AppBar(title: Text(title)),  
28 - body: BlocBuilder<ItemsBloc, List<Item>>(  
29 - builder: (context, items) {  
30 - return ListView.builder(  
31 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
32 - itemCount: items.length,  
33 - itemBuilder: (context, index) {  
34 - return ListTile(title: Text(items[index].title));  
35 - },  
36 - );  
37 - },  
38 - ),  
39 - );  
40 - }  
41 -}  
1 -import 'dart:async';  
2 -  
3 -import 'package:benckmark/item.dart';  
4 -import 'package:rxdart/rxdart.dart';  
5 -  
6 -class AddItemEvent {  
7 - final Item item;  
8 -  
9 - AddItemEvent(this.item);  
10 -}  
11 -  
12 -class ItemsBloc {  
13 - final StreamController<dynamic> _itemsEventController = StreamController();  
14 -  
15 - StreamSink<dynamic> get _itemsEventSink => _itemsEventController.sink;  
16 -  
17 - final BehaviorSubject<List<Item>> _itemsStateSubject =  
18 - BehaviorSubject.seeded(sampleItems);  
19 -  
20 - StreamSink<List<Item>> get _itemsStateSink => _itemsStateSubject.sink;  
21 -  
22 - ValueStream<List<Item>> get items => _itemsStateSubject.stream;  
23 -  
24 - List<StreamSubscription<dynamic>> _subscriptions;  
25 -  
26 - ItemsBloc() {  
27 - _subscriptions = <StreamSubscription<dynamic>>[  
28 - _itemsEventController.stream.listen(_mapEventToState)  
29 - ];  
30 - }  
31 -  
32 - dispose() {  
33 - _subscriptions.forEach((subscription) => subscription.cancel());  
34 - _itemsStateSubject.close();  
35 - _itemsEventController.close();  
36 - }  
37 -  
38 - void addItem(Item item) {  
39 - _itemsEventSink.add(AddItemEvent(item));  
40 - }  
41 -  
42 - void _mapEventToState(dynamic event) {  
43 - if (event is AddItemEvent) {  
44 - _itemsStateSink.add([...items.value, event.item]);  
45 - }  
46 - }  
47 -}  
1 -import 'package:flutter/widgets.dart';  
2 -  
3 -import '_bloc.dart';  
4 -  
5 -class ItemsBlocProvider extends InheritedWidget {  
6 - final ItemsBloc bloc;  
7 -  
8 - ItemsBlocProvider({  
9 - Key key,  
10 - Widget child,  
11 - @required this.bloc,  
12 - }) : super(key: key, child: child);  
13 -  
14 - @override  
15 - bool updateShouldNotify(InheritedWidget oldWidget) => true;  
16 -  
17 - static ItemsBloc of(BuildContext context) {  
18 - final provider =  
19 - context.dependOnInheritedWidgetOfExactType<ItemsBlocProvider>();  
20 -  
21 - return provider.bloc;  
22 - }  
23 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:flutter/scheduler.dart';  
3 -import 'package:benckmark/item.dart';  
4 -  
5 -import '_bloc.dart';  
6 -import '_provider.dart';  
7 -  
8 -class App extends StatelessWidget {  
9 - final ItemsBloc itemsBloc = ItemsBloc();  
10 -  
11 - @override  
12 - Widget build(BuildContext context) {  
13 - return ItemsBlocProvider(  
14 - bloc: itemsBloc,  
15 - child: MaterialApp(  
16 - title: 'BLoC Sample',  
17 - theme: ThemeData(  
18 - primarySwatch: Colors.blue,  
19 - ),  
20 - home: Page(title: 'BLoC Sample'),  
21 - ),  
22 - );  
23 - }  
24 -}  
25 -  
26 -class Page extends StatefulWidget {  
27 - Page({Key key, this.title}) : super(key: key);  
28 -  
29 - final String title;  
30 -  
31 - @override  
32 - _PageState createState() => _PageState();  
33 -}  
34 -  
35 -class _PageState extends State<Page> {  
36 - @override  
37 - void initState() {  
38 - SchedulerBinding.instance.addPostFrameCallback((timeStamp) async {  
39 - for (int i = 0; i < 10; i++) {  
40 - await Future.delayed(Duration(milliseconds: 500));  
41 - ItemsBlocProvider.of(context)  
42 - .addItem(Item(title: DateTime.now().toString()));  
43 - }  
44 - print("It's done. Print now!");  
45 - });  
46 -  
47 - super.initState();  
48 - }  
49 -  
50 - @override  
51 - Widget build(BuildContext context) {  
52 - return Scaffold(  
53 - appBar: AppBar(  
54 - title: Text(widget.title),  
55 - ),  
56 - body: ListViewWidget(),  
57 - );  
58 - }  
59 -}  
60 -  
61 -class ListViewWidget extends StatelessWidget {  
62 - @override  
63 - Widget build(BuildContext context) {  
64 - final ItemsBloc itemsBloc = ItemsBlocProvider.of(context);  
65 -  
66 - return StreamBuilder<List<Item>>(  
67 - stream: itemsBloc.items,  
68 - builder: (context, snapshot) {  
69 - final items = snapshot.data;  
70 - return ListView.builder(  
71 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
72 - itemCount: items is List<Item> ? items.length : 0,  
73 - itemBuilder: (context, index) {  
74 - return ListTile(  
75 - title: Text(items[index].title),  
76 - );  
77 - },  
78 - );  
79 - },  
80 - );  
81 - }  
82 -}  
1 -import 'package:benckmark/item.dart';  
2 -import 'package:get/get.dart';  
3 -  
4 -class Controller extends GetController {  
5 - @override  
6 - onInit() async {  
7 - for (int i = 0; i < 10; i++) {  
8 - await Future.delayed(Duration(milliseconds: 500));  
9 - addItem(Item(title: DateTime.now().toString()));  
10 - }  
11 - print("It's done. Print now!");  
12 - super.onInit();  
13 - }  
14 -  
15 - final items = List<Item>.of(sampleItems);  
16 -  
17 - void addItem(Item item) {  
18 - items.add(item);  
19 - update();  
20 - }  
21 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:benckmark/_get/_store.dart';  
3 -import 'package:get/get.dart';  
4 -  
5 -class App extends StatelessWidget {  
6 - @override  
7 - Widget build(BuildContext context) {  
8 - return MaterialApp(  
9 - title: 'Get Sample',  
10 - theme: ThemeData(  
11 - primarySwatch: Colors.blue,  
12 - ),  
13 - home: Page(title: 'Get Sample'),  
14 - );  
15 - }  
16 -}  
17 -  
18 -class Page extends StatelessWidget {  
19 - Page({  
20 - Key key,  
21 - this.title,  
22 - }) : super(key: key);  
23 -  
24 - final String title;  
25 -  
26 - @override  
27 - Widget build(BuildContext context) {  
28 - return Scaffold(  
29 - appBar: AppBar(  
30 - title: Text(title),  
31 - ),  
32 - body: ListViewWidget(),  
33 - );  
34 - }  
35 -}  
36 -  
37 -class ListViewWidget extends StatelessWidget {  
38 - @override  
39 - Widget build(BuildContext context) {  
40 - return GetBuilder<Controller>(  
41 - init: Controller(),  
42 - global: false,  
43 - builder: (_) => ListView.builder(  
44 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
45 - itemCount: _.items.length,  
46 - itemBuilder: (context, index) {  
47 - return ListTile(  
48 - title: Text(_.items[index].title),  
49 - );  
50 - }));  
51 - }  
52 -}  
1 -import 'package:benckmark/item.dart';  
2 -import 'package:get/get.dart';  
3 -  
4 -class Controller extends RxController {  
5 - Controller() {  
6 - onInit();  
7 - }  
8 - final items = sampleItems.obs;  
9 -  
10 - @override  
11 - onInit() async {  
12 - for (int i = 0; i < 10; i++) {  
13 - await Future.delayed(Duration(milliseconds: 500));  
14 - addItem(Item(title: DateTime.now().toString()));  
15 - }  
16 -  
17 - print("It's done. Print now!");  
18 - super.onInit();  
19 - }  
20 -  
21 - void addItem(Item item) {  
22 - items.add(item);  
23 - }  
24 -}  
1 -import 'package:benckmark/_get_rx/_store.dart';  
2 -import 'package:flutter/material.dart';  
3 -import 'package:get/get.dart';  
4 -  
5 -class App extends StatelessWidget {  
6 - @override  
7 - Widget build(BuildContext context) {  
8 - return MaterialApp(  
9 - title: 'GetX Sample',  
10 - theme: ThemeData(  
11 - primarySwatch: Colors.blue,  
12 - ),  
13 - home: Page(title: 'GetX Sample'),  
14 - );  
15 - }  
16 -}  
17 -  
18 -class Page extends StatelessWidget {  
19 - Page({  
20 - Key key,  
21 - this.title,  
22 - }) : super(key: key);  
23 -  
24 - final String title;  
25 -  
26 - @override  
27 - Widget build(BuildContext context) {  
28 - return Scaffold(  
29 - appBar: AppBar(  
30 - title: Text("GetX"),  
31 - ),  
32 - body: ListViewWidget(),  
33 - );  
34 - }  
35 -}  
36 -  
37 -class ListViewWidget extends StatelessWidget {  
38 - final Controller c = Controller();  
39 - @override  
40 - Widget build(BuildContext context) {  
41 - return Obxx(() => ListView.builder(  
42 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
43 - itemCount: c.items.length,  
44 - itemBuilder: (context, index) {  
45 - return ListTile(  
46 - title: Text(c.items[index].title),  
47 - );  
48 - }));  
49 - }  
50 -}  
1 -import 'package:benckmark/item.dart';  
2 -import 'package:mobx/mobx.dart';  
3 -  
4 -part '_store.g.dart';  
5 -  
6 -class AppStore = _AppStore with _$AppStore;  
7 -  
8 -abstract class _AppStore with Store {  
9 - @observable  
10 - ObservableList<Item> items = ObservableList<Item>.of(sampleItems);  
11 -  
12 - @observable  
13 - ObservableSet<String> checkedItemIds = ObservableSet<String>();  
14 -  
15 - @action  
16 - void addItem(Item item) {  
17 - items.add(item);  
18 - }  
19 -}  
1 -// GENERATED CODE - DO NOT MODIFY BY HAND  
2 -  
3 -part of '_store.dart';  
4 -  
5 -// **************************************************************************  
6 -// StoreGenerator  
7 -// **************************************************************************  
8 -  
9 -// ignore_for_file: non_constant_identifier_names, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic  
10 -  
11 -mixin _$AppStore on _AppStore, Store {  
12 - final _$itemsAtom = Atom(name: '_AppStore.items');  
13 -  
14 - @override  
15 - ObservableList<Item> get items {  
16 - _$itemsAtom.context.enforceReadPolicy(_$itemsAtom);  
17 - _$itemsAtom.reportObserved();  
18 - return super.items;  
19 - }  
20 -  
21 - @override  
22 - set items(ObservableList<Item> value) {  
23 - _$itemsAtom.context.conditionallyRunInAction(() {  
24 - super.items = value;  
25 - _$itemsAtom.reportChanged();  
26 - }, _$itemsAtom, name: '${_$itemsAtom.name}_set');  
27 - }  
28 -  
29 - final _$checkedItemIdsAtom = Atom(name: '_AppStore.checkedItemIds');  
30 -  
31 - @override  
32 - ObservableSet<String> get checkedItemIds {  
33 - _$checkedItemIdsAtom.context.enforceReadPolicy(_$checkedItemIdsAtom);  
34 - _$checkedItemIdsAtom.reportObserved();  
35 - return super.checkedItemIds;  
36 - }  
37 -  
38 - @override  
39 - set checkedItemIds(ObservableSet<String> value) {  
40 - _$checkedItemIdsAtom.context.conditionallyRunInAction(() {  
41 - super.checkedItemIds = value;  
42 - _$checkedItemIdsAtom.reportChanged();  
43 - }, _$checkedItemIdsAtom, name: '${_$checkedItemIdsAtom.name}_set');  
44 - }  
45 -  
46 - final _$_AppStoreActionController = ActionController(name: '_AppStore');  
47 -  
48 - @override  
49 - void addItem(Item item) {  
50 - final _$actionInfo = _$_AppStoreActionController.startAction();  
51 - try {  
52 - return super.addItem(item);  
53 - } finally {  
54 - _$_AppStoreActionController.endAction(_$actionInfo);  
55 - }  
56 - }  
57 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:flutter_mobx/flutter_mobx.dart';  
3 -import 'package:benckmark/_mobx/_store.dart';  
4 -import 'package:benckmark/item.dart';  
5 -  
6 -final store = AppStore();  
7 -  
8 -class App extends StatelessWidget {  
9 - @override  
10 - Widget build(BuildContext context) {  
11 - return MaterialApp(  
12 - title: 'MobX Sample',  
13 - theme: ThemeData(  
14 - primarySwatch: Colors.blue,  
15 - ),  
16 - home: Page(title: 'MobX Sample'),  
17 - );  
18 - }  
19 -}  
20 -  
21 -class Page extends StatefulWidget {  
22 - Page({  
23 - Key key,  
24 - this.title,  
25 - }) : super(key: key);  
26 -  
27 - final String title;  
28 -  
29 - @override  
30 - _PageState createState() => _PageState();  
31 -}  
32 -  
33 -class _PageState extends State<Page> {  
34 - @override  
35 - void initState() {  
36 - fill();  
37 - super.initState();  
38 - }  
39 -  
40 - fill() async {  
41 - for (int i = 0; i < 10; i++) {  
42 - await Future.delayed(Duration(milliseconds: 500));  
43 - store.addItem(Item(title: DateTime.now().toString()));  
44 - }  
45 - print("It's done. Print now!");  
46 - }  
47 -  
48 - @override  
49 - Widget build(BuildContext context) {  
50 - return Scaffold(  
51 - appBar: AppBar(  
52 - title: Text(widget.title),  
53 - ),  
54 - body: ListViewWidget(),  
55 - );  
56 - }  
57 -}  
58 -  
59 -class ListViewWidget extends StatelessWidget {  
60 - @override  
61 - Widget build(BuildContext context) {  
62 - return Observer(  
63 - builder: (_) {  
64 - return ListView.builder(  
65 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
66 - itemCount: store.items.length,  
67 - itemBuilder: (context, index) {  
68 - return ListTile(  
69 - title: Text(store.items[index].title),  
70 - );  
71 - },  
72 - );  
73 - },  
74 - );  
75 - }  
76 -}  
1 -import 'package:flutter/foundation.dart';  
2 -import 'package:benckmark/item.dart';  
3 -import 'package:flutter/scheduler.dart';  
4 -  
5 -class AppState with ChangeNotifier {  
6 - AppState() {  
7 - SchedulerBinding.instance.addPostFrameCallback((timeStamp) async {  
8 - for (int i = 0; i < 10; i++) {  
9 - await Future.delayed(Duration(milliseconds: 500));  
10 - addItem(Item(title: DateTime.now().toString()));  
11 - }  
12 - print("It's done. Print now!");  
13 - });  
14 - }  
15 -  
16 - List<Item> _items = sampleItems;  
17 -  
18 - List<Item> get items => _items;  
19 -  
20 - void addItem(Item item) {  
21 - _items.add(item);  
22 -  
23 - notifyListeners();  
24 - }  
25 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:provider/provider.dart';  
3 -  
4 -import '_state.dart';  
5 -  
6 -class App extends StatelessWidget {  
7 - @override  
8 - Widget build(BuildContext context) {  
9 - return ChangeNotifierProvider(  
10 - create: (context) => AppState(),  
11 - child: MaterialApp(  
12 - title: 'Provider Sample',  
13 - theme: ThemeData(  
14 - primarySwatch: Colors.blue,  
15 - ),  
16 - home: Page(title: 'Provider Sample'),  
17 - ),  
18 - );  
19 - }  
20 -}  
21 -  
22 -class Page extends StatelessWidget {  
23 - Page({  
24 - Key key,  
25 - this.title,  
26 - }) : super(key: key);  
27 -  
28 - final String title;  
29 -  
30 - @override  
31 - Widget build(BuildContext context) {  
32 - return Scaffold(  
33 - appBar: AppBar(  
34 - title: Text(title),  
35 - ),  
36 - body: ListViewWidget(),  
37 - );  
38 - }  
39 -}  
40 -  
41 -class ListViewWidget extends StatelessWidget {  
42 - @override  
43 - Widget build(BuildContext context) {  
44 - final state = context.watch<AppState>();  
45 -  
46 - return ListView.builder(  
47 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
48 - itemCount: state.items.length,  
49 - itemBuilder: (context, index) {  
50 - return ListTile(  
51 - title: Text(state.items[index].title),  
52 - );  
53 - },  
54 - );  
55 - }  
56 -}  
1 -import 'package:benckmark/item.dart';  
2 -import 'package:meta/meta.dart';  
3 -  
4 -@immutable  
5 -class AppState {  
6 - final List<Item> items;  
7 -  
8 - AppState({  
9 - this.items,  
10 - });  
11 -  
12 - AppState.initialState() : items = sampleItems;  
13 -}  
14 -  
15 -class AddItemAction {  
16 - Item payload;  
17 -  
18 - AddItemAction({  
19 - this.payload,  
20 - });  
21 -}  
22 -  
23 -AppState appReducer(AppState state, dynamic action) {  
24 - return AppState(items: itemsReducer(state.items, action));  
25 -}  
26 -  
27 -List<Item> itemsReducer(List<Item> state, dynamic action) {  
28 - if (action is AddItemAction) {  
29 - return [...state, action.payload];  
30 - }  
31 -  
32 - return state;  
33 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:flutter_redux/flutter_redux.dart';  
3 -import 'package:benckmark/item.dart';  
4 -import 'package:redux/redux.dart';  
5 -import '_store.dart';  
6 -  
7 -final store =  
8 - Store<AppState>(appReducer, initialState: AppState.initialState());  
9 -  
10 -class App extends StatelessWidget {  
11 - @override  
12 - Widget build(BuildContext context) {  
13 - return StoreProvider<AppState>(  
14 - store: store,  
15 - child: MaterialApp(  
16 - title: 'Redux Sample',  
17 - theme: ThemeData(  
18 - primarySwatch: Colors.blue,  
19 - ),  
20 - home: Page(title: 'Redux Sample'),  
21 - ),  
22 - );  
23 - }  
24 -}  
25 -  
26 -class Page extends StatefulWidget {  
27 - Page({  
28 - Key key,  
29 - this.title,  
30 - }) : super(key: key);  
31 -  
32 - final String title;  
33 -  
34 - @override  
35 - _PageState createState() => _PageState();  
36 -}  
37 -  
38 -class _PageState extends State<Page> {  
39 - @override  
40 - void initState() {  
41 - super.initState();  
42 - fill();  
43 - }  
44 -  
45 - fill() async {  
46 - for (int i = 0; i < 10; i++) {  
47 - await Future.delayed(Duration(milliseconds: 500));  
48 - store.dispatch(  
49 - AddItemAction(payload: Item(title: DateTime.now().toString())));  
50 - }  
51 - print("It's done. Print now!");  
52 - }  
53 -  
54 - @override  
55 - Widget build(BuildContext context) {  
56 - return Scaffold(  
57 - appBar: AppBar(  
58 - title: Text(widget.title),  
59 - ),  
60 - body: ListViewWidget(),  
61 - );  
62 - }  
63 -}  
64 -  
65 -class ListViewWidget extends StatelessWidget {  
66 - @override  
67 - Widget build(BuildContext context) {  
68 - return StoreConnector<AppState, List<Item>>(  
69 - converter: (store) => store.state.items,  
70 - builder: (context, items) {  
71 - return ListView.builder(  
72 - padding: EdgeInsets.fromLTRB(0.0, 8.0, 0.0, 8.0),  
73 - itemCount: items.length,  
74 - itemBuilder: (context, index) {  
75 - return ListTile(  
76 - title: Text(items[index].title),  
77 - );  
78 - },  
79 - );  
80 - },  
81 - );  
82 - }  
83 -}  
1 -class Item {  
2 - final String title;  
3 -  
4 - Item({  
5 - this.title,  
6 - });  
7 -}  
8 -  
9 -final List<Item> sampleItems = [  
10 - Item(title: 'Item 1'),  
11 - Item(title: 'Item 2'),  
12 - Item(title: 'Item 3')  
13 -];  
1 -import 'package:flutter/widgets.dart';  
2 -  
3 -//import 'package:benckmark/_bloc_plain/app.dart';  
4 -//import 'package:benckmark/_bloc_lib/app.dart';  
5 -//import 'package:benckmark/_mobx/app.dart';  
6 -//import 'package:benckmark/_redux/app.dart';  
7 -//import 'package:benckmark/_get_rx/app.dart';  
8 -  
9 -//import 'package:benckmark/_provider/app.dart';  
10 -import 'package:benckmark/_get/app.dart';  
11 -  
12 -void main() => runApp(App());  
1 -# Generated by pub  
2 -# See https://dart.dev/tools/pub/glossary#lockfile  
3 -packages:  
4 - _fe_analyzer_shared:  
5 - dependency: transitive  
6 - description:  
7 - name: _fe_analyzer_shared  
8 - url: "https://pub.dartlang.org"  
9 - source: hosted  
10 - version: "4.0.0"  
11 - analyzer:  
12 - dependency: transitive  
13 - description:  
14 - name: analyzer  
15 - url: "https://pub.dartlang.org"  
16 - source: hosted  
17 - version: "0.39.10"  
18 - args:  
19 - dependency: transitive  
20 - description:  
21 - name: args  
22 - url: "https://pub.dartlang.org"  
23 - source: hosted  
24 - version: "1.6.0"  
25 - async:  
26 - dependency: transitive  
27 - description:  
28 - name: async  
29 - url: "https://pub.dartlang.org"  
30 - source: hosted  
31 - version: "2.5.0-nullsafety"  
32 - bloc:  
33 - dependency: "direct main"  
34 - description:  
35 - name: bloc  
36 - url: "https://pub.dartlang.org"  
37 - source: hosted  
38 - version: "4.0.0"  
39 - boolean_selector:  
40 - dependency: transitive  
41 - description:  
42 - name: boolean_selector  
43 - url: "https://pub.dartlang.org"  
44 - source: hosted  
45 - version: "2.1.0-nullsafety"  
46 - build:  
47 - dependency: transitive  
48 - description:  
49 - name: build  
50 - url: "https://pub.dartlang.org"  
51 - source: hosted  
52 - version: "1.3.0"  
53 - build_config:  
54 - dependency: transitive  
55 - description:  
56 - name: build_config  
57 - url: "https://pub.dartlang.org"  
58 - source: hosted  
59 - version: "0.4.2"  
60 - build_daemon:  
61 - dependency: transitive  
62 - description:  
63 - name: build_daemon  
64 - url: "https://pub.dartlang.org"  
65 - source: hosted  
66 - version: "2.1.4"  
67 - build_resolvers:  
68 - dependency: transitive  
69 - description:  
70 - name: build_resolvers  
71 - url: "https://pub.dartlang.org"  
72 - source: hosted  
73 - version: "1.3.9"  
74 - build_runner:  
75 - dependency: "direct dev"  
76 - description:  
77 - name: build_runner  
78 - url: "https://pub.dartlang.org"  
79 - source: hosted  
80 - version: "1.10.0"  
81 - build_runner_core:  
82 - dependency: transitive  
83 - description:  
84 - name: build_runner_core  
85 - url: "https://pub.dartlang.org"  
86 - source: hosted  
87 - version: "5.2.0"  
88 - built_collection:  
89 - dependency: transitive  
90 - description:  
91 - name: built_collection  
92 - url: "https://pub.dartlang.org"  
93 - source: hosted  
94 - version: "4.3.2"  
95 - built_value:  
96 - dependency: transitive  
97 - description:  
98 - name: built_value  
99 - url: "https://pub.dartlang.org"  
100 - source: hosted  
101 - version: "7.1.0"  
102 - characters:  
103 - dependency: transitive  
104 - description:  
105 - name: characters  
106 - url: "https://pub.dartlang.org"  
107 - source: hosted  
108 - version: "1.1.0-nullsafety.2"  
109 - charcode:  
110 - dependency: transitive  
111 - description:  
112 - name: charcode  
113 - url: "https://pub.dartlang.org"  
114 - source: hosted  
115 - version: "1.2.0-nullsafety"  
116 - checked_yaml:  
117 - dependency: transitive  
118 - description:  
119 - name: checked_yaml  
120 - url: "https://pub.dartlang.org"  
121 - source: hosted  
122 - version: "1.0.2"  
123 - clock:  
124 - dependency: transitive  
125 - description:  
126 - name: clock  
127 - url: "https://pub.dartlang.org"  
128 - source: hosted  
129 - version: "1.1.0-nullsafety"  
130 - code_builder:  
131 - dependency: transitive  
132 - description:  
133 - name: code_builder  
134 - url: "https://pub.dartlang.org"  
135 - source: hosted  
136 - version: "3.3.0"  
137 - collection:  
138 - dependency: transitive  
139 - description:  
140 - name: collection  
141 - url: "https://pub.dartlang.org"  
142 - source: hosted  
143 - version: "1.15.0-nullsafety.2"  
144 - convert:  
145 - dependency: transitive  
146 - description:  
147 - name: convert  
148 - url: "https://pub.dartlang.org"  
149 - source: hosted  
150 - version: "2.1.1"  
151 - crypto:  
152 - dependency: transitive  
153 - description:  
154 - name: crypto  
155 - url: "https://pub.dartlang.org"  
156 - source: hosted  
157 - version: "2.1.4"  
158 - csslib:  
159 - dependency: transitive  
160 - description:  
161 - name: csslib  
162 - url: "https://pub.dartlang.org"  
163 - source: hosted  
164 - version: "0.16.1"  
165 - cupertino_icons:  
166 - dependency: "direct main"  
167 - description:  
168 - name: cupertino_icons  
169 - url: "https://pub.dartlang.org"  
170 - source: hosted  
171 - version: "0.1.3"  
172 - dart_style:  
173 - dependency: transitive  
174 - description:  
175 - name: dart_style  
176 - url: "https://pub.dartlang.org"  
177 - source: hosted  
178 - version: "1.3.6"  
179 - equatable:  
180 - dependency: "direct main"  
181 - description:  
182 - name: equatable  
183 - url: "https://pub.dartlang.org"  
184 - source: hosted  
185 - version: "1.2.0"  
186 - fake_async:  
187 - dependency: transitive  
188 - description:  
189 - name: fake_async  
190 - url: "https://pub.dartlang.org"  
191 - source: hosted  
192 - version: "1.1.0-nullsafety"  
193 - fixnum:  
194 - dependency: transitive  
195 - description:  
196 - name: fixnum  
197 - url: "https://pub.dartlang.org"  
198 - source: hosted  
199 - version: "0.10.11"  
200 - flutter:  
201 - dependency: "direct main"  
202 - description: flutter  
203 - source: sdk  
204 - version: "0.0.0"  
205 - flutter_bloc:  
206 - dependency: "direct main"  
207 - description:  
208 - name: flutter_bloc  
209 - url: "https://pub.dartlang.org"  
210 - source: hosted  
211 - version: "4.0.1"  
212 - flutter_mobx:  
213 - dependency: "direct main"  
214 - description:  
215 - name: flutter_mobx  
216 - url: "https://pub.dartlang.org"  
217 - source: hosted  
218 - version: "0.3.7"  
219 - flutter_redux:  
220 - dependency: "direct main"  
221 - description:  
222 - name: flutter_redux  
223 - url: "https://pub.dartlang.org"  
224 - source: hosted  
225 - version: "0.6.0"  
226 - flutter_test:  
227 - dependency: "direct dev"  
228 - description: flutter  
229 - source: sdk  
230 - version: "0.0.0"  
231 - get:  
232 - dependency: "direct main"  
233 - description:  
234 - name: get  
235 - url: "https://pub.dartlang.org"  
236 - source: hosted  
237 - version: "2.12.5-beta"  
238 - glob:  
239 - dependency: transitive  
240 - description:  
241 - name: glob  
242 - url: "https://pub.dartlang.org"  
243 - source: hosted  
244 - version: "1.2.0"  
245 - graphs:  
246 - dependency: transitive  
247 - description:  
248 - name: graphs  
249 - url: "https://pub.dartlang.org"  
250 - source: hosted  
251 - version: "0.2.0"  
252 - html:  
253 - dependency: transitive  
254 - description:  
255 - name: html  
256 - url: "https://pub.dartlang.org"  
257 - source: hosted  
258 - version: "0.14.0+3"  
259 - http_multi_server:  
260 - dependency: transitive  
261 - description:  
262 - name: http_multi_server  
263 - url: "https://pub.dartlang.org"  
264 - source: hosted  
265 - version: "2.2.0"  
266 - http_parser:  
267 - dependency: transitive  
268 - description:  
269 - name: http_parser  
270 - url: "https://pub.dartlang.org"  
271 - source: hosted  
272 - version: "3.1.4"  
273 - io:  
274 - dependency: transitive  
275 - description:  
276 - name: io  
277 - url: "https://pub.dartlang.org"  
278 - source: hosted  
279 - version: "0.3.4"  
280 - js:  
281 - dependency: transitive  
282 - description:  
283 - name: js  
284 - url: "https://pub.dartlang.org"  
285 - source: hosted  
286 - version: "0.6.2"  
287 - json_annotation:  
288 - dependency: transitive  
289 - description:  
290 - name: json_annotation  
291 - url: "https://pub.dartlang.org"  
292 - source: hosted  
293 - version: "3.0.1"  
294 - logging:  
295 - dependency: transitive  
296 - description:  
297 - name: logging  
298 - url: "https://pub.dartlang.org"  
299 - source: hosted  
300 - version: "0.11.4"  
301 - matcher:  
302 - dependency: transitive  
303 - description:  
304 - name: matcher  
305 - url: "https://pub.dartlang.org"  
306 - source: hosted  
307 - version: "0.12.10-nullsafety"  
308 - meta:  
309 - dependency: "direct main"  
310 - description:  
311 - name: meta  
312 - url: "https://pub.dartlang.org"  
313 - source: hosted  
314 - version: "1.3.0-nullsafety.2"  
315 - mime:  
316 - dependency: transitive  
317 - description:  
318 - name: mime  
319 - url: "https://pub.dartlang.org"  
320 - source: hosted  
321 - version: "0.9.6+3"  
322 - mobx:  
323 - dependency: "direct main"  
324 - description:  
325 - name: mobx  
326 - url: "https://pub.dartlang.org"  
327 - source: hosted  
328 - version: "0.4.0+4"  
329 - mobx_codegen:  
330 - dependency: "direct dev"  
331 - description:  
332 - name: mobx_codegen  
333 - url: "https://pub.dartlang.org"  
334 - source: hosted  
335 - version: "0.4.2"  
336 - nested:  
337 - dependency: transitive  
338 - description:  
339 - name: nested  
340 - url: "https://pub.dartlang.org"  
341 - source: hosted  
342 - version: "0.0.4"  
343 - node_interop:  
344 - dependency: transitive  
345 - description:  
346 - name: node_interop  
347 - url: "https://pub.dartlang.org"  
348 - source: hosted  
349 - version: "1.1.1"  
350 - node_io:  
351 - dependency: transitive  
352 - description:  
353 - name: node_io  
354 - url: "https://pub.dartlang.org"  
355 - source: hosted  
356 - version: "1.1.1"  
357 - package_config:  
358 - dependency: transitive  
359 - description:  
360 - name: package_config  
361 - url: "https://pub.dartlang.org"  
362 - source: hosted  
363 - version: "1.9.3"  
364 - path:  
365 - dependency: transitive  
366 - description:  
367 - name: path  
368 - url: "https://pub.dartlang.org"  
369 - source: hosted  
370 - version: "1.8.0-nullsafety"  
371 - pedantic:  
372 - dependency: transitive  
373 - description:  
374 - name: pedantic  
375 - url: "https://pub.dartlang.org"  
376 - source: hosted  
377 - version: "1.9.0"  
378 - pool:  
379 - dependency: transitive  
380 - description:  
381 - name: pool  
382 - url: "https://pub.dartlang.org"  
383 - source: hosted  
384 - version: "1.4.0"  
385 - provider:  
386 - dependency: "direct main"  
387 - description:  
388 - name: provider  
389 - url: "https://pub.dartlang.org"  
390 - source: hosted  
391 - version: "4.1.3"  
392 - pub_semver:  
393 - dependency: transitive  
394 - description:  
395 - name: pub_semver  
396 - url: "https://pub.dartlang.org"  
397 - source: hosted  
398 - version: "1.4.4"  
399 - pubspec_parse:  
400 - dependency: transitive  
401 - description:  
402 - name: pubspec_parse  
403 - url: "https://pub.dartlang.org"  
404 - source: hosted  
405 - version: "0.1.5"  
406 - quiver:  
407 - dependency: transitive  
408 - description:  
409 - name: quiver  
410 - url: "https://pub.dartlang.org"  
411 - source: hosted  
412 - version: "2.1.3"  
413 - redux:  
414 - dependency: "direct main"  
415 - description:  
416 - name: redux  
417 - url: "https://pub.dartlang.org"  
418 - source: hosted  
419 - version: "4.0.0"  
420 - rxdart:  
421 - dependency: "direct main"  
422 - description:  
423 - name: rxdart  
424 - url: "https://pub.dartlang.org"  
425 - source: hosted  
426 - version: "0.23.1"  
427 - shelf:  
428 - dependency: transitive  
429 - description:  
430 - name: shelf  
431 - url: "https://pub.dartlang.org"  
432 - source: hosted  
433 - version: "0.7.5"  
434 - shelf_web_socket:  
435 - dependency: transitive  
436 - description:  
437 - name: shelf_web_socket  
438 - url: "https://pub.dartlang.org"  
439 - source: hosted  
440 - version: "0.2.3"  
441 - sky_engine:  
442 - dependency: transitive  
443 - description: flutter  
444 - source: sdk  
445 - version: "0.0.99"  
446 - source_gen:  
447 - dependency: transitive  
448 - description:  
449 - name: source_gen  
450 - url: "https://pub.dartlang.org"  
451 - source: hosted  
452 - version: "0.9.5"  
453 - source_span:  
454 - dependency: transitive  
455 - description:  
456 - name: source_span  
457 - url: "https://pub.dartlang.org"  
458 - source: hosted  
459 - version: "1.8.0-nullsafety"  
460 - stack_trace:  
461 - dependency: transitive  
462 - description:  
463 - name: stack_trace  
464 - url: "https://pub.dartlang.org"  
465 - source: hosted  
466 - version: "1.10.0-nullsafety"  
467 - stream_channel:  
468 - dependency: transitive  
469 - description:  
470 - name: stream_channel  
471 - url: "https://pub.dartlang.org"  
472 - source: hosted  
473 - version: "2.1.0-nullsafety"  
474 - stream_transform:  
475 - dependency: transitive  
476 - description:  
477 - name: stream_transform  
478 - url: "https://pub.dartlang.org"  
479 - source: hosted  
480 - version: "1.2.0"  
481 - string_scanner:  
482 - dependency: transitive  
483 - description:  
484 - name: string_scanner  
485 - url: "https://pub.dartlang.org"  
486 - source: hosted  
487 - version: "1.1.0-nullsafety"  
488 - term_glyph:  
489 - dependency: transitive  
490 - description:  
491 - name: term_glyph  
492 - url: "https://pub.dartlang.org"  
493 - source: hosted  
494 - version: "1.2.0-nullsafety"  
495 - test_api:  
496 - dependency: transitive  
497 - description:  
498 - name: test_api  
499 - url: "https://pub.dartlang.org"  
500 - source: hosted  
501 - version: "0.2.19-nullsafety"  
502 - timing:  
503 - dependency: transitive  
504 - description:  
505 - name: timing  
506 - url: "https://pub.dartlang.org"  
507 - source: hosted  
508 - version: "0.1.1+2"  
509 - typed_data:  
510 - dependency: transitive  
511 - description:  
512 - name: typed_data  
513 - url: "https://pub.dartlang.org"  
514 - source: hosted  
515 - version: "1.3.0-nullsafety.2"  
516 - uuid:  
517 - dependency: "direct main"  
518 - description:  
519 - name: uuid  
520 - url: "https://pub.dartlang.org"  
521 - source: hosted  
522 - version: "2.1.0"  
523 - vector_math:  
524 - dependency: transitive  
525 - description:  
526 - name: vector_math  
527 - url: "https://pub.dartlang.org"  
528 - source: hosted  
529 - version: "2.1.0-nullsafety.2"  
530 - watcher:  
531 - dependency: transitive  
532 - description:  
533 - name: watcher  
534 - url: "https://pub.dartlang.org"  
535 - source: hosted  
536 - version: "0.9.7+15"  
537 - web_socket_channel:  
538 - dependency: transitive  
539 - description:  
540 - name: web_socket_channel  
541 - url: "https://pub.dartlang.org"  
542 - source: hosted  
543 - version: "1.1.0"  
544 - yaml:  
545 - dependency: transitive  
546 - description:  
547 - name: yaml  
548 - url: "https://pub.dartlang.org"  
549 - source: hosted  
550 - version: "2.2.1"  
551 -sdks:  
552 - dart: ">=2.10.0-0.0.dev <2.10.0"  
553 - flutter: ">=1.16.0"  
1 -name: benckmark  
2 -description: A new Flutter application showing different kinds of state management.  
3 -  
4 -dependencies:  
5 - flutter:  
6 - sdk: flutter  
7 - cupertino_icons: ^0.1.2  
8 - get: 2.12.5-beta  
9 - bloc: ^4.0.0  
10 - equatable: ^1.0.2  
11 - flutter_bloc: ^4.0.0  
12 - flutter_mobx: ^0.3.6  
13 - flutter_redux: ^0.6.0  
14 - meta:  
15 - mobx: ^0.4.0+1  
16 - provider: ^4.0.1  
17 - redux: ^4.0.0  
18 - rxdart: ^0.23.1  
19 - uuid: ^2.0.4  
20 -  
21 -dev_dependencies:  
22 - flutter_test:  
23 - sdk: flutter  
24 -  
25 - build_runner: ^1.7.3  
26 - mobx_codegen: ^0.4.0+1  
27 -  
28 -  
29 -# For information on the generic Dart part of this file, see the  
30 -# following page: https://www.dartlang.org/tools/pub/pubspec  
31 -  
32 -# The following section is specific to Flutter.  
33 -flutter:  
34 -  
35 - # The following line ensures that the Material Icons font is  
36 - # included with your application, so that you can use the icons in  
37 - # the material Icons class.  
38 - uses-material-design: true  
39 -  
40 - # To add assets to your application, add an assets section, like this:  
41 - # assets:  
42 - # - images/a_dot_burr.jpeg  
43 - # - images/a_dot_ham.jpeg  
44 -  
45 - # An image asset can refer to one or more resolution-specific "variants", see  
46 - # https://flutter.io/assets-and-images/#resolution-aware.  
47 -  
48 - # For details regarding adding assets from package dependencies, see  
49 - # https://flutter.io/assets-and-images/#from-packages  
50 -  
51 - # To add custom fonts to your application, add a fonts section here,  
52 - # in this "flutter" section. Each entry in this list should have a  
53 - # "family" key with the font family name, and a "fonts" key with a  
54 - # list giving the asset and other descriptors for the font. For  
55 - # example:  
56 - # fonts:  
57 - # - family: Schyler  
58 - # fonts:  
59 - # - asset: fonts/Schyler-Regular.ttf  
60 - # - asset: fonts/Schyler-Italic.ttf  
61 - # style: italic  
62 - # - family: Trajan Pro  
63 - # fonts:  
64 - # - asset: fonts/TrajanPro.ttf  
65 - # - asset: fonts/TrajanPro_Bold.ttf  
66 - # weight: 700  
67 - #  
68 - # For details regarding fonts from package dependencies,  
69 - # see https://flutter.io/custom-fonts/#from-packages  
1 -// This is a basic Flutter widget test.  
2 -// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter  
3 -// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to  
4 -// find child widgets in the widget tree, read text, and verify that the values of widget properties  
5 -// are correct.  
6 -  
7 -import 'package:flutter/material.dart';  
8 -import 'package:benckmark/_redux/app.dart';  
9 -import 'package:flutter_test/flutter_test.dart';  
10 -  
11 -void main() {  
12 - testWidgets('Counter increments smoke test', (WidgetTester tester) async {  
13 - // Build our app and trigger a frame.  
14 - await tester.pumpWidget(App());  
15 -  
16 - // Verify that our counter starts at 0.  
17 - expect(find.text('0'), findsOneWidget);  
18 - expect(find.text('1'), findsNothing);  
19 -  
20 - // Tap the '+' icon and trigger a frame.  
21 - await tester.tap(find.byIcon(Icons.add));  
22 - await tester.pump();  
23 -  
24 - // Verify that our counter has incremented.  
25 - expect(find.text('0'), findsNothing);  
26 - expect(find.text('1'), findsOneWidget);  
27 - });  
28 -}  
1 -- [Simple Instance Manager](#simple-instance-manager)  
2 -- [Options](#options)  
3 -- [Bindings](#bindings)  
4 - - [How to use](#how-to-use)  
5 -- [SmartManagement](#smartmanagement)  
6 -  
7 -## Simple Instance Manager 1 +# Dependency Management
  2 +- [Dependency Management](#dependency-management)
  3 + - [Usage](#usage)
  4 + - [Instancing methods](#instancing-methods)
  5 + - [Get.put()](#getput)
  6 + - [Get.lazyPut](#getlazyput)
  7 + - [Get.putAsync](#getputasync)
  8 + - [Get.create](#getcreate)
  9 + - [Differences between methods:](#differences-between-methods)
  10 + - [Bindings](#bindings)
  11 + - [How to use](#how-to-use)
  12 + - [BindingsBuilder](#bindingsbuilder)
  13 + - [SmartManagement](#smartmanagement)
  14 + - [SmartManagement.full](#smartmanagementfull)
  15 + - [SmartManagement.onlyBuilders](#smartmanagementonlybuilders)
  16 + - [SmartManagement.keepFactory](#smartmanagementkeepfactory)
  17 + - [How bindings work under the hood](#how-bindings-work-under-the-hood)
  18 + - [Notes](#notes)
8 19
9 Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget: 20 Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget:
10 21
@@ -12,21 +23,13 @@ Get has a simple and powerful dependency manager that allows you to retrieve the @@ -12,21 +23,13 @@ Get has a simple and powerful dependency manager that allows you to retrieve the
12 Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); 23 Controller controller = Get.put(Controller()); // Rather Controller controller = Controller();
13 ``` 24 ```
14 25
15 -- Note: If you are using Get's State Manager, pay more attention to the bindings api, which will make easier to connect your view to your controller.  
16 -  
17 Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App. 26 Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App.
18 So you can use your controller (or Bloc class) normally 27 So you can use your controller (or Bloc class) normally
19 28
20 -**Tip:** Get dependency management is decloupled from other parts of the package, so if for example your app is already using a state manager (any one, it doesn't matter), you don't need to rewrite it all, you can use this dependency injection with no problems at all  
21 -  
22 -```dart  
23 -controller.fetchApi();  
24 -```  
25 -  
26 Imagine that you have navigated through numerous routes, and you need a data that was left behind in your controller, you would need a state manager combined with the Provider or Get_it, correct? Not with Get. You just need to ask Get to "find" for your controller, you don't need any additional dependencies: 29 Imagine that you have navigated through numerous routes, and you need a data that was left behind in your controller, you would need a state manager combined with the Provider or Get_it, correct? Not with Get. You just need to ask Get to "find" for your controller, you don't need any additional dependencies:
27 30
28 ```dart 31 ```dart
29 -Controller controller = Get.find(); 32 +Controller controller = Get.find(); // or final controller = Get.find<Controlelr>();
30 //Yes, it looks like Magic, Get will find your controller, and will deliver it to you. You can have 1 million controllers instantiated, Get will always give you the right controller. 33 //Yes, it looks like Magic, Get will find your controller, and will deliver it to you. You can have 1 million controllers instantiated, Get will always give you the right controller.
31 ``` 34 ```
32 35
@@ -36,24 +39,27 @@ And then you will be able to recover your controller data that was obtained back @@ -36,24 +39,27 @@ And then you will be able to recover your controller data that was obtained back
36 Text(controller.textFromApi); 39 Text(controller.textFromApi);
37 ``` 40 ```
38 41
39 -Looking for lazy loading? You can declare all your controllers, and it will be called only when someone needs it. You can do this with: 42 +It is possible to lazyLoad a dependency so that it will be instantiated only when is used. Very useful for computational expensive classes or when you know you will not gonna use that class at that time.
40 43
41 ```dart 44 ```dart
42 -Get.lazyPut<Service>(()=> ApiMock());  
43 -/// ApiMock will only be called when someone uses Get.find<Service> for the first time 45 +Get.lazyPut<ApiMock>(() => ApiMock());
  46 +/// ApiMock will only be called when someone uses Get.find<ApiMock> for the first time
44 ``` 47 ```
45 48
46 -If you want to register an asynchronous instance, you can use Get.putAsync. 49 +If you want to register an asynchronous instance, you can use `Get.putAsync`:
47 50
48 ```dart 51 ```dart
49 Get.putAsync<SharedPreferences>(() async { 52 Get.putAsync<SharedPreferences>(() async {
50 - final prefs = await SharedPreferences.getInstance();  
51 - await prefs.setInt('counter', 12345);  
52 - return prefs; 53 + final prefs = await SharedPreferences.getInstance();
  54 + await prefs.setInt('counter', 12345);
  55 + return prefs;
53 }); 56 });
54 ``` 57 ```
55 58
56 -usage: 59 +- Note: If you are using Get's State Manager, pay more attention to the [Bindings](#bindings) api, which will make easier to connect your view to your controller.
  60 +- Note²: Get dependency management is decloupled from other parts of the package, so if for example your app is already using a state manager (any one, it doesn't matter), you don't need to change that, you can use this dependency injection manager with no problems at all
  61 +
  62 +## Usage
57 63
58 ```dart 64 ```dart
59 int count = Get.find<SharedPreferences>().getInt('counter'); 65 int count = Get.find<SharedPreferences>().getInt('counter');
@@ -70,12 +76,14 @@ Get.delete<Controller>(); @@ -70,12 +76,14 @@ Get.delete<Controller>();
70 76
71 Although Getx already delivers very good settings for use, it is possible to refine them even more so that it become more useful to the programmer. The methods and it's configurable parameters are: 77 Although Getx already delivers very good settings for use, it is possible to refine them even more so that it become more useful to the programmer. The methods and it's configurable parameters are:
72 78
73 -- Get.put(): 79 +### Get.put()
  80 +
  81 +The most common way of inserting a dependency. Good for the controllers of your views for example.
74 82
75 ```dart 83 ```dart
76 Get.put<S>( 84 Get.put<S>(
77 // mandatory: the class that you want to get to save, like a controller or anything 85 // mandatory: the class that you want to get to save, like a controller or anything
78 - // note: that "S" means that it can be anything 86 + // note: "S" means that it can be a class of any type
79 S dependency 87 S dependency
80 88
81 // optional: this is for when you want multiple classess that are of the same type 89 // optional: this is for when you want multiple classess that are of the same type
@@ -96,16 +104,22 @@ Get.put<S>( @@ -96,16 +104,22 @@ Get.put<S>(
96 bool overrideAbstract = false, 104 bool overrideAbstract = false,
97 105
98 // optional: allows you to create the dependency using function instead of the dependency itself. 106 // optional: allows you to create the dependency using function instead of the dependency itself.
  107 + // this one is not commonly used
99 InstanceBuilderCallback<S> builder, 108 InstanceBuilderCallback<S> builder,
100 ) 109 )
  110 +
  111 +// Example:
  112 +
  113 +Get.put<LoginController>(LoginController(), permanent: true)
101 ``` 114 ```
102 115
103 -- Get.lazyPut: 116 +### Get.lazyPut
  117 +
  118 +With lazyPut, the dependency will be only instantiated when it's called. This is particularly useful if you want to instantiate several classes in just one place, but don't need that instances immediatly
104 119
105 ```dart 120 ```dart
106 Get.lazyPut<S>( 121 Get.lazyPut<S>(
107 // mandatory: a method that will be executed when your class is called for the first time 122 // mandatory: a method that will be executed when your class is called for the first time
108 - // Example: Get.lazyPut<Controller>( () => Controller() )  
109 InstanceBuilderCallback builder, 123 InstanceBuilderCallback builder,
110 124
111 // optional: same as Get.put(), it is used for when you want multiple different instance of a same class 125 // optional: same as Get.put(), it is used for when you want multiple different instance of a same class
@@ -119,15 +133,29 @@ Get.lazyPut<S>( @@ -119,15 +133,29 @@ Get.lazyPut<S>(
119 bool fenix = false 133 bool fenix = false
120 134
121 ) 135 )
  136 +
  137 +// example
  138 +Get.lazyPut<FirebaseAuth>(
  139 + () => {
  140 + // ... some logic if needed
  141 + return FirebaseAuth()
  142 + },
  143 + tag: Math.random().toString(),
  144 + fenix: true
  145 +)
  146 +
  147 +// example 2:
  148 +Get.lazyPut<Controller>( () => Controller() )
122 ``` 149 ```
123 150
124 -- Get.putAsync: 151 +### Get.putAsync
  152 +
  153 +Since `Get.put()` does not support async methods/classes, you need to use Get.putAsync. The way of declare is equal to Get.lazyPut
125 154
126 ```dart 155 ```dart
127 Get.putAsync<S>( 156 Get.putAsync<S>(
128 157
129 // mandatory: an async method that will be executed to instantiate your class 158 // mandatory: an async method that will be executed to instantiate your class
130 - // Example: Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() )  
131 AsyncInstanceBuilderCallback<S> builder, 159 AsyncInstanceBuilderCallback<S> builder,
132 160
133 // optional: same as Get.put(), it is used for when you want multiple different instance of a same class 161 // optional: same as Get.put(), it is used for when you want multiple different instance of a same class
@@ -137,9 +165,15 @@ Get.putAsync<S>( @@ -137,9 +165,15 @@ Get.putAsync<S>(
137 // optional: same as in Get.put(), used when you need to maintain that instance alive in the entire app 165 // optional: same as in Get.put(), used when you need to maintain that instance alive in the entire app
138 // defaults to false 166 // defaults to false
139 bool permanent = false 167 bool permanent = false
  168 +)
  169 +
  170 +// Example
  171 +Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() )
140 ``` 172 ```
141 173
142 -- Get.create: 174 +### Get.create
  175 +
  176 +This one is tricky. A detailed explanation of what this is and the differences between the other one can be found on [Differences between methods:](#differences-between-methods) section
143 177
144 ```dart 178 ```dart
145 Get.create<S>( 179 Get.create<S>(
@@ -160,19 +194,19 @@ Get.create<S>( @@ -160,19 +194,19 @@ Get.create<S>(
160 bool permanent = true 194 bool permanent = true
161 ``` 195 ```
162 196
163 -### Diferences between methods: 197 +## Differences between methods
164 198
165 First, let's of the `fenix` of Get.lazyPut and the `permanent` of the other methods. 199 First, let's of the `fenix` of Get.lazyPut and the `permanent` of the other methods.
166 200
167 The fundamental difference between `permanent` and `fenix` is how you want to store your instances. 201 The fundamental difference between `permanent` and `fenix` is how you want to store your instances.
168 Reinforcing: by default, GetX deletes instances when they are not is use. 202 Reinforcing: by default, GetX deletes instances when they are not is use.
169 It means that: If screen 1 has controller 1 and screen 2 has controller 2 and you remove the first route from stack, (like if you use `Get.off()` or `Get.offName()`) the controller 1 lost it's use so it will be erased. 203 It means that: If screen 1 has controller 1 and screen 2 has controller 2 and you remove the first route from stack, (like if you use `Get.off()` or `Get.offName()`) the controller 1 lost it's use so it will be erased.
170 -But if you want to opt to `permanent:true`, then the controller will not be lost in this transition - which is very usefult for services that you want to keep alive thoughout the entire application.  
171 -`fenix` in the other hand is for services that you don't worry in losing between screen changes, but when you need that service, you expect that it is alive. So basically, it will dispose the unused controller/service/class, but when you need that, it will "recreate from the ashes" a new instance. 204 +But if you want to opt for using `permanent:true`, then the controller will not be lost in this transition - which is very useful for services that you want to keep alive throughout the entire application.
  205 +`fenix` in the other hand is for services that you don't worry in losing between screen changes, but when you need that service, you expect that it is alive. So basically, it will dispose the unused controller/service/class, but when you need it, it will "recreate from the ashes" a new instance.
172 206
173 -Proceeding with the differences between methods: 207 +Proceeding with the differences between methods:
174 208
175 -- Get.put and Get.putAsync follow the same creation order, with the difference that asyn opt for applying a asynchronous method: those two methods create and initialize the instance. That one is inserted directly in the memory, using the internal method `insert` with the parameters `permanent: false` and `isSingleton: true` (this isSingleton parameter only porpuse is to tell if it is to use the dependency on `dependency` or if it is to use the dependency on `FcBuilderFunc`). After that, `Get.find()` is called that immediately initialize the instances that are on memory. 209 +- Get.put and Get.putAsync follow the same creation order, with the difference that the second uses an asynchronous method: those two methods create and initialize the instance. That one is inserted directly in the memory, using the internal method `insert` with the parameters `permanent: false` and `isSingleton: true` (this isSingleton parameter only porpuse is to tell if it is to use the dependency on `dependency` or if it is to use the dependency on `FcBuilderFunc`). After that, `Get.find()` is called that immediately initialize the instances that are on memory.
176 210
177 - Get.create: As the name implies, it will "create" your dependency! Similar to `Get.put()`, it also call the internal method `insert` to instancing. But `permanent` became true and `isSingleton` became false (since we are "creating" our dependency, there is no way for it to be a singleton instace, that's why is false). And because it has `permanent: true`, we have by default the benefit of not losing it between screens! Also, `Get.find()` is not called immediately, it wait to be used in the screen to be called. It is created this way to make use of the parameter `permanent`, since then, worth noticing, `Get.create()` was made with the goal of create not shared instances, but don't get disposed, like for example a button in a listView, that you want a unique instance for that list - because of that, Get.create must be used together with GetWidget. 211 - Get.create: As the name implies, it will "create" your dependency! Similar to `Get.put()`, it also call the internal method `insert` to instancing. But `permanent` became true and `isSingleton` became false (since we are "creating" our dependency, there is no way for it to be a singleton instace, that's why is false). And because it has `permanent: true`, we have by default the benefit of not losing it between screens! Also, `Get.find()` is not called immediately, it wait to be used in the screen to be called. It is created this way to make use of the parameter `permanent`, since then, worth noticing, `Get.create()` was made with the goal of create not shared instances, but don't get disposed, like for example a button in a listView, that you want a unique instance for that list - because of that, Get.create must be used together with GetWidget.
178 212
@@ -193,19 +227,24 @@ In addition, the Binding class will allow you to have SmartManager configuration @@ -193,19 +227,24 @@ In addition, the Binding class will allow you to have SmartManager configuration
193 - Create a class and implements Binding 227 - Create a class and implements Binding
194 228
195 ```dart 229 ```dart
196 -class HomeBinding implements Bindings {  
197 -  
198 -} 230 +class HomeBinding implements Bindings {}
199 ``` 231 ```
200 232
201 Your IDE will automatically ask you to override the "dependencies" method, and you just need to click on the lamp, override the method, and insert all the classes you are going to use on that route: 233 Your IDE will automatically ask you to override the "dependencies" method, and you just need to click on the lamp, override the method, and insert all the classes you are going to use on that route:
202 234
203 ```dart 235 ```dart
204 -class HomeBinding implements Bindings{ 236 +class HomeBinding implements Bindings {
205 @override 237 @override
206 void dependencies() { 238 void dependencies() {
207 - Get.lazyPut<ControllerX>(() => ControllerX());  
208 - Get.lazyPut<Service>(()=> Api()); 239 + Get.lazyPut<HomeController>(() => HomeController());
  240 + Get.put<Service>(()=> Api());
  241 + }
  242 +}
  243 +
  244 +class DetailsBinding implements Bindings {
  245 + @override
  246 + void dependencies() {
  247 + Get.lazyPut<DetailsController>(() => DetailsController());
209 } 248 }
210 } 249 }
211 ``` 250 ```
@@ -215,15 +254,25 @@ Now you just need to inform your route, that you will use that binding to make t @@ -215,15 +254,25 @@ Now you just need to inform your route, that you will use that binding to make t
215 - Using named routes: 254 - Using named routes:
216 255
217 ```dart 256 ```dart
218 -namedRoutes: {  
219 - '/': GetRoute(Home(), binding: HomeBinding())  
220 -} 257 +getPages: [
  258 + GetPage(
  259 + name: '/',
  260 + page: () => HomeView(),
  261 + binding: HomeBinding(),
  262 + ),
  263 + GetPage(
  264 + name: '/details',
  265 + page: () => DetailsView(),
  266 + binding: DetailsBinding(),
  267 + ),
  268 +];
221 ``` 269 ```
222 270
223 - Using normal routes: 271 - Using normal routes:
224 272
225 ```dart 273 ```dart
226 Get.to(Home(), binding: HomeBinding()); 274 Get.to(Home(), binding: HomeBinding());
  275 +Get.to(DetailsView(), binding: DetailsBinding())
227 ``` 276 ```
228 277
229 There, you don't have to worry about memory management of your application anymore, Get will do it for you. 278 There, you don't have to worry about memory management of your application anymore, Get will do it for you.
@@ -237,17 +286,69 @@ GetMaterialApp( @@ -237,17 +286,69 @@ GetMaterialApp(
237 ); 286 );
238 ``` 287 ```
239 288
240 -## SmartManagement 289 +### BindingsBuilder
  290 +
  291 +The default way of creating a binding creating a class that implements Bindings.
  292 +But alternatively, you can use `BindingsBuilder` callback so that you can simply use a function to instantiate whatever you desire.
  293 +
  294 +Example:
  295 +
  296 +```dart
  297 +getPages: [
  298 + GetPage(
  299 + name: '/',
  300 + page: () => HomeView(),
  301 + binding: BindingsBuilder(() => {
  302 + Get.lazyPut<ControllerX>(() => ControllerX());
  303 + Get.put<Service>(()=> Api());
  304 + }),
  305 + ),
  306 + GetPage(
  307 + name: '/details',
  308 + page: () => DetailsView(),
  309 + binding: BindingsBuilder(() => {
  310 + Get.lazyPut<DetailsController>(() => DetailsController());
  311 + }),
  312 + ),
  313 +];
  314 +```
  315 +
  316 +That way you can avoid to create one Binding class for each route making this even simpler.
  317 +
  318 +Both ways of doing work perfectly fine and we want you to use what most suit your tastes.
  319 +
  320 +### SmartManagement
  321 +
  322 +GetX by default disposes unused controllers from memory, even if a failure occurs and a widget that uses it is not properly disposed.
  323 +This is what is called the `full` mode of dependency management.
  324 +But if you want to change the way GetX controls the disposal of classes, you have `SmartManagement` class that you can set different behaviors.
  325 +
  326 +#### SmartManagement.full
  327 +
  328 +It is the default one. Dispose classes that are not being used and were not set to be permanent. In the majority of the cases you will want to keep this config untouched. If you new to GetX then don't change this.
  329 +
  330 +#### SmartManagement.onlyBuilders
  331 +With this option, only controllers started in `init:` or loaded into a Binding with `Get.lazyPut` will be disposed.
  332 +
  333 +If you use `Get.put()` or `Get.putAsync()` or any other approach, SmartManagement will not have permissions to exclude this dependency.
241 334
242 -Always prefer to use standard SmartManagement (full), you do not need to configure anything for that, Get already gives it to you by default. It will surely eliminate all your disused controllers from memory, as its refined control removes the dependency, even if a failure occurs and a widget that uses it is not properly disposed.  
243 -The "full" mode is also safe enough to be used with StatelessWidget, as it has numerous security callbacks that will prevent a controller from remaining in memory if it is not being used by any widget, and disposition is not important here. However, if you are bothered by the default behavior, or just don't want it to happen, Get offers other, more lenient options for intelligent memory management, such as SmartManagement.onlyBuilders, which will depend on the effective removal of widgets using the controller. tree to remove it, and you can prevent a controller from being deployed using "autoRemove: false" in your GetBuilder/GetX.  
244 -With this option, only controllers started in "init:" or loaded into a Binding with "Get.lazyPut" will be disposed, if you use Get.put or any other approach, SmartManagement will not have permissions to exclude this dependency.  
245 With the default behavior, even widgets instantiated with "Get.put" will be removed, unlike SmartManagement.onlyBuilders. 335 With the default behavior, even widgets instantiated with "Get.put" will be removed, unlike SmartManagement.onlyBuilders.
246 -SmartManagement.keepFactory is like SmartManagement.full, with one difference. SmartManagement.full purges the factories from the premises, so that Get.lazyPut() will only be able to be called once and your factory and references will be self-destructing. SmartManagement.keepFactory will remove its dependencies when necessary, however, it will keep the "shape" of these, to make an equal one if you need an instance of that again.  
247 -Instead of using SmartManagement.keepFactory you can use Bindings.  
248 -Bindings creates transitory factories, which are created the moment you click to go to another screen, and will be destroyed as soon as the screen-changing animation happens. It is so little time that the analyzer will not even be able to register it. When you navigate to this screen again, a new temporary factory will be called, so this is preferable to using SmartManagement.keepFactory, but if you don't want to create Bindings, or want to keep all your dependencies on the same Binding, it will certainly help you . Factories take up little memory, they don't hold instances, but a function with the "shape" of that class you want. This is very little, but since the purpose of this lib is to get the maximum performance possible using the minimum resources, Get removes even the factories by default. Use whichever is most convenient for you.  
249 336
250 -- NOTE: DO NOT USE SmartManagement.keepFactory if you are using multiple Bindings. It was designed to be used without Bindings, or with a single Binding linked in the GetMaterialApp's initialBinding. 337 +#### SmartManagement.keepFactory
  338 +
  339 +Just like SmartManagement.full, it will remove it's dependencies when it's not being used anymore. However, it will keep the their factory, which means it will recreate the dependency if you need that instance again.
  340 +
  341 +### How bindings work under the hood
  342 +Bindings creates transitory factories, which are created the moment you click to go to another screen, and will be destroyed as soon as the screen-changing animation happens.
  343 +This happens so fast that the analyzer will not even be able to register it.
  344 +When you navigate to this screen again, a new temporary factory will be called, so this is preferable to using SmartManagement.keepFactory, but if you don't want to create Bindings, or want to keep all your dependencies on the same Binding, it will certainly help you.
  345 +Factories take up little memory, they don't hold instances, but a function with the "shape" of that class you want.
  346 +This has a very low cost in memory, but since the purpose of this lib is to get the maximum performance possible using the minimum resources, Get removes even the factories by default.
  347 +Use whichever is most convenient for you.
  348 +
  349 +## Notes
  350 +
  351 +- DO NOT USE SmartManagement.keepFactory if you are using multiple Bindings. It was designed to be used without Bindings, or with a single Binding linked in the GetMaterialApp's initialBinding.
251 352
252 -- NOTE2: Using Bindings is completely optional, you can use Get.put() and Get.find() on classes that use a given controller without any problem.  
253 -However, if you work with Services or any other abstraction, I recommend using Bindings for a larger organization. 353 +- Using Bindings is completely optional, if you want you can use `Get.put()` and `Get.find()` on classes that use a given controller without any problem.
  354 +However, if you work with Services or any other abstraction, I recommend using Bindings for a better organization.
@@ -130,8 +130,8 @@ final isLogged = false.obs; @@ -130,8 +130,8 @@ final isLogged = false.obs;
130 final count = 0.obs; 130 final count = 0.obs;
131 final balance = 0.0.obs; 131 final balance = 0.0.obs;
132 final number = 0.obs; 132 final number = 0.obs;
133 -final items = <String>[];  
134 -final myMap = <String, int>{}; 133 +final items = <String>[].obs;
  134 +final myMap = <String, int>{}.obs;
135 135
136 // Custom classes - it can be any class, literally 136 // Custom classes - it can be any class, literally
137 final user = User().obs; 137 final user = User().obs;
@@ -221,9 +221,9 @@ Ahora solo necesita informar su ruta, que utilizará ese binding para establecer @@ -221,9 +221,9 @@ Ahora solo necesita informar su ruta, que utilizará ese binding para establecer
221 - Uso de rutas nombradas: 221 - Uso de rutas nombradas:
222 222
223 ```dart 223 ```dart
224 -namedRoutes: {  
225 - '/': GetRoute(Home(), binding: HomeBinding())  
226 -} 224 +getPages: [
  225 + GetPage(name: '/', page: () => Home(), binding: HomeBinding()),
  226 +]
227 ``` 227 ```
228 228
229 - Usando rutas normales: 229 - Usando rutas normales:
@@ -215,9 +215,9 @@ Agora você só precisa informar sua rota que você vai usar esse binding para f @@ -215,9 +215,9 @@ Agora você só precisa informar sua rota que você vai usar esse binding para f
215 Usando rotas nomeadas 215 Usando rotas nomeadas
216 216
217 ```dart 217 ```dart
218 -namedRoutes: {  
219 - '/': GetRoute(Home(), binding: HomeBinding())  
220 -} 218 +getPages: [
  219 + GetPage(name: '/', page: () => Home(), binding: HomeBinding()),
  220 +]
221 ``` 221 ```
222 222
223 Usando rotas normais: 223 Usando rotas normais:
@@ -237,11 +237,11 @@ void main() { @@ -237,11 +237,11 @@ void main() {
237 runApp( 237 runApp(
238 GetMaterialApp( 238 GetMaterialApp(
239 initialRoute: '/', 239 initialRoute: '/',
240 - namedRoutes: {  
241 - '/': GetRoute(page: MyHomePage()),  
242 - '/login': GetRoute(page: Login()),  
243 - '/cadastro': GetRoute(page: Cadastro(),transition: Transition.cupertino);  
244 - }, 240 + getPages: [
  241 + GetPage(name: '/', page: () => Home()),
  242 + GetPage(name: '/login', page: () => Login()),
  243 + GetPage(name: '/cadastro', page: () => Cadastro(), transition: Transition.cupertino),
  244 + ]
245 ) 245 )
246 ); 246 );
247 } 247 }
@@ -283,15 +283,15 @@ Você também pode receber parâmetros nomeados com o Get facilmente: @@ -283,15 +283,15 @@ Você também pode receber parâmetros nomeados com o Get facilmente:
283 void main() => runApp( 283 void main() => runApp(
284 GetMaterialApp( 284 GetMaterialApp(
285 initialRoute: '/', 285 initialRoute: '/',
286 - namedRoutes: {  
287 - '/': GetRoute(page: MyHomePage()), 286 + getPages: [
  287 + GetPage(name: '/', page: () => Home()),
288 /// Importante! ':user' não é uma nova rota, é somente uma 288 /// Importante! ':user' não é uma nova rota, é somente uma
289 /// especificação do parâmentro. Não use '/segunda/:user/' e '/segunda' 289 /// especificação do parâmentro. Não use '/segunda/:user/' e '/segunda'
290 /// se você precisa de uma nova rota para o user, então 290 /// se você precisa de uma nova rota para o user, então
291 /// use '/segunda/user/:user' se '/segunda' for uma rota 291 /// use '/segunda/user/:user' se '/segunda' for uma rota
292 - '/segunda/:user': GetRoute(page: Segunda()), // recebe a ID  
293 - '/terceira': GetRoute(page: Terceira(),transition: Transition.cupertino);  
294 - }, 292 + GetPage(name: '/segunda/:user', page: () => Segunda()), // recebe a ID
  293 + GetPage(name: '/terceira', page: () => Terceira(), transition: Transition.cupertino),
  294 + ]
295 ), 295 ),
296 ); 296 );
297 ``` 297 ```
@@ -489,7 +489,7 @@ Navigator( @@ -489,7 +489,7 @@ Navigator(
489 initialRoute: '/', 489 initialRoute: '/',
490 onGenerateRoute: (settings) { 490 onGenerateRoute: (settings) {
491 if (settings.name == '/') { 491 if (settings.name == '/') {
492 - return GetRouteBase( 492 + return GetPageRoute(
493 page: Scaffold( 493 page: Scaffold(
494 appBar: AppBar( 494 appBar: AppBar(
495 title: Text("Principal"), 495 title: Text("Principal"),
@@ -506,7 +506,7 @@ Navigator( @@ -506,7 +506,7 @@ Navigator(
506 ), 506 ),
507 ); 507 );
508 } else if (settings.name == '/segunda') { 508 } else if (settings.name == '/segunda') {
509 - return GetRouteBase( 509 + return GetPageRoute(
510 page: Center( 510 page: Center(
511 child: Scaffold( 511 child: Scaffold(
512 appBar: AppBar( 512 appBar: AppBar(
@@ -8,8 +8,8 @@ This project is a starting point for a Flutter application. @@ -8,8 +8,8 @@ This project is a starting point for a Flutter application.
8 8
9 A few resources to get you started if this is your first Flutter project: 9 A few resources to get you started if this is your first Flutter project:
10 10
11 -- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)  
12 -- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 11 +- [Lab: Write your first Flutter app](https://flutter.dev/documentation/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://flutter.dev/documentation/cookbook)
13 13
14 For help getting started with Flutter, view our 14 For help getting started with Flutter, view our
15 [online documentation](https://flutter.dev/docs), which offers tutorials, 15 [online documentation](https://flutter.dev/docs), which offers tutorials,
1 -sdk.dir=/home/jonny/Android/Sdk  
2 -flutter.sdk=/opt/flutter  
3 -flutter.buildMode=debug  
4 -flutter.versionName=1.0.0  
5 -flutter.versionCode=1  
@@ -73,7 +73,7 @@ packages: @@ -73,7 +73,7 @@ packages:
73 path: ".." 73 path: ".."
74 relative: true 74 relative: true
75 source: path 75 source: path
76 - version: "3.6.3" 76 + version: "3.7.0"
77 http_parser: 77 http_parser:
78 dependency: transitive 78 dependency: transitive
79 description: 79 description:
@@ -30,18 +30,6 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -30,18 +30,6 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
30 StreamController<List<E>> subject = StreamController<List<E>>.broadcast(); 30 StreamController<List<E>> subject = StreamController<List<E>>.broadcast();
31 Map<Stream<List<E>>, StreamSubscription> _subscriptions = Map(); 31 Map<Stream<List<E>>, StreamSubscription> _subscriptions = Map();
32 32
33 - /// Adds [item] only if [condition] resolves to true.  
34 - void addIf(condition, E item) {  
35 - if (condition is Condition) condition = condition();  
36 - if (condition is bool && condition) add(item);  
37 - }  
38 -  
39 - /// Adds all [items] only if [condition] resolves to true.  
40 - void addAllIf(condition, Iterable<E> items) {  
41 - if (condition is Condition) condition = condition();  
42 - if (condition is bool && condition) addAll(items);  
43 - }  
44 -  
45 operator []=(int index, E val) { 33 operator []=(int index, E val) {
46 _list[index] = val; 34 _list[index] = val;
47 subject.add(_list); 35 subject.add(_list);
@@ -64,31 +52,47 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -64,31 +52,47 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
64 subject.add(_list); 52 subject.add(_list);
65 } 53 }
66 54
  55 + @override
67 void addAll(Iterable<E> item) { 56 void addAll(Iterable<E> item) {
68 _list.addAll(item); 57 _list.addAll(item);
69 subject.add(_list); 58 subject.add(_list);
70 } 59 }
71 60
72 - /// Adds only if [item] is not null. 61 + /// Add [item] to [List<E>] only if [item] is not null.
73 void addNonNull(E item) { 62 void addNonNull(E item) {
74 if (item != null) add(item); 63 if (item != null) add(item);
75 } 64 }
76 65
77 - /// Adds only if [item] is not null. 66 + /// Add [Iterable<E>] to [List<E>] only if [Iterable<E>] is not null.
78 void addAllNonNull(Iterable<E> item) { 67 void addAllNonNull(Iterable<E> item) {
79 if (item != null) addAll(item); 68 if (item != null) addAll(item);
80 } 69 }
81 70
  71 + /// Add [item] to [List<E>] only if [condition] is true.
  72 + void addIf(dynamic condition, E item) {
  73 + if (condition is Condition) condition = condition();
  74 + if (condition is bool && condition) add(item);
  75 + }
  76 +
  77 + /// Adds [Iterable<E>] to [List<E>] only if [condition] is true.
  78 + void addAllIf(dynamic condition, Iterable<E> items) {
  79 + if (condition is Condition) condition = condition();
  80 + if (condition is bool && condition) addAll(items);
  81 + }
  82 +
  83 + @override
82 void insert(int index, E item) { 84 void insert(int index, E item) {
83 _list.insert(index, item); 85 _list.insert(index, item);
84 subject.add(_list); 86 subject.add(_list);
85 } 87 }
86 88
  89 + @override
87 void insertAll(int index, Iterable<E> iterable) { 90 void insertAll(int index, Iterable<E> iterable) {
88 _list.insertAll(index, iterable); 91 _list.insertAll(index, iterable);
89 subject.add(_list); 92 subject.add(_list);
90 } 93 }
91 94
  95 + @override
92 int get length => value.length; 96 int get length => value.length;
93 97
94 /// Removes an item from the list. 98 /// Removes an item from the list.
@@ -96,6 +100,7 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -96,6 +100,7 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
96 /// This is O(N) in the number of items in the list. 100 /// This is O(N) in the number of items in the list.
97 /// 101 ///
98 /// Returns whether the item was present in the list. 102 /// Returns whether the item was present in the list.
  103 + @override
99 bool remove(Object item) { 104 bool remove(Object item) {
100 bool hasRemoved = _list.remove(item); 105 bool hasRemoved = _list.remove(item);
101 if (hasRemoved) { 106 if (hasRemoved) {
@@ -104,38 +109,45 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -104,38 +109,45 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
104 return hasRemoved; 109 return hasRemoved;
105 } 110 }
106 111
  112 + @override
107 E removeAt(int index) { 113 E removeAt(int index) {
108 E item = _list.removeAt(index); 114 E item = _list.removeAt(index);
109 subject.add(_list); 115 subject.add(_list);
110 return item; 116 return item;
111 } 117 }
112 118
  119 + @override
113 E removeLast() { 120 E removeLast() {
114 E item = _list.removeLast(); 121 E item = _list.removeLast();
115 subject.add(_list); 122 subject.add(_list);
116 return item; 123 return item;
117 } 124 }
118 125
  126 + @override
119 void removeRange(int start, int end) { 127 void removeRange(int start, int end) {
120 _list.removeRange(start, end); 128 _list.removeRange(start, end);
121 subject.add(_list); 129 subject.add(_list);
122 } 130 }
123 131
  132 + @override
124 void removeWhere(bool Function(E) test) { 133 void removeWhere(bool Function(E) test) {
125 _list.removeWhere(test); 134 _list.removeWhere(test);
126 subject.add(_list); 135 subject.add(_list);
127 } 136 }
128 137
  138 + @override
129 void clear() { 139 void clear() {
130 _list.clear(); 140 _list.clear();
131 subject.add(_list); 141 subject.add(_list);
132 } 142 }
133 143
  144 + @override
134 void sort([int compare(E a, E b)]) { 145 void sort([int compare(E a, E b)]) {
135 _list.sort(); 146 _list.sort();
136 subject.add(_list); 147 subject.add(_list);
137 } 148 }
138 149
  150 + @override
139 close() { 151 close() {
140 _subscriptions.forEach((observable, subscription) { 152 _subscriptions.forEach((observable, subscription) {
141 subscription.cancel(); 153 subscription.cancel();
@@ -196,210 +208,219 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -196,210 +208,219 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
196 stream.listen((va) => value = va); 208 stream.listen((va) => value = va);
197 209
198 @override 210 @override
199 - E get first => _list.first; 211 + E get first => value.first;
200 212
201 @override 213 @override
202 - E get last => _list.last; 214 + E get last => value.last;
203 215
204 @override 216 @override
205 bool any(bool Function(E) test) { 217 bool any(bool Function(E) test) {
206 - return _list.any(test); 218 + return value.any(test);
207 } 219 }
208 220
209 @override 221 @override
210 Map<int, E> asMap() { 222 Map<int, E> asMap() {
211 - return _list.asMap(); 223 + return value.asMap();
212 } 224 }
213 225
214 @override 226 @override
215 List<R> cast<R>() { 227 List<R> cast<R>() {
216 - return _list.cast<R>(); 228 + return value.cast<R>();
217 } 229 }
218 230
219 @override 231 @override
220 bool contains(Object element) { 232 bool contains(Object element) {
221 - return _list.contains(element); 233 + return value.contains(element);
222 } 234 }
223 235
224 @override 236 @override
225 E elementAt(int index) { 237 E elementAt(int index) {
226 - return _list.elementAt(index); 238 + return value.elementAt(index);
227 } 239 }
228 240
229 @override 241 @override
230 bool every(bool Function(E) test) { 242 bool every(bool Function(E) test) {
231 - return _list.every(test); 243 + return value.every(test);
232 } 244 }
233 245
234 @override 246 @override
235 Iterable<T> expand<T>(Iterable<T> Function(E) f) { 247 Iterable<T> expand<T>(Iterable<T> Function(E) f) {
236 - return _list.expand(f); 248 + return value.expand(f);
237 } 249 }
238 250
239 @override 251 @override
240 void fillRange(int start, int end, [E fillValue]) { 252 void fillRange(int start, int end, [E fillValue]) {
241 _list.fillRange(start, end, fillValue); 253 _list.fillRange(start, end, fillValue);
  254 + subject.add(_list);
242 } 255 }
243 256
244 @override 257 @override
245 E firstWhere(bool Function(E) test, {E Function() orElse}) { 258 E firstWhere(bool Function(E) test, {E Function() orElse}) {
246 - return _list.firstWhere(test, orElse: orElse); 259 + return value.firstWhere(test, orElse: orElse);
247 } 260 }
248 261
249 @override 262 @override
250 T fold<T>(T initialValue, T Function(T, E) combine) { 263 T fold<T>(T initialValue, T Function(T, E) combine) {
251 - return _list.fold(initialValue, combine); 264 + return value.fold(initialValue, combine);
252 } 265 }
253 266
254 @override 267 @override
255 Iterable<E> followedBy(Iterable<E> other) { 268 Iterable<E> followedBy(Iterable<E> other) {
256 - return _list.followedBy(other); 269 + return value.followedBy(other);
257 } 270 }
258 271
259 @override 272 @override
260 void forEach(void Function(E) f) { 273 void forEach(void Function(E) f) {
261 - _list.forEach(f); 274 + value.forEach(f);
262 } 275 }
263 276
264 @override 277 @override
265 Iterable<E> getRange(int start, int end) { 278 Iterable<E> getRange(int start, int end) {
266 - return _list.getRange(start, end); 279 + return value.getRange(start, end);
267 } 280 }
268 281
269 @override 282 @override
270 int indexOf(E element, [int start = 0]) { 283 int indexOf(E element, [int start = 0]) {
271 - return _list.indexOf(element, start); 284 + return value.indexOf(element, start);
272 } 285 }
273 286
274 @override 287 @override
275 int indexWhere(bool Function(E) test, [int start = 0]) { 288 int indexWhere(bool Function(E) test, [int start = 0]) {
276 - return _list.indexWhere(test, start); 289 + return value.indexWhere(test, start);
277 } 290 }
278 291
279 @override 292 @override
280 String join([String separator = ""]) { 293 String join([String separator = ""]) {
281 - return _list.join(separator); 294 + return value.join(separator);
282 } 295 }
283 296
284 @override 297 @override
285 int lastIndexOf(E element, [int start]) { 298 int lastIndexOf(E element, [int start]) {
286 - return _list.lastIndexOf(element, start); 299 + return value.lastIndexOf(element, start);
287 } 300 }
288 301
289 @override 302 @override
290 int lastIndexWhere(bool Function(E) test, [int start]) { 303 int lastIndexWhere(bool Function(E) test, [int start]) {
291 - return _list.lastIndexWhere(test, start); 304 + return value.lastIndexWhere(test, start);
292 } 305 }
293 306
294 @override 307 @override
295 E lastWhere(bool Function(E) test, {E Function() orElse}) { 308 E lastWhere(bool Function(E) test, {E Function() orElse}) {
296 - return _list.lastWhere(test, orElse: orElse); 309 + return value.lastWhere(test, orElse: orElse);
297 } 310 }
298 311
299 @override 312 @override
300 set length(int newLength) { 313 set length(int newLength) {
301 _list.length = newLength; 314 _list.length = newLength;
  315 + subject.add(_list);
302 } 316 }
303 317
304 @override 318 @override
305 Iterable<T> map<T>(T Function(E) f) { 319 Iterable<T> map<T>(T Function(E) f) {
306 - return _list.map(f); 320 + return value.map(f);
307 } 321 }
308 322
309 @override 323 @override
310 E reduce(E Function(E, E) combine) { 324 E reduce(E Function(E, E) combine) {
311 - return _list.reduce(combine); 325 + return value.reduce(combine);
312 } 326 }
313 327
314 @override 328 @override
315 void replaceRange(int start, int end, Iterable<E> replacement) { 329 void replaceRange(int start, int end, Iterable<E> replacement) {
316 _list.replaceRange(start, end, replacement); 330 _list.replaceRange(start, end, replacement);
  331 + subject.add(_list);
317 } 332 }
318 333
319 @override 334 @override
320 void retainWhere(bool Function(E) test) { 335 void retainWhere(bool Function(E) test) {
321 _list.retainWhere(test); 336 _list.retainWhere(test);
  337 + subject.add(_list);
322 } 338 }
323 339
324 @override 340 @override
325 - Iterable<E> get reversed => _list.reversed; 341 + Iterable<E> get reversed => value.reversed;
326 342
327 @override 343 @override
328 void setAll(int index, Iterable<E> iterable) { 344 void setAll(int index, Iterable<E> iterable) {
329 _list.setAll(index, iterable); 345 _list.setAll(index, iterable);
  346 + subject.add(_list);
330 } 347 }
331 348
332 @override 349 @override
333 void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) { 350 void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
334 _list.setRange(start, end, iterable, skipCount); 351 _list.setRange(start, end, iterable, skipCount);
  352 + subject.add(_list);
335 } 353 }
336 354
337 @override 355 @override
338 void shuffle([Random random]) { 356 void shuffle([Random random]) {
339 _list.shuffle(random); 357 _list.shuffle(random);
  358 + subject.add(_list);
340 } 359 }
341 360
342 @override 361 @override
343 - E get single => _list.single; 362 + E get single => value.single;
344 363
345 @override 364 @override
346 E singleWhere(bool Function(E) test, {E Function() orElse}) { 365 E singleWhere(bool Function(E) test, {E Function() orElse}) {
347 - return _list.singleWhere(test, orElse: orElse); 366 + return value.singleWhere(test, orElse: orElse);
348 } 367 }
349 368
350 @override 369 @override
351 Iterable<E> skip(int count) { 370 Iterable<E> skip(int count) {
352 - return _list.skip(count); 371 + return value.skip(count);
353 } 372 }
354 373
355 @override 374 @override
356 Iterable<E> skipWhile(bool Function(E) test) { 375 Iterable<E> skipWhile(bool Function(E) test) {
357 - return _list.skipWhile(test); 376 + return value.skipWhile(test);
358 } 377 }
359 378
360 @override 379 @override
361 List<E> sublist(int start, [int end]) { 380 List<E> sublist(int start, [int end]) {
362 - return _list.sublist(start, end); 381 + return value.sublist(start, end);
363 } 382 }
364 383
365 @override 384 @override
366 Iterable<E> take(int count) { 385 Iterable<E> take(int count) {
367 - return _list.take(count); 386 + return value.take(count);
368 } 387 }
369 388
370 @override 389 @override
371 Iterable<E> takeWhile(bool Function(E) test) { 390 Iterable<E> takeWhile(bool Function(E) test) {
372 - return _list.takeWhile(test); 391 + return value.takeWhile(test);
373 } 392 }
374 393
375 @override 394 @override
376 List<E> toList({bool growable = true}) { 395 List<E> toList({bool growable = true}) {
377 - return _list.toList(growable: growable); 396 + return value.toList(growable: growable);
378 } 397 }
379 398
380 @override 399 @override
381 Set<E> toSet() { 400 Set<E> toSet() {
382 - return _list.toSet(); 401 + return value.toSet();
383 } 402 }
384 403
385 @override 404 @override
386 Iterable<E> where(bool Function(E) test) { 405 Iterable<E> where(bool Function(E) test) {
387 - return _list.where(test); 406 + return value.where(test);
388 } 407 }
389 408
390 @override 409 @override
391 Iterable<T> whereType<T>() { 410 Iterable<T> whereType<T>() {
392 - return _list.whereType<T>(); 411 + return value.whereType<T>();
393 } 412 }
394 413
395 @override 414 @override
396 set first(E value) { 415 set first(E value) {
397 _list.first = value; 416 _list.first = value;
  417 + subject.add(_list);
398 } 418 }
399 419
400 @override 420 @override
401 set last(E value) { 421 set last(E value) {
402 _list.last = value; 422 _list.last = value;
  423 + subject.add(_list);
403 } 424 }
404 } 425 }
405 426
@@ -4,7 +4,7 @@ import '../../../../get.dart'; @@ -4,7 +4,7 @@ import '../../../../get.dart';
4 import '../rx_core/rx_interface.dart'; 4 import '../rx_core/rx_interface.dart';
5 import '../rx_typedefs/rx_typedefs.dart'; 5 import '../rx_typedefs/rx_typedefs.dart';
6 6
7 -class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> { 7 +class RxMap<K, V> implements RxInterface<Map<K, V>>, Map<K, V> {
8 RxMap([Map<K, V> initial]) { 8 RxMap([Map<K, V> initial]) {
9 _value = initial; 9 _value = initial;
10 } 10 }
@@ -111,20 +111,20 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> { @@ -111,20 +111,20 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> {
111 } 111 }
112 112
113 @override 113 @override
114 - Map<K2, V2> cast<K2, V2>() => _value.cast<K2, V2>(); 114 + Map<K2, V2> cast<K2, V2>() => value.cast<K2, V2>();
115 115
116 @override 116 @override
117 - bool containsKey(Object key) => _value.containsKey(key); 117 + bool containsKey(Object key) => value.containsKey(key);
118 118
119 @override 119 @override
120 bool containsValue(Object value) => _value.containsValue(value); 120 bool containsValue(Object value) => _value.containsValue(value);
121 121
122 @override 122 @override
123 - Iterable<MapEntry<K, V>> get entries => _value.entries; 123 + Iterable<MapEntry<K, V>> get entries => value.entries;
124 124
125 @override 125 @override
126 void forEach(void Function(K, V) f) { 126 void forEach(void Function(K, V) f) {
127 - _value.forEach(f); 127 + value.forEach(f);
128 } 128 }
129 129
130 @override 130 @override
@@ -134,7 +134,7 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> { @@ -134,7 +134,7 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> {
134 bool get isNotEmpty => value.isNotEmpty; 134 bool get isNotEmpty => value.isNotEmpty;
135 135
136 @override 136 @override
137 - Iterable<K> get keys => _value.keys; 137 + Iterable<K> get keys => value.keys;
138 138
139 @override 139 @override
140 int get length => value.length; 140 int get length => value.length;
@@ -8,10 +8,10 @@ import '../rx_typedefs/rx_typedefs.dart'; @@ -8,10 +8,10 @@ import '../rx_typedefs/rx_typedefs.dart';
8 8
9 class RxSet<E> implements Set<E>, RxInterface<Set<E>> { 9 class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
10 RxSet([Set<E> initial]) { 10 RxSet([Set<E> initial]) {
11 - _list = initial; 11 + _set = initial;
12 } 12 }
13 13
14 - RxSet<E> _list = Set<E>(); 14 + RxSet<E> _set = Set<E>();
15 15
16 @override 16 @override
17 Iterator<E> get iterator => value.iterator; 17 Iterator<E> get iterator => value.iterator;
@@ -42,28 +42,28 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -42,28 +42,28 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
42 } 42 }
43 43
44 operator []=(int index, E val) { 44 operator []=(int index, E val) {
45 - _list[index] = val;  
46 - subject.add(_list); 45 + _set[index] = val;
  46 + subject.add(_set);
47 } 47 }
48 48
49 /// Special override to push() element(s) in a reactive way 49 /// Special override to push() element(s) in a reactive way
50 /// inside the List, 50 /// inside the List,
51 RxSet<E> operator +(Iterable<E> val) { 51 RxSet<E> operator +(Iterable<E> val) {
52 addAll(val); 52 addAll(val);
53 - subject.add(_list); 53 + subject.add(_set);
54 return this; 54 return this;
55 } 55 }
56 56
57 @override 57 @override
58 bool add(E value) { 58 bool add(E value) {
59 - final val = _list.add(value);  
60 - subject.add(_list); 59 + final val = _set.add(value);
  60 + subject.add(_set);
61 return val; 61 return val;
62 } 62 }
63 63
64 void addAll(Iterable<E> item) { 64 void addAll(Iterable<E> item) {
65 - _list.addAll(item);  
66 - subject.add(_list); 65 + _set.addAll(item);
  66 + subject.add(_set);
67 } 67 }
68 68
69 /// Adds only if [item] is not null. 69 /// Adds only if [item] is not null.
@@ -77,13 +77,13 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -77,13 +77,13 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
77 } 77 }
78 78
79 void insert(int index, E item) { 79 void insert(int index, E item) {
80 - _list.insert(index, item);  
81 - subject.add(_list); 80 + _set.insert(index, item);
  81 + subject.add(_set);
82 } 82 }
83 83
84 void insertAll(int index, Iterable<E> iterable) { 84 void insertAll(int index, Iterable<E> iterable) {
85 - _list.insertAll(index, iterable);  
86 - subject.add(_list); 85 + _set.insertAll(index, iterable);
  86 + subject.add(_set);
87 } 87 }
88 88
89 int get length => value.length; 89 int get length => value.length;
@@ -94,43 +94,43 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -94,43 +94,43 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
94 /// 94 ///
95 /// Returns whether the item was present in the list. 95 /// Returns whether the item was present in the list.
96 bool remove(Object item) { 96 bool remove(Object item) {
97 - bool hasRemoved = _list.remove(item); 97 + bool hasRemoved = _set.remove(item);
98 if (hasRemoved) { 98 if (hasRemoved) {
99 - subject.add(_list); 99 + subject.add(_set);
100 } 100 }
101 return hasRemoved; 101 return hasRemoved;
102 } 102 }
103 103
104 E removeAt(int index) { 104 E removeAt(int index) {
105 - E item = _list.removeAt(index);  
106 - subject.add(_list); 105 + E item = _set.removeAt(index);
  106 + subject.add(_set);
107 return item; 107 return item;
108 } 108 }
109 109
110 E removeLast() { 110 E removeLast() {
111 - E item = _list.removeLast();  
112 - subject.add(_list); 111 + E item = _set.removeLast();
  112 + subject.add(_set);
113 return item; 113 return item;
114 } 114 }
115 115
116 void removeRange(int start, int end) { 116 void removeRange(int start, int end) {
117 - _list.removeRange(start, end);  
118 - subject.add(_list); 117 + _set.removeRange(start, end);
  118 + subject.add(_set);
119 } 119 }
120 120
121 void removeWhere(bool Function(E) test) { 121 void removeWhere(bool Function(E) test) {
122 - _list.removeWhere(test);  
123 - subject.add(_list); 122 + _set.removeWhere(test);
  123 + subject.add(_set);
124 } 124 }
125 125
126 void clear() { 126 void clear() {
127 - _list.clear();  
128 - subject.add(_list); 127 + _set.clear();
  128 + subject.add(_set);
129 } 129 }
130 130
131 void sort([int compare(E a, E b)]) { 131 void sort([int compare(E a, E b)]) {
132 - _list.sort();  
133 - subject.add(_list); 132 + _set.sort();
  133 + subject.add(_set);
134 } 134 }
135 135
136 close() { 136 close() {
@@ -149,7 +149,7 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -149,7 +149,7 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
149 149
150 void update(void fn(Iterable<E> value)) { 150 void update(void fn(Iterable<E> value)) {
151 fn(value); 151 fn(value);
152 - subject.add(_list); 152 + subject.add(_set);
153 } 153 }
154 154
155 /// Replaces all existing items of this list with [items] 155 /// Replaces all existing items of this list with [items]
@@ -163,7 +163,7 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -163,7 +163,7 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
163 if (getObs != null) { 163 if (getObs != null) {
164 getObs.addListener(subject.stream); 164 getObs.addListener(subject.stream);
165 } 165 }
166 - return _list; 166 + return _set;
167 } 167 }
168 168
169 String get string => value.toString(); 169 String get string => value.toString();
@@ -178,9 +178,9 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -178,9 +178,9 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
178 } 178 }
179 179
180 set value(Iterable<E> val) { 180 set value(Iterable<E> val) {
181 - if (_list == val) return;  
182 - _list = val;  
183 - subject.add(_list); 181 + if (_set == val) return;
  182 + _set = val;
  183 + subject.add(_set);
184 } 184 }
185 185
186 Stream<Set<E>> get stream => subject.stream; 186 Stream<Set<E>> get stream => subject.stream;
@@ -193,167 +193,170 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -193,167 +193,170 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
193 stream.listen((va) => value = va); 193 stream.listen((va) => value = va);
194 194
195 @override 195 @override
196 - E get first => _list.first; 196 + E get first => value.first;
197 197
198 @override 198 @override
199 - E get last => _list.last; 199 + E get last => value.last;
200 200
201 @override 201 @override
202 bool any(bool Function(E) test) { 202 bool any(bool Function(E) test) {
203 - return _list.any(test); 203 + return value.any(test);
204 } 204 }
205 205
206 @override 206 @override
207 Set<R> cast<R>() { 207 Set<R> cast<R>() {
208 - return _list.cast<R>(); 208 + return value.cast<R>();
209 } 209 }
210 210
211 @override 211 @override
212 bool contains(Object element) { 212 bool contains(Object element) {
213 - return _list.contains(element); 213 + return value.contains(element);
214 } 214 }
215 215
216 @override 216 @override
217 E elementAt(int index) { 217 E elementAt(int index) {
218 - return _list.elementAt(index); 218 + return value.elementAt(index);
219 } 219 }
220 220
221 @override 221 @override
222 bool every(bool Function(E) test) { 222 bool every(bool Function(E) test) {
223 - return _list.every(test); 223 + return value.every(test);
224 } 224 }
225 225
226 @override 226 @override
227 Iterable<T> expand<T>(Iterable<T> Function(E) f) { 227 Iterable<T> expand<T>(Iterable<T> Function(E) f) {
228 - return _list.expand(f); 228 + return value.expand(f);
229 } 229 }
230 230
231 @override 231 @override
232 E firstWhere(bool Function(E) test, {E Function() orElse}) { 232 E firstWhere(bool Function(E) test, {E Function() orElse}) {
233 - return _list.firstWhere(test, orElse: orElse); 233 + return value.firstWhere(test, orElse: orElse);
234 } 234 }
235 235
236 @override 236 @override
237 T fold<T>(T initialValue, T Function(T, E) combine) { 237 T fold<T>(T initialValue, T Function(T, E) combine) {
238 - return _list.fold(initialValue, combine); 238 + return value.fold(initialValue, combine);
239 } 239 }
240 240
241 @override 241 @override
242 Iterable<E> followedBy(Iterable<E> other) { 242 Iterable<E> followedBy(Iterable<E> other) {
243 - return _list.followedBy(other); 243 + return value.followedBy(other);
244 } 244 }
245 245
246 @override 246 @override
247 void forEach(void Function(E) f) { 247 void forEach(void Function(E) f) {
248 - _list.forEach(f); 248 + value.forEach(f);
249 } 249 }
250 250
251 @override 251 @override
252 String join([String separator = ""]) { 252 String join([String separator = ""]) {
253 - return _list.join(separator); 253 + return value.join(separator);
254 } 254 }
255 255
256 @override 256 @override
257 E lastWhere(bool Function(E) test, {E Function() orElse}) { 257 E lastWhere(bool Function(E) test, {E Function() orElse}) {
258 - return _list.lastWhere(test, orElse: orElse); 258 + return value.lastWhere(test, orElse: orElse);
259 } 259 }
260 260
261 @override 261 @override
262 Iterable<T> map<T>(T Function(E) f) { 262 Iterable<T> map<T>(T Function(E) f) {
263 - return _list.map(f); 263 + return value.map(f);
264 } 264 }
265 265
266 @override 266 @override
267 E reduce(E Function(E, E) combine) { 267 E reduce(E Function(E, E) combine) {
268 - return _list.reduce(combine); 268 + return value.reduce(combine);
269 } 269 }
270 270
271 @override 271 @override
272 - E get single => _list.single; 272 + E get single => value.single;
273 273
274 @override 274 @override
275 E singleWhere(bool Function(E) test, {E Function() orElse}) { 275 E singleWhere(bool Function(E) test, {E Function() orElse}) {
276 - return _list.singleWhere(test, orElse: orElse); 276 + return value.singleWhere(test, orElse: orElse);
277 } 277 }
278 278
279 @override 279 @override
280 Iterable<E> skip(int count) { 280 Iterable<E> skip(int count) {
281 - return _list.skip(count); 281 + return value.skip(count);
282 } 282 }
283 283
284 @override 284 @override
285 Iterable<E> skipWhile(bool Function(E) test) { 285 Iterable<E> skipWhile(bool Function(E) test) {
286 - return _list.skipWhile(test); 286 + return value.skipWhile(test);
287 } 287 }
288 288
289 @override 289 @override
290 Iterable<E> take(int count) { 290 Iterable<E> take(int count) {
291 - return _list.take(count); 291 + return value.take(count);
292 } 292 }
293 293
294 @override 294 @override
295 Iterable<E> takeWhile(bool Function(E) test) { 295 Iterable<E> takeWhile(bool Function(E) test) {
296 - return _list.takeWhile(test); 296 + return value.takeWhile(test);
297 } 297 }
298 298
299 @override 299 @override
300 List<E> toList({bool growable = true}) { 300 List<E> toList({bool growable = true}) {
301 - return _list.toList(growable: growable); 301 + return value.toList(growable: growable);
302 } 302 }
303 303
304 @override 304 @override
305 Set<E> toSet() { 305 Set<E> toSet() {
306 - return _list.toSet(); 306 + return value.toSet();
307 } 307 }
308 308
309 @override 309 @override
310 Iterable<E> where(bool Function(E) test) { 310 Iterable<E> where(bool Function(E) test) {
311 - return _list.where(test); 311 + return value.where(test);
312 } 312 }
313 313
314 @override 314 @override
315 Iterable<T> whereType<T>() { 315 Iterable<T> whereType<T>() {
316 - return _list.whereType<T>(); 316 + return value.whereType<T>();
317 } 317 }
318 318
319 @override 319 @override
320 bool containsAll(Iterable<Object> other) { 320 bool containsAll(Iterable<Object> other) {
321 - return _list.containsAll(other); 321 + return value.containsAll(other);
322 } 322 }
323 323
324 @override 324 @override
325 Set<E> difference(Set<Object> other) { 325 Set<E> difference(Set<Object> other) {
326 - return _list.difference(other); 326 + return value.difference(other);
327 } 327 }
328 328
329 @override 329 @override
330 Set<E> intersection(Set<Object> other) { 330 Set<E> intersection(Set<Object> other) {
331 - return _list.intersection(other); 331 + return value.intersection(other);
332 } 332 }
333 333
334 @override 334 @override
335 E lookup(Object object) { 335 E lookup(Object object) {
336 - return _list.lookup(object); 336 + return value.lookup(object);
337 } 337 }
338 338
339 @override 339 @override
340 void removeAll(Iterable<Object> elements) { 340 void removeAll(Iterable<Object> elements) {
341 - _list.removeAll(elements); 341 + _set.removeAll(elements);
  342 + subject.add(_set);
342 } 343 }
343 344
344 @override 345 @override
345 void retainAll(Iterable<Object> elements) { 346 void retainAll(Iterable<Object> elements) {
346 - _list.retainAll(elements); 347 + _set.retainAll(elements);
  348 + subject.add(_set);
347 } 349 }
348 350
349 @override 351 @override
350 void retainWhere(bool Function(E) E) { 352 void retainWhere(bool Function(E) E) {
351 - _list.retainWhere(E); 353 + _set.retainWhere(E);
  354 + subject.add(_set);
352 } 355 }
353 356
354 @override 357 @override
355 Set<E> union(Set<E> other) { 358 Set<E> union(Set<E> other) {
356 - return _list.union(other); 359 + return value.union(other);
357 } 360 }
358 } 361 }
359 362
@@ -3,26 +3,6 @@ import '../regex/get_utils.dart'; @@ -3,26 +3,6 @@ import '../regex/get_utils.dart';
3 extension GetDynamicUtils on dynamic { 3 extension GetDynamicUtils on dynamic {
4 /// It's This is overloading the IDE's options. Only the most useful and popular options will stay here. 4 /// It's This is overloading the IDE's options. Only the most useful and popular options will stay here.
5 5
6 - /// In dart2js (in flutter v1.17) a var by default is undefined.  
7 - /// *Use this only if you are in version <- 1.17*.  
8 - /// So we assure the null type in json convertions to avoid the "value":value==null?null:value;  
9 - /// someVar.nil will force the null type if the var is null or undefined.  
10 - /// `nil` taken from ObjC just to have a shorter sintax.  
11 - dynamic get nil => GetUtils.nil(this);  
12 bool get isNull => GetUtils.isNull(this); 6 bool get isNull => GetUtils.isNull(this);
13 bool get isNullOrBlank => GetUtils.isNullOrBlank(this); 7 bool get isNullOrBlank => GetUtils.isNullOrBlank(this);
14 -  
15 - // bool get isOneAKind => GetUtils.isOneAKind(this);  
16 - // bool isLengthLowerThan(int maxLength) =>  
17 - // GetUtils.isLengthLowerThan(this, maxLength);  
18 - // bool isLengthGreaterThan(int maxLength) =>  
19 - // GetUtils.isLengthGreaterThan(this, maxLength);  
20 - // bool isLengthGreaterOrEqual(int maxLength) =>  
21 - // GetUtils.isLengthGreaterOrEqual(this, maxLength);  
22 - // bool isLengthLowerOrEqual(int maxLength) =>  
23 - // GetUtils.isLengthLowerOrEqual(this, maxLength);  
24 - // bool isLengthEqualTo(int maxLength) =>  
25 - // GetUtils.isLengthEqualTo(this, maxLength);  
26 - // bool isLengthBetween(int minLength, int maxLength) =>  
27 - // GetUtils.isLengthBetween(this, minLength, maxLength);  
28 } 8 }
@@ -482,6 +482,4 @@ class GetUtils { @@ -482,6 +482,4 @@ class GetUtils {
482 482
483 static bool hasMatch(String s, Pattern p) => 483 static bool hasMatch(String s, Pattern p) =>
484 (s == null) ? false : RegExp(p).hasMatch(s); 484 (s == null) ? false : RegExp(p).hasMatch(s);
485 -  
486 -  
487 } 485 }
1 name: get 1 name: get
2 description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX. 2 description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX.
3 -version: 3.6.3 3 +version: 3.7.0
4 homepage: https://github.com/jonataslaw/get 4 homepage: https://github.com/jonataslaw/get
5 5
6 environment: 6 environment:
  1 +@TestOn('vm')
1 import 'dart:io'; 2 import 'dart:io';
2 -  
3 import 'package:flutter_test/flutter_test.dart'; 3 import 'package:flutter_test/flutter_test.dart';
4 -import 'package:get/get.dart';  
5 -import 'package:get/src/utils/platform/platform_web.dart'; 4 +import 'package:get/src/utils/platform/platform.dart';
6 5
7 void main() { 6 void main() {
8 test('Platform test', () { 7 test('Platform test', () {
@@ -13,12 +12,5 @@ void main() { @@ -13,12 +12,5 @@ void main() {
13 expect(GetPlatform.isMacOS, Platform.isMacOS); 12 expect(GetPlatform.isMacOS, Platform.isMacOS);
14 expect(GetPlatform.isWindows, Platform.isWindows); 13 expect(GetPlatform.isWindows, Platform.isWindows);
15 expect(GetPlatform.isWeb, false); 14 expect(GetPlatform.isWeb, false);
16 - expect(GeneralPlatform.isWeb, true);  
17 - expect(GeneralPlatform.isAndroid, false);  
18 - expect(GeneralPlatform.isIOS, false);  
19 - expect(GeneralPlatform.isFuchsia, false);  
20 - expect(GeneralPlatform.isLinux, false);  
21 - expect(GeneralPlatform.isMacOS, false);  
22 - expect(GeneralPlatform.isWindows, false);  
23 }); 15 });
24 } 16 }
  1 +@TestOn('browser')
  2 +import 'dart:io';
  3 +import 'package:flutter_test/flutter_test.dart';
  4 +import 'package:get/src/utils/platform/platform.dart';
  5 +
  6 +void main() {
  7 + test('Platform test', () {
  8 + expect(GetPlatform.isAndroid, Platform.isAndroid);
  9 + expect(GetPlatform.isIOS, Platform.isIOS);
  10 + expect(GetPlatform.isFuchsia, Platform.isFuchsia);
  11 + expect(GetPlatform.isLinux, Platform.isLinux);
  12 + expect(GetPlatform.isMacOS, Platform.isMacOS);
  13 + expect(GetPlatform.isWindows, Platform.isWindows);
  14 + expect(GetPlatform.isWeb, true);
  15 + });
  16 +}
@@ -11,7 +11,7 @@ void main() { @@ -11,7 +11,7 @@ void main() {
11 ); 11 );
12 12
13 testWidgets( 13 testWidgets(
14 - "GetRoute maintainState null", 14 + "GetPage maintainState null",
15 (WidgetTester testr) async { 15 (WidgetTester testr) async {
16 expect( 16 expect(
17 () => GetPage(page: () => Scaffold(), maintainState: null, name: '/'), 17 () => GetPage(page: () => Scaffold(), maintainState: null, name: '/'),
@@ -20,7 +20,7 @@ void main() { @@ -20,7 +20,7 @@ void main() {
20 ); 20 );
21 21
22 testWidgets( 22 testWidgets(
23 - "GetRoute name null", 23 + "GetPage name null",
24 (WidgetTester testr) async { 24 (WidgetTester testr) async {
25 expect( 25 expect(
26 () => 26 () =>
@@ -30,7 +30,7 @@ void main() { @@ -30,7 +30,7 @@ void main() {
30 ); 30 );
31 31
32 testWidgets( 32 testWidgets(
33 - "GetRoute fullscreenDialog null", 33 + "GetPage fullscreenDialog null",
34 (WidgetTester testr) async { 34 (WidgetTester testr) async {
35 expect( 35 expect(
36 () => GetPage( 36 () => GetPage(