Showing
3 changed files
with
251 additions
and
5 deletions
@@ -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( |
README.pl.md
0 → 100644
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 | + | ||
3 | + | ||
4 | +*Languages: [English](README.md), [Brazilian Portuguese](README.pt-br.md), [Polish]().* | ||
5 | + | ||
6 | +[](https://pub.dev/packages/get) | ||
7 | + | ||
8 | +[](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 |
-
Please register or login to post a comment