Shiro126

Refactored polish translation in README.pl.md

1 ![](get.png) 1 ![](get.png)
2 2
3 -*Idiomas: Español (este archivo), [Inglés](README.md), [Portugués de Brasil](README.pt-br.md).* 3 +*Idiomas: Español (este archivo), [Inglés](README.md), [Portugués de Brasil](README.pt-br.md), [Polaco](README.pl.md).*
4 4
5 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) 5 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get)
6 ![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) 6 ![building](https://github.com/jonataslaw/get/workflows/build/badge.svg)
1 ![](get.png) 1 ![](get.png)
2 2
3 -*Languages: English (this file), [Brazilian Portuguese](README.pt-br.md), [Spanish](README-es.md).* 3 +*Languages: English (this file), [Brazilian Portuguese](README.pt-br.md), [Spanish](README-es.md),[Polish](README.pl.md).*
4 4
5 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) 5 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get)
6 ![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) 6 ![building](https://github.com/jonataslaw/get/workflows/build/badge.svg)
@@ -205,10 +205,7 @@ GetMaterialApp( // Before: MaterialApp( @@ -205,10 +205,7 @@ GetMaterialApp( // Before: MaterialApp(
205 home: MyHome(), 205 home: MyHome(),
206 ) 206 )
207 ``` 207 ```
208 -  
209 -To navigate to a new screen:  
210 -  
211 -```dart 208 +Def
212 Get.to(NextScreen()); 209 Get.to(NextScreen());
213 ``` 210 ```
214 211
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) 1 ![](get.png)
3 2
4 -*Languages: [English](README.md), [Brazilian Portuguese](README.pt-br.md), [Polish]().* 3 +*Languages: [English](README.md), [Brazilian Portuguese](README.pt-br.md), [Spanish](README-es.md), Polish (Jesteś tu).*
5 4
6 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) 5 [![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) 6 +![building](https://github.com/jonataslaw/get/workflows/build/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) 7 [![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"> 8 <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" /> 9 <img alt="Awesome Flutter" src="https://img.shields.io/badge/Awesome-Flutter-blue.svg?longCache=true&style=flat-square" />
11 </a> 10 </a>
  11 +<a href="https://www.buymeacoffee.com/jonataslaw" target="_blank"><img src="https://i.imgur.com/aV6DDA7.png" 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>
  12 +
  13 +![](getx.png)
  14 +
  15 +- [Kanały komunikacji i wsparcia:](#kanały-komunikacji-i-wsparcia)
  16 +- [Wprowadzenie](#wprowadzenie)
  17 +- [Instalacja](#instalacja)
  18 +- [Counter App z GetX](#counter-app-z-getx)
  19 +- [Trzy fialary](#trzy-filary)
  20 + - [Menadżer stanu](#menadżer-stanu)
  21 + - [Reaktywny menadżer stanu](#reaktywny-menadżer-stanu)
  22 + - [Bardziej szczegółowo o menadżerze stanu](#bardziej-szczegółowo-o-menadżerze-stanu)
  23 + - [Video tłumaczące użycie menadżera stanu](#video-tłumaczące-użycie-menadżera-stanu)
  24 + - [Zarzadzanie routami](#zarządzanie-routami)
  25 + - [Więcej o routach](#więcej-o-routach)
  26 + - [Video tłumaczące użycie](#video-tłumaczące-użycie)
  27 + - [Zarządzanie dependencies](#zarządzanie-dependencies)
  28 + - [Bardziej szczefółowo o menadżerze dependencies](#bardziej-szczegółowo-o-menadżerze-dependencies)
  29 +- [Jak włożyć coś od siebie](#jak-włożyć-coś-od-siebie)
  30 +- [Narzędzia](#narzędzia)
  31 + - [Zmiana motywu](#zmiana-motywu)
  32 + - [Inne zaawansowane API](#inne-zaawansowane-api)
  33 + - [Opcjonalne globalne ustawienia i manualna konfiguracja](#opcjonalne-globalne-ustawienia-i-manualna-konfiguracja)
  34 + - [Video tłumaczace inne funkcjonalności GetX](#video-tłumaczące-inne-funkcjonalności-getx)
  35 +- [Zmiany od 2.0](#zmiany-od-20)
  36 +
  37 +
  38 +# Kanały komunikacji i wsparcia:
  39 +
  40 +[**Slack (English)**](https://communityinviter.com/apps/getxworkspace/getx)
  41 +
  42 +[**Discord (English and Portuguese)**](https://discord.com/invite/9Hpt99N)
  43 +
  44 +[**Telegram (Portuguese)**](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g)
  45 +
  46 +# Wprowadzenie
  47 +- GetX jest bardzo lekką i potężną biblioteką do Flattera. Łączy wysoką wydajność menadżera stanu, inteligętne dodawanie dependencies i zarządzanie routami w szybki i praktyczny sposób.
  48 +- GetX nie jest dla wszystkich, skupia się na jak najmniejszej konsumpcji zasobów (wydajności) ([zobacz benchmarki](https://github.com/jonataslaw/benchmarks)), używaniu łatwej skłani (produktywności) i daniu możliwości pełnego rozbicia View na z logiki biznesowej (organizacja).
  49 +- GetX która da Ci supermoce i zwiększy produktywność w tworzeniu projektu. Oszczędzi godziny zarówno początkującym jak i ekspoertom.
  50 +- Nawiguj bez podawania `context`, używaj open `dialogs`, `snackbarów` oraz `bottomsheetów` z każdego miejsca w kodzie. Zarządzaj stanami i dodawaj dependencies w prosty i praktyczny sposób!
  51 +- Get jest bezpieczny, stabilny i aktualny. Oprócz tego oferuje szeroki zakres API, które nie są zawarte w standardowym frameworku.
  52 +- GetX nie jest przytłaczający. Ma wiele funkcjonalności pozwalajacych na rozpoczęcie programowania bez martwienia się o nic, ale wszystkie te funkcjonalności są w osobnych kontenerach będących dodane dopiero po ich użyciu. Jeśli tylko używasz menadżera stanu, tylko on będzie kompilowany. Jeśli używasz routów, lecz nic z menadżera stanu on nie będzie kompilowany. Możesz skompilować repozytorium benchmark i zobaczysz że używa tylko menadżera stanu. Aplikacje używajace Get są mniejsze niz inne ponieważ wszystkie rozwiązania GetX sa projektowane dla lekkości i wydajności. Jest to też zasługa Flutterowego AOT, które jest niesamowite i eliminuje nieużywane zasoby jak żaden inny framework.
  53 +
  54 +**GetX zwiększa stwoja produktywność, lecz mozesz to jeszcze przyspieszyć instalując rozszerzenie [GetX extension](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) do swojego VSCode**. Jeszcze nie dostępne w innych IDE.
  55 +
  56 +# Instalacja
  57 +
  58 +Dodaj Get do swojego pliku pubspec.yaml:
  59 +
  60 +```yaml
  61 +dependencies:
  62 + get:
  63 +```
12 64
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ę]()** 65 +Zaimportuj Get do plików w których chcesz go użyć:
34 66
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. 67 +```dart
  68 +import 'package:get/get.dart';
  69 +```
41 70
42 -Każda współpraca jest mile widziana! 71 +# Counter App z GetX
  72 +
  73 +Przykładowa aplikaja tworzona domyślnie podczas kreacji nowego projektu we Flaterze ma ponad 100 lini kodu (z komentarzami). By pokazać siłę Get pokarzę jak zrobić "licznik" ze zmienianą stan z każdym kliknięciem, zmianą stron i udostępniajac stan pomiędzy ekranami. Wszystko w zorganizowany sposób dzieląc buissnes logic z view w zaledwie 26 LINI KODU WŁĄCZAJĄC W TO KOMENTARZE.
  74 +
  75 +-Krok 1:
  76 +Dodaj "Get" przed MaterialApp, zamieniając je na GetMaterialApp
  77 +
  78 +
  79 +```dart
  80 +void main() => runApp(GetMaterialApp(home: Home()));
  81 +```
  82 +
  83 +- Note: nie jest to modyfikaja MaterialApp, ponieważ GetMaterialApp nie jest zmodyfikowanym MaterialApp z Fluttera, jest tylko zkonfigurowanym Widgetem mającym domyślnie MaterialApp jako dziecko. Możesz to konfigurować ręcznie, ale nie jest to konieczne. GetMaterialApp jest niezbędne dla działania routów, snackbarów, bootomsheetów, internacjonalizacji, dialogów i wysokopoziomowych api powiązanych z routami i nieobecnościa kontekstu. Nie jest to jednak wymagane do używania zarzadzania stanem i dependencies.
  84 +
  85 +-Krok 2:
  86 +Tworzymy klasę business logic i umieszczmy w niej wszystkie zmienne, metody oraz kontrolery. Możesz zmienić zmienna=ą na obserwowalną używajac prostego ".obs"
  87 +
  88 +```dart
  89 +class Controller extends GetxController{
  90 + var count = 0.obs;
  91 + increment() => count.value++;
  92 +}
  93 +```
  94 +- Krok 3:
  95 +Tworzymy View. Użyj StatelessWidget oszczędzajac przy tym RAM. Z Get nie będzie Ci potrzebny StatefullWidget.
  96 +
  97 +
  98 +```dart
  99 +class Home extends StatelessWidget {
  100 +
  101 + // Instantiate your class using Get.put() to make it available for all "child" routes there.
  102 + final Controller c = Get.put(Controller());
  103 +
  104 + @override
  105 + Widget build(context) => Scaffold(
  106 + // Use Obx(()=> to update Text() whenever count is changed.
  107 + appBar: AppBar(title: Obx(() => Text("Clicks: " + c.count.string))),
  108 +
  109 + // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context
  110 + body: Center(child: RaisedButton(
  111 + child: Text("Go to Other"), onPressed: () => Get.to(Other()))),
  112 + floatingActionButton:
  113 + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment));
  114 +}
  115 +
  116 +class Other extends StatelessWidget {
  117 + // You can ask Get to find a Controller that is being used by another page and redirect you to it.
  118 + final Controller c = Get.find();
  119 +
  120 + @override
  121 + Widget build(context){
  122 + // Access the updated count variable
  123 + return Scaffold(body: Center(child: Text(c.count.string)));
  124 + }
  125 +}
  126 +```
  127 +Wynik:
  128 +
  129 +![](counter-app-gif.gif)
  130 +
  131 +Jest to prosty projekt, ale już na jego przykładzie widać potęgę Get. Wzraz ze wzrostem rozmiaru aplikacji ta różnica tylko się powieksza.
  132 +
  133 +Get był projektowany dla pracy z zespołem, ale równie dobrze sprawdza się w indywidualnej pracy.
  134 +
  135 +Zawsze dotrzymuj deadlinów i dostarczaj swoje rozwiązania na czas bez straty na wydajności. Get nie jest dla wszystkich jak już wspominałem, ale jeśli identyfikujesz się z powyższym zdaniem Get jest dla ciebie.
  136 +
  137 +# Trzy filary
  138 +
  139 +## Menadżer stanu
  140 +
  141 +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.
  142 +
  143 +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.
  144 +
  145 +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.
  146 +
  147 +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.
  148 +
  149 +### Reaktywny menadżer stanu
  150 +
  151 +Reaktywne programowanie możee dotrącać niektórych, ponieważ powszechnie jest uważane za skomplikowane. GetX zamienia to w coś prostego:
  152 +
  153 +- Nie musisz tworzyć Strw=eamControllerów,
  154 +- Nie musisz tworzyć StreamBuildera dla każdej zmiennej,
  155 +- Nie ma potrzeby tworzenia klasy dla kżdego stanu,
  156 +- Nie musisz tworzyć Get dla inicjalnej zmiennej
  157 +
  158 +Wyobraź sobie, że masz zmienną i za każdym razem jak zmienisz ją chcesz żeby wszystkie widżety używające jej automatycznie się zmieniły
  159 +
  160 +Przykładowa zmienna:
  161 +```dart
  162 +var name = 'Jonatas Borges';
  163 +```
  164 +
  165 +By zamienić ją na obserwowalną dodaj ".obx" na końcu:
  166 +
  167 +```dart
  168 +var name = 'Jonatas Borges'.obs;
  169 +```
  170 +
  171 +I w UI, kiedy chcesz go zaktualizować przy modyfikacji zmiennej po prostu dodaj to:
  172 +```dart
  173 +Obx (() => Text (controller.name));
  174 +```
  175 +
  176 +To wszystko. *Proste*, co nie?
  177 +
  178 +### Bardziej szczegółowo o menadżerze stanu
  179 +**Zobacz bardziej szczegółowe wytłumaczenie menadz=żera sranu [tutaj](./docs/en_US/state_menagment.md). Znajdują się tam przykłady jak o różnice między prostym menadżerem stanu oraz reaktywnym**
  180 +
  181 +### Video tłumaczące użycie menadżera stanu
  182 +
  183 +Amateur COder nagrał o tym niezwykły film:
  184 +
  185 +Link: [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw)
  186 +
  187 +## Zarządzanie routami
  188 +
  189 +Jeśli chcesz używać routes/snackbars/dialogs/bottomsheets z GetX możesz to robić bez contextu.
  190 +
  191 +Zamień MaterialApp na GetMaterialApp
  192 +```dart
  193 +GetMaterialApp( // Before: MaterialApp(
  194 + home: MyHome(),
  195 +)
  196 +```
43 197
44 -## Nawiguj bez named routes  
45 By nawigować do nowego ekranu: 198 By nawigować do nowego ekranu:
46 199
47 ```dart 200 ```dart
@@ -70,7 +223,7 @@ By nawigować do następnego routa i otrzymać, lub uaktualnić dane zaraz po ty @@ -70,7 +223,7 @@ By nawigować do następnego routa i otrzymać, lub uaktualnić dane zaraz po ty
70 ```dart 223 ```dart
71 var data = await Get.to(Payment()); 224 var data = await Get.to(Payment());
72 ``` 225 ```
73 -w innym ekranie wyślij dane z poprzedniego routa: 226 +w innym ekranie wyślij dane z poprzedniego routa:featury
74 227
75 ```dart 228 ```dart
76 Get.back(result: 'sucess'); 229 Get.back(result: 'sucess');
@@ -79,166 +232,296 @@ I użyj następujące np.: @@ -79,166 +232,296 @@ I użyj następujące np.:
79 ```dart 232 ```dart
80 if(data == 'sucess') madeAnything(); 233 if(data == 'sucess') madeAnything();
81 ``` 234 ```
  235 +Zobacz, ze do żadnej z tych operacji nie potrzebowałeś contextu. Jest to jedna z głównych zalet GetX oszczędzającego na niepotrzebnej ogudowie z kod i dającego możliwość uzywania tych metod w klasie kontrolera.
82 236
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 237
86 -Przykład: 238 +### Więcej o routach
  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)**
  241 +
  242 +### Video tłumaczące użycie
  243 +
  244 +Amateur Coder nagrał o tym niezwykły film:
  245 +
  246 +Link: [Complete GetX Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI)
  247 +
  248 +## Zarządzanie dependencies
  249 +
  250 +Get ma prosty i potężny menadżer dependencies. Pozwala on na otrzymanie tych samych klas jak twoje Bloc lub Kontroler piszac jedną linię kodu bez Provider context i inheritedWidget:
87 251
88 ```dart 252 ```dart
  253 +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller();
  254 +```
89 255
90 -// Standardowa nawigacja we Flatterze  
91 -Navigator.of(context).push(  
92 - context,  
93 - MaterialPageRoute(  
94 - builder: (BuildContext context) {  
95 - return HomePage();  
96 - },  
97 - ),  
98 -); 256 +- Note: Jeśli używasz menadżera stanu Get zwróć uwafę na binding api, które pozwoli Ci łatwiej połączyć twój widok z kontrolerem.
  257 +https://github.com/jonataslaw/get
  258 +**Tip:** Menadżer dependency Get jest oddzielony od innych części pakietu więc jeśli już używasz menadzera stanu(którego kolwiek,bez różnicy) nie musisz przepisywać tego wszystkiego na nowo. Możesz używać tego dodawania dependencies bez poroblemu.
99 259
100 -// Zacznij używać Flatterowej składni bez podawania kontekstu  
101 -navigator.push(  
102 - MaterialPageRoute(  
103 - builder: (_) {  
104 - return HomePage();  
105 - },  
106 - ),  
107 -); 260 +```dart
  261 +controller.fetchApi();
  262 +```
  263 +Wyobraź sobie, że musisz nawigować pomiędzy wieloma routami i potrzebujesz dane z kontrolerów z poprzednich ekranów. Musiałbyś użyć menadżera stanu z dodatkiem Providera albo Get_it, prawda? Otuż nie z Fet. Muszisz po prostu poprosić Get o znalezienie tego kontrolera i nie potrzebujesz przy tym dodatkowych dependencies.
108 264
109 -// Składnia Get (Jest lepsza, choć oczywiście każdy może mieć własne zdanie))  
110 -Get.to(HomePage()); 265 +```dart
  266 +Controller controller = Get.find();
  267 +//Yes, it looks like Magic, Get will find your controller, and will deliver it to you. You can have 1 million controllersfeatury instantiated, Get will always give you the right controller.
  268 +```
111 269
  270 +I wtedy będziesz mógł otrzymać bez problemu z niego dane
112 271
  272 +```dart
  273 +Text(controller.textFromApi);
113 ``` 274 ```
114 -### SnackBars 275 +### Bardziej szczegółowo o menadżerze dependencies
  276 +
  277 +**Zobzcz więcej w dokumentacji [tutaj](./docs/en_US/dependency_management.md)**
  278 +
  279 +# Jak włożyć coś od siebie
  280 +
  281 +Możesz uczestniczyć w rozwoju projektu na różny sposób:
  282 +- Pomagając w tłumaczeniu readme na inne języki.
  283 +- Dodając dokumentację do readme ( nawet nie połowa funkcji została jeszcze opisana).
  284 +- 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).
  285 +- Oferując PR-y dla kodu i testów.
  286 +- Dodając nowe funkcje.
  287 +
  288 +Każda współpraca jest mile widziana!
  289 +
  290 +# Narzędzia
  291 +
  292 +## Zmiana motywu
  293 +
  294 +Nie powinno się uzywać innego widżetu niż GetMaterialApp by go zaktualizować. To może powodować duplikacje kluczy. Wiele osób nawykło do prehistorycznego podejścia tworzenia widżetu "ThemeProvider" tylko po to by zmienić motyw aplikacji. Z Get nie jest to absolutnie wymagane.
  295 +
  296 +Możesz stworzyć customowy motyw i łatwo go dodać z Get.changeTheme bez niepotrzebnego kodu.
115 297
116 -By wykorzystać SnackBar we Flatterze musisz podać context Scaffoldu, albo musisz użyć GlobalKey przypisanego do Scaffolda.  
117 ```dart 298 ```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); 299 +Get.changeTheme(ThemeData.light());
128 ``` 300 ```
129 -Z wykorzystaniem Get: 301 +
  302 +Jeśli chcesz stworzyć coś jak przycisk zmieniający motyw aplikacji na onTap, możesz połączyć dwia Get API. Api sprawdzające czy ciemny motyw jest używany i Api zajmujące się zmianą motywu. Po prostu użyj tego w onPressed:
130 303
131 ```dart 304 ```dart
132 -Get.snackbar('Cześć!', 'Jestem nowoczesnym snackbar'); 305 +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark());featury
133 ``` 306 ```
134 -Z Get wszystko co musisz zrobić to wywołać swój Get.snackbar gdziekolwiek w swoim kodzie i dostosować go jak tylko chcesz! 307 +
  308 +Kiedy ciemny motyw jest aktywny zmieni się on na jasny, w przeciwnym wypadku zmieni się na ciemny.
  309 +
  310 +Jeśli interesuje Cię jak zmieniać motywy podąrzaj za samouczkiem na Medium uczącym zmiany motywu z Get:
  311 +
  312 +- [Dynamic Themes in 3 lines using Get](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Samouczek stworzony przez [Rod Brown](https://github.com/RodBr).
  313 +
  314 +## Inne zaawansowane API
135 315
136 ```dart 316 ```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 -); 317 +// give the current args from currentScreen
  318 +Get.arguments
147 319
  320 +// give arguments of previous route
  321 +Get.previousArguments
148 322
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 -); 323 +// give name of previous route
  324 +Get.previousRoute
  325 +
  326 +// give the raw route to access for example, rawRoute.isFirst()
  327 +Get.rawRoute
  328 +
  329 +// give access to Rounting API from GetObserver
  330 +Get.routing
  331 +
  332 +// check if snackbar is open
  333 +Get.isSnackbarOpen
  334 +
  335 +// check if dialog is open
  336 +Get.isDialogOpen
  337 +
  338 +// check if bottomsheet is opefeaturyn
  339 +Get.isBottomSheetOpen
  340 +
  341 +// remove one route.
  342 +Get.removeRoute()
  343 +
  344 +// back repeatedly until the predicate returns true.
  345 +Get.until()
  346 +
  347 +// go to next route and remove all the previous routes until the predicate returns true.
  348 +Get.offUntil()
  349 +
  350 +// go to next named route and remove all the previous routes until the predicate returns true.
  351 +Get.offNamedUntil()
  352 +
  353 +//Check in what platform the app is running
  354 +GetPlatform.isAndroid
  355 +GetPlatform.isIOS
  356 +GetPlatform.isWeb
  357 +
  358 +// Equivalent to the method: MediaQuery.of(context).size.height, but they are immutable.
  359 +Get.height
  360 +Get.width
  361 +
  362 +// Gives the current context of navigator.
  363 +Get.context
  364 +
  365 +// Gives the context of the snackbar/dialog/bottomsheet in the foreground anywhere in your code.
  366 +Get.contextOverlay
  367 +
  368 +// Note: the following methods are extensions on context. Since you
  369 +// have access to context in any place of your UI, you can use it anywhere in the UI code
  370 +
  371 +// If you need a changeable height/width (like browser windows that can be scfeaturyaled) you will need to use context.
  372 +context.width
  373 +context.height
  374 +
  375 +// gives you the power to define half the screen now, a third of it and so on.
  376 +//Useful for responsive applications.
  377 +// param dividedBy (double) optional - default: 1
  378 +// param reducedBy (double) optional - default: 0
  379 +context.heightTransformer()
  380 +context.widthTransformer()
  381 +
  382 +/// similar to MediaQuery.of(context).size
  383 +context.mediaQuerySize()
  384 +
  385 +/// similar to MediaQuery.of(context).padding
  386 +context.mediaQueryPadding()
  387 +
  388 +/// similar to MediaQuery.of(context).viewPadding
  389 +context.mediaQueryViewPadding()
  390 +
  391 +/// similar to MediaQuery.of(context).viewInsets;
  392 +context.mediaQueryViewInsets()
  393 +
  394 +/// similar to MediaQuery.of(context).orientation;
  395 +context.orientation()
  396 +
  397 +/// check if device is on landscape mode
  398 +context.isLandscape()
  399 +
  400 +/// check if device is on portrait mode
  401 +context.isPortrait()
  402 +
  403 +/// similar to MediaQuery.of(context).devicePixelRatio;
  404 +context.devicePixelRatio()
  405 +
  406 +/// similar to MediaQuery.of(context).textScaleFactor;
  407 +context.textScaleFactor()
  408 +
  409 +/// get the shortestSide from screen
  410 +context.mediaQueryShortestSide()
  411 +
  412 +/// True if width be larger thfeaturyan 800
  413 +context.showNavbar()
  414 +
  415 +/// True if the shortestSide is smaller than 600p
  416 +context.isPhone()
  417 +
  418 +/// True if the shortestSide is largest than 600p
  419 +context.isSmallTablet()
  420 +
  421 +/// True if the shortestSide is largest than 720p
  422 +context.isLargeTablet()
  423 +
  424 +/// True if the current device is Tablet
  425 +context.isTablet()
202 ``` 426 ```
203 427
204 -Możesz także użyć Get.generalDialog zamiast showGeneralDialog. 428 +### Opcjonalne globalne ustawienia i manualna konfiguracja
205 429
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. 430 +GetMaterialApp konfiguruje wszystko za Ciebie, ale jeśli chcesz możesz konfigurować Get manualnie.
209 431
210 -### BoottomSheets  
211 -Get.bottomSheet działa jak showModalBottomSheet, tylko bez użycia kontekstu. 432 +```dart
  433 +MaterialApp(
  434 + navigatorKey: Get.key,
  435 + navigatorObservers: [GetObserver()],
  436 +);
  437 +```
  438 +
  439 +Będziesz mógł używać swojego Midware z GetObserver, nie wpływa to na nic.
212 440
213 ```dart 441 ```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 - ), 442 +MaterialApp(
  443 + navigatorKey: Get.key,
  444 + navigatorObservers: [
  445 + GetObserver(MiddleWare.observer) // Here
228 ], 446 ],
229 - ),  
230 - );  
231 ); 447 );
232 ``` 448 ```
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 449
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. 450 +Mozesz stworzyć globalne ustawienia dla Get. Tylko dodaj Get.config do swojego kodu przed użyciem routów, lub bezpośrednio w GetMaterialApp
237 451
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. 452 +```dart
  453 +GetMaterialApp(
  454 + enableLog: true,
  455 + defaultTransition: Transition.fade,
  456 + opaqueRoute: Get.isOpaqueRouteDefault,
  457 + popGesture: Get.isPopGestureEnable,
  458 + transitionDuration: Get.defaultDurationTransition,
  459 + defaultGlobalState: Get.defaultGlobalState,https://github.com/jonataslaw/ge
  460 +);
  461 +
  462 +Get.config(
  463 + enableLog = true,
  464 + defaultPopGesture = true,
  465 + defaultTransition = Transitions.cupertino
  466 +)
  467 +```
  468 +
  469 +## Video tłumaczące inne funkcjonalności GetX
239 470
240 -Które ulepszenia wydajności zapewnia Get?  
241 471
242 -1- Aktualizowanie tylko niezbędnych widżetów, 472 +Amateur Coder nagrał niezwykły film tłumaczący powyższe zagadnienia!
243 473
244 -linijka 300 474 +Link: [GetX Other Features](https://youtu.be/ttQtlX_Q0eU)
  475 +
  476 +
  477 +# Zmiany od 2.0
  478 +
  479 +1- Typy Rx:
  480 +
  481 +| Przed | Po |
  482 +| ------- | ---------- |
  483 +| StringX | `RxString` |
  484 +| IntX | `RxInt` |
  485 +| MapX | `RxMax` |
  486 +| ListX | `RxList` |
  487 +| NumX | `RxNum` |
  488 +| DoubleX | `RxDouble` |
  489 +
  490 +RXController i GetBuilder teraz zostały połączone. Nie musisz już pamiętać którego kontrolerachcesz użyć, po prostu korzystaj z GetxController, będzie działać zarówno dla prostego jak i reaktywnego menadżera stanów.
  491 +
  492 +2- NamedRoutes
  493 +Wcześniej:
  494 +
  495 +```dart
  496 +GetMaterialApp(
  497 + namedRoutes: {
  498 + '/': GetRoute(page: Home()),
  499 + }
  500 +)
  501 +```
  502 +
  503 +Teraz:
  504 +
  505 +```dart
  506 +GetMaterialApp(
  507 + getPages: [
  508 + GetPage(name: '/', page:()=> Home()),
  509 + ]
  510 +)
  511 +```
  512 +
  513 +Po co ta zmiana?
  514 +Często może być niezbędnym decydowanie która strona będzie wyswietlana w zależności od parametru, lub tokenu logowania. Wczesniejsze podejscie było nieelastyczne nie pozwalając na to. Zawarcie strony w funkcji zmniejszyło sporzycie RAM-u, ze względu na niealokowanie routów od początku działania aplikacji. Pozwoliło to także na takie podejscie:
  515 +
  516 +```dart
  517 +
  518 +GetStorage box = GetStorage();
  519 +
  520 +GetMaterialApp(
  521 + getPages: [
  522 + GetPage(name: '/', page:(){
  523 + return box.hasData('token') ? Home() : Login();
  524 + })
  525 + ]
  526 +)
  527 +```
1 ![](get.png) 1 ![](get.png)
2 2
3 -*Idiomas: [Inglês](README.md), Português Brasileiro (este arquivo), [Espanhol](README-es.md).* 3 +*Idiomas: [Inglês](README.md), Português Brasileiro (este arquivo), [Espanhol](README-es.md), [Polaco](README.pl.md).*
4 4
5 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) 5 [![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get)
6 ![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) 6 ![building](https://github.com/jonataslaw/get/workflows/build/badge.svg)