Shiro126

Prepare to refactor

  1 +{
  2 + "cSpell.enableFiletypes": [
  3 + "markdown"
  4 + ]
  5 +}
@@ -249,10 +249,7 @@ Controller controller = Get.put(Controller()); // Rather Controller controller = @@ -249,10 +249,7 @@ Controller controller = Get.put(Controller()); // Rather Controller controller =
249 ``` 249 ```
250 250
251 - 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. 251 - 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.
252 -  
253 -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.  
254 -So you can use your controller (or class Bloc) normally  
255 - 252 +https://github.com/jonataslaw/ge
256 **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 253 **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
257 254
258 ```dart 255 ```dart
@@ -457,7 +454,7 @@ GetMaterialApp( @@ -457,7 +454,7 @@ GetMaterialApp(
457 opaqueRoute: Get.isOpaqueRouteDefault, 454 opaqueRoute: Get.isOpaqueRouteDefault,
458 popGesture: Get.isPopGestureEnable, 455 popGesture: Get.isPopGestureEnable,
459 transitionDuration: Get.defaultDurationTransition, 456 transitionDuration: Get.defaultDurationTransition,
460 - defaultGlobalState: Get.defaultGlobalState, 457 + defaultGlobalState: Get.defaultGlobalState,https://github.com/jonataslaw/ge
461 ); 458 );
462 459
463 Get.config( 460 Get.config(
  1 +<a href="https://www.buymeacoffee.com/jonataslaw" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" align="right" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important; box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" > </a>
  2 +![](get.png)
  3 +
  4 +*Languages: [English](README.md), [Brazilian Portuguese](README.pt-br.md), [Polish]().*
  5 +
  6 +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get)
  7 +![building](https://github.com/jonataslaw/get/workflows/Test,%20build%20and%20deploy/badge.svg)
  8 +[![Gitter](https://badges.gitter.im/flutter_get/community.svg)](https://gitter.im/flutter_get/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
  9 +<a href="https://github.com/Solido/awesome-flutter">
  10 + <img alt="Awesome Flutter" src="https://img.shields.io/badge/Awesome-Flutter-blue.svg?longCache=true&style=flat-square" />
  11 +</a>
  12 +
  13 +Gry jest bardzo lekką i potężną biblioteką do Flattera, która da Ci supermoce i zwiększy produktywność w tworzeniu projektu. Nawiguj bez podawania kontekstu, używaj open dialogów, snackbarów oraz bottomsheetów z każdego miejsca w kodzie. Zarządzaj stanami i dodawaj dependencies w prosty i praktyczny sposób! Get jest bezpieczny, stabilny i aktualny. Oprócz tego oferuje szeroki zakres API, które nie są zawarte w standardowym frameworku.
  14 +
  15 +## Wprowadzenie
  16 +
  17 +Konwencjonalna nawigacja we Flutterze posiada dużo niepotrzebnej obudowy wokół siebie. Takiej jak podawanie kontekstu. Do tego open dialogi oraz używanie snackbarów, co jest nudne i nużące. Ta biblioteką zmieni sposób w jaki pracujesz z Frameworkiem i oszczędzi Ci czas stracony na pisaniu niepotrzebnego kodu zwiększy to produktywność i zapewniając najnowsze podejście w temacie zarządzania stanami, ścieżkami i dependencies.
  18 +- **[Użycie](#wprowadzenie)**
  19 +- **[Nawigacja bez named routes](#nawigój-bez-named-routes)**
  20 +- **[SnackBars](#snackbars)**
  21 +- **[Dialogi](#dialogi)**
  22 +- **[BottomSheets]()**
  23 +- **[Prosty Menadżer Stanów]()**
  24 +- **[Reaktywny Menadżer Stanów]()**
  25 +- **[Przypisania]()**
  26 +- **[Workery]()**
  27 +- **[Nawigacja z named routes]()**
  28 +- **[Przekazywanie danych do named routes]()**
  29 +- **[Dynamiczne linki URL]()**
  30 +- **[Oprogramowanie pośrednie]()**
  31 +- **[Opcjonalne ustawienia globalne]()**
  32 +- **[Zagnieżdżone nawigatory]()**
  33 +- **[Inne zaawansowane API i manualne konfigurację]()**
  34 +
  35 +Możesz uczestniczyć w rozwoju projektu na różny sposób:
  36 +- Pomagając w tłumaczeniu readme na inne języki.
  37 +- Dodając dokumentację do readme ( nawet nie połowa funkcji została jeszcze opisana).
  38 +- Pisząc artykuły i nagrywając filmy uczące użycia biblioteki Get (będą zamieszczone w readme, a w przyszłości na naszej Wiki).
  39 +- Oferując PR-y dla kodu i testów.
  40 +- Dodając nowe funkcje.
  41 +
  42 +Każda współpraca jest mile widziana!
  43 +
  44 +## Nawiguj bez named routes
  45 +By nawigować do nowego ekranu:
  46 +
  47 +```dart
  48 +Get.to(NextScreen());
  49 +```
  50 +
  51 +By powrócić do poprzedniego ekranu
  52 +
  53 +```dart
  54 +Get.back();
  55 +```
  56 +
  57 +By przejść do następnego ekranu bez możliwości powrotu do poprzedniego (do zastosowania SplashScreenów, ekranów logowania itd.)
  58 +
  59 +```dart
  60 +Get.off(NextScreen());
  61 +```
  62 +
  63 +By przejść do następnego ekranu niszcząc poprzednie routy (użyteczne w koszykach, ankietach i testach)
  64 +
  65 +```dart
  66 +Get.offAll(NextScreen());
  67 +```
  68 +
  69 +By nawigować do następnego routa i otrzymać, lub uaktualnić dane zaraz po tym jak z niego wrócisz:
  70 +```dart
  71 +var data = await Get.to(Payment());
  72 +```
  73 +w innym ekranie wyślij dane z poprzedniego routa:
  74 +
  75 +```dart
  76 +Get.back(result: 'sucess');
  77 +```
  78 +I użyj następujące np.:
  79 +```dart
  80 +if(data == 'sucess') madeAnything();
  81 +```
  82 +
  83 +Nie chcesz się uczyć naszej składni?
  84 +Wystarczy, że zmienisz 'Nawigator' (upercase) na 'navigator' (lowercase), a będziesz mieć wszystkie funkcjonalności standardowej nawigacji, bez konieczności używania kontekstu.
  85 +
  86 +Przykład:
  87 +
  88 +```dart
  89 +
  90 +// Standardowa nawigacja we Flatterze
  91 +Navigator.of(context).push(
  92 + context,
  93 + MaterialPageRoute(
  94 + builder: (BuildContext context) {
  95 + return HomePage();
  96 + },
  97 + ),
  98 +);
  99 +
  100 +// Zacznij używać Flatterowej składni bez podawania kontekstu
  101 +navigator.push(
  102 + MaterialPageRoute(
  103 + builder: (_) {
  104 + return HomePage();
  105 + },
  106 + ),
  107 +);
  108 +
  109 +// Składnia Get (Jest lepsza, choć oczywiście każdy może mieć własne zdanie))
  110 +Get.to(HomePage());
  111 +
  112 +
  113 +```
  114 +### SnackBars
  115 +
  116 +By wykorzystać SnackBar we Flatterze musisz podać context Scaffoldu, albo musisz użyć GlobalKey przypisanego do Scaffolda.
  117 +```dart
  118 +final snackBar = SnackBar(
  119 + content: Text('Cześć!'),
  120 + action: SnackBarAction(
  121 + label: 'Jestem starym i brzydkim snackbarem :(',
  122 + onPressed: (){}
  123 + ),
  124 +);
  125 +// Znajdź Scaffold w drzewie widżetów i użyj
  126 +// go do pokazania SnackBara.
  127 +Scaffold.of(context).showSnackBar(snackBar);
  128 +```
  129 +Z wykorzystaniem Get:
  130 +
  131 +```dart
  132 +Get.snackbar('Cześć!', 'Jestem nowoczesnym snackbar');
  133 +```
  134 +Z Get wszystko co musisz zrobić to wywołać swój Get.snackbar gdziekolwiek w swoim kodzie i dostosować go jak tylko chcesz!
  135 +
  136 +```dart
  137 +Get.snackbar(
  138 + "Hej, jestem Get Snackbar!", // title
  139 + "Niewiarygodne! Używam SnackBara bez context, miepotrzebnego opakowania i Scaffoldu, jest to naprawdę niesamowite!", // message
  140 + icon: Icon(Icons.alarm),
  141 + shouldIconPulse: true,
  142 + onTap:(){},
  143 + barBlur: 20,
  144 + isDismissible: true,
  145 + duration: Duration(seconds: 3),
  146 +);
  147 +
  148 +
  149 + ////////// ALL FEATURES //////////
  150 + // Color colorText,
  151 + // Duration duration,
  152 + // SnackPosition snackPosition,
  153 + // Widget titleText,
  154 + // Widget messageText,
  155 + // bool instantInit,
  156 + // Widget icon,
  157 + // bool shouldIconPulse,
  158 + // double maxWidth,
  159 + // EdgeInsets margin,
  160 + // EdgeInsets padding,
  161 + // double borderRadius,
  162 + // Color borderColor,
  163 + // double borderWidth,
  164 + // Color backgroundColor,
  165 + // Color leftBarIndicatorColor,
  166 + // List<BoxShadow> boxShadows,
  167 + // Gradient backgroundGradient,
  168 + // FlatButton mainButton,
  169 + // OnTap onTap,
  170 + // bool isDismissible,
  171 + // bool showProgressIndicator,
  172 + // AnimationController progressIndicatorController,
  173 + // Color progressIndicatorBackgroundColor,
  174 + // Animation<Color> progressIndicatorValueColor,
  175 + // SnackStyle snackStyle,
  176 + // Curve forwardAnimationCurve,
  177 + // Curve reverseAnimationCurve,
  178 + // Duration animationDuration,
  179 + // double barBlur,
  180 + // double overlayBlur,
  181 + // Color overlayColor,
  182 + // Form userInputForm
  183 + ///////////////////////////////////
  184 +```
  185 +Jeśli preferujesz tradycyjne snackbary, albo chcesz budować ją od zera dodając tylko jedną lineijkę kodu (Get.snackbar używa obowiązkowo title i message). Możesz użyć `Get.rawSnackbar();` który zapewnia surowe API, na którym zbudowany jest Get.snackbar.
  186 +
  187 +### Dialogi
  188 +
  189 +By otworzyć dialog:
  190 +
  191 +```dart
  192 +Get.dialog(YourDialogWidget());
  193 +```
  194 +
  195 +By otworzyć domyślny dialog:
  196 +
  197 +```dart
  198 +Get.defaultDialog(
  199 + onConfirm: () => print("Ok"),
  200 + middleText: "Dialog stworzony w trzech linijkach kodu"
  201 +);
  202 +```
  203 +
  204 +Możesz także użyć Get.generalDialog zamiast showGeneralDialog.
  205 +
  206 +W przypadku wszystkich innych Flutterowych dialogog widżetów włączając cupertinowe możesz używać Get.overlayContext w zamian za context i otwierać go z każdego miejsca w kodzie.
  207 +Dla widżetów nieużywających Overlay możesz użyć Get.context.
  208 +Te dwa konteksty zadziałają w 99% przypadków, w których zastępujesz context UI, z wyłączeniem przypadków gdzie inheritedWidget jest używany w nawigacji bez kontekstu.
  209 +
  210 +### BoottomSheets
  211 +Get.bottomSheet działa jak showModalBottomSheet, tylko bez użycia kontekstu.
  212 +
  213 +```dart
  214 +Get.bottomSheet(
  215 + Container(
  216 + child: Wrap(
  217 + children: <Widget>[
  218 + ListTile(
  219 + leading: Icon(Icons.music_note),
  220 + title: Text('Music'),
  221 + onTap: () => {}
  222 + ),
  223 + ListTile(
  224 + leading: Icon(Icons.videocam),
  225 + title: Text('Video'),
  226 + onTap: () => {},
  227 + ),
  228 + ],
  229 + ),
  230 + );
  231 +);
  232 +```
  233 +## Simple State Menager
  234 +Obecnie istnieje kilka menadżeów dla Fluttera. Jednak większość z nich wymaga używania ChangeNotifier, po to aby zaktualizować widżety, co nie sprawdza się pod kątem wydajności w średnich i dużych aplikacach. Możesz sprawdzić w oficjalnej dokumentacji, że ChangeNotifier powinien być używany z maksimum dwoma listinerami (https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html), będąc praktycznie bezużytecznym w średnich i duzych projektach. Inne menadzery są dobre, ale mają swoje mankamenty. BLoC jest bardzo bezpieczny i efektywny,ale ma wysoki próg wejścia dla początkujących, powstrzymywując wielu przed pisaniem we Flutterze. MobX jest prostrzy od BLoC i reaktywnny, powiedziałbym prawe perfekcyjny, tylko że musisz używać generatora kodu redukującego produktywność w dużych aplikacjach. W takim przypadku będziesz potrzebował hektolitrów kawy nim twój kod będzie działać po Flutterowym czyszczeniu (Nie jest toowina MobXa, ale codegen będący bardzo wolny). Provider używa InheritedWidget dostarczając ten sam listiner, jako sposób na problem z ChangeNotifier wyżej wymieniony. To skutkuje tym, że każdy dostęp do klasy ChangeNotifier musi być w tym samym drzewie widżetów, ze względu na kontekst uzyskujacy dostęp do Inherited.
  235 +
  236 +Get nie jest ani lepszy, ani gorszy od innych menadżerów stanów, ale powinieneś rozpatrzyć te punkty jak i poniższe, aby wybrać między użyciem Get w czystej formie (Vanilla), albo używaniem go wraz z innym menadżerem. Definitywnie Get nie jest przeciwnikiem żadnego innego menadżera, ponieważ jest on mikroframeworkiem, nie tylko menadżerem stanu. Może być użyty samodzielnie, lub w koegzystencji.
  237 +
  238 +Get ma bardzo lekki i prosty menadżer stanu (napisany w tylko 95 lini kodu), który nie używa ChangeNotifier. Sprosta on wymaganiom szczególnie nowych we Flutterze i nie sprawi problemu nawer w dużych aplikacjach.
  239 +
  240 +Które ulepszenia wydajności zapewnia Get?
  241 +
  242 +1- Aktualizowanie tylko niezbędnych widżetów,
  243 +
  244 +linijka 300