Niedawno musiałem wdrożyć onboarding walkthroughs dla
/href/
https://clickup.com/
ClickUp
/%href/
nowi użytkownicy! Było to naprawdę ważne zadanie, ponieważ wielu nowych użytkowników miało wkrótce odkryć platformę z
/href/
https://www.youtube.com/watch?v=AirnL1NxOAw
niesamowicie zabawna reklama, którą mieliśmy premierę podczas Super Bowl
/%href/
! ✨
przez ClickUp
Przewodnik pozwala naszym licznym nowym użytkownikom, którzy być może nie znają jeszcze ClickUp, szybko zrozumieć, jak korzystać z kilku funkcji aplikacji. Jest to ciągły wysiłek, podobnie jak nowy
/href/
https://university.clickup.com/
ClickUp University
/%href/
zasób, do którego dążymy! 🚀
Na szczęście architektura oprogramowania stojącego za aplikacją mobilną ClickUp Flutter pozwoliła mi dość szybko wdrożyć tę funkcję, nawet poprzez ponowne wykorzystanie rzeczywistych widżetów z aplikacji! Oznacza to, że przewodnik jest dynamiczny, responsywny i dokładnie pasuje do rzeczywistych ekranów aplikacji - i nadal będzie, nawet gdy widżety będą ewoluować.
Byłem również w stanie zaimplementować tę funkcję dzięki odpowiedniemu rozdzieleniu obaw.
Zobaczmy, co mam na myśli. 🤔
Rozdzielenie obaw
Projektowanie architektury oprogramowania jest jednym z najbardziej złożonych tematów dla zespołów inżynierskich. Wśród wszystkich obowiązków zawsze trudno jest przewidzieć przyszłe ewolucje oprogramowania. Dlatego właśnie stworzenie dobrze warstwowej i rozdzielonej architektury może pomóc Tobie i Twoim kolegom z zespołu w wielu kwestiach!
Główną zaletą tworzenia małych, odizolowanych systemów jest bez wątpienia testowalność! I to właśnie pomogło mi stworzyć alternatywę demo istniejących ekranów z aplikacji!
Przewodnik krok po kroku
Teraz, jak moglibyśmy zastosować te zasady do aplikacji Flutter?
Podzielimy się kilkoma technikami, których używamy do budowy ClickUp z prostym przykładem walkthrough.
Przykład jest tak prosty, że może nie wyjaśnić wszystkich kryjących się za nim zalet, ale uwierz mi, pomoże ci stworzyć o wiele łatwiejsze w utrzymaniu aplikacje Flutter ze złożonymi bazami kodu. 💡
Aplikacja
Jako przykład stworzymy aplikację, która wyświetla populację USA dla każdego roku.
via ClickUp
Mamy tutaj dwa ekrany:
* `HomeScreen`: po prostu lista wszystkich lat od 2000 do teraz. Gdy użytkownik dotknie kafelka roku, przejdzie do ekranu `DetailScreen` z argumentem nawigacji ustawionym na wybrany rok.
* `DetailScreen`: pobiera rok z argumentu nawigacji, wywołuje funkcję
/href/
https://datausa.io/api/data?drilldowns=Nation&measures=Population&year=2018
aPI datausa.io
/%href/
dla tego roku i analizuje dane JSON, aby wyodrębnić powiązaną wartość populacji. Jeśli dane są dostępne, wyświetlana jest etykieta z populacją.
Skupimy się na implementacji `DetailScreen`, ponieważ jest ona najbardziej odsetkowa ze względu na jej asynchroniczne wywołanie.
Krok 1. Podejście naiwne
/img/
https://clickup.com/blog/wp-content/uploads/2022/03/image-5-1400x607.png
Podejście naiwne Stateful Widżet
/%img/
przez ClickUp
Najbardziej oczywistą implementacją dla naszej aplikacji jest użycie pojedynczego `StatefulWidget` dla całej logiki.
/href/
https://dartpad.dev/embed-flutter.html?id=b37071f4386ecb27c29332e788999612&split=80&theme=dark
Kod źródłowy i demo Dart
/%href/
Dostęp do argumentu nawigacyjnego `year`
Aby uzyskać dostęp do żądanego roku, odczytujemy `RouteSettings` z odziedziczonego widżetu `ModalRoute`.
```
void didChangeDependencies() {
super.didChangeDependencies();
final year = ModalRoute.of(context)!.settings.arguments as int;
// ...
}
```
Wywołanie HTTP
Ten przykład wywołuje funkcję `get` z pakietu `http`, aby pobrać dane z pliku
/href/
https://datausa.io/api/data?drilldowns=Nation&measures=Population&year=2018
aPI datausa.io
/%href/
, parsuje wynikowy JSON za pomocą metody `jsonDecode` z biblioteki `dart:convert` i przechowuje `Future` jako część stanu z właściwością o nazwie `_future`.
```
late Future