Onlangs moest ik onboarding walkthroughs implementeren voor
/href/
https://clickup.com/
ClickUp
/%href/
nieuwkomers! Dit was echt een belangrijke Taak omdat veel nieuwe gebruikers op het punt stonden het platform te ontdekken met de
/href/
https://www.youtube.com/watch?v=AirnL1NxOAw
ongelooflijk grappige advertentie die we tijdens de Super Bowl in première lieten gaan
/%href/
! ✨
via ClickUp
Met de walkthrough kunnen onze vele nieuwe gebruikers, die ClickUp misschien nog niet kennen, snel begrijpen hoe ze verschillende functies van de applicatie kunnen gebruiken. Het is een voortdurende inspanning, net als de nieuwe
/href/
https://university.clickup.com/
ClickUp University
/%href/
bron die we nastreven! 🚀
Gelukkig kon ik dankzij de softwarearchitectuur achter de ClickUp Flutter mobiele applicatie deze functie vrij snel implementeren, zelfs door de echte widgets van de applicatie te hergebruiken! Dit betekent dat de walkthrough dynamisch en responsief is en precies overeenkomt met de echte applicatieschermen van de app - en dat zal zo blijven, zelfs als de widgets evolueren.
Ik was ook in staat om de functie te implementeren door de juiste scheiding van belangen.
Laten we eens kijken wat ik bedoel. 🤔
Scheiding van zorgen
Het ontwerpen van een softwarearchitectuur is een van de meest complexe onderwerpen voor engineering teams. Naast alle verantwoordelijkheden is het altijd moeilijk om te anticiperen op toekomstige software-evoluties. Daarom kan het creëren van een goed gelaagde en ontkoppelde architectuur jou en je teamgenoten met veel dingen helpen!
Het belangrijkste voordeel van het maken van kleine ontkoppelde systemen is ongetwijfeld de testbaarheid! En dit heeft me geholpen om een demo-alternatief te maken van de bestaande schermen van de app!
Een stap-voor-stap handleiding
Hoe kunnen we deze principes toepassen op een Flutter-applicatie?
We delen een paar technieken die we gebruiken om ClickUp te bouwen met een eenvoudig voorbeeld.
Het voorbeeld is zo eenvoudig dat het misschien niet alle voordelen erachter laat zien, maar geloof me, het zal je helpen om veel beter onderhoudbare Flutter-applicaties te maken met complexe codebases. 💡
De toepassing
Als voorbeeld maken we een applicatie die de populatie van de Verenigde Staten voor elk jaar weergeeft.
via ClickUp
We hebben hier twee schermen:
* homeScreen`: gewoon een lijst met alle jaren van 2000 tot nu. Als de gebruiker op een jaartegel tikt, navigeert hij naar het `DetailScreen` met een navigatieargument dat is ingesteld op het geselecteerde jaar.
* `DetailScreen`: haalt het jaar op uit het navigatieargument, roept het
/href/
https://datausa.io/api/data?drilldowns=Nation&measures=Population&year=2018
datausa.io API
/%href/
voor dit jaar en parseert de JSON-gegevens om de bijbehorende waarde van de populatie te krijgen. Als er gegevens beschikbaar zijn, wordt er een label met de populatie weergegeven.
We zullen ons richten op de `DetailScreen` implementatie omdat deze de meest interessante is met zijn asynchrone aanroep.
Stap 1. Naïeve benadering
/$$$img/
https://clickup.com/blog/wp-content/uploads/2022/03/image-5-1400x607.png
Naïeve benadering Stateful Widget
/%img/
via ClickUp
De meest voor de hand liggende implementatie voor onze app is het gebruik van een enkele `StatefulWidget` voor de hele logica.
/href/
https://dartpad.dev/embed-flutter.html?id=b37071f4386ecb27c29332e788999612&split=80&theme=dark
Dart broncode en demo
/%href/
Toegang tot het `jaar` navigatie argument
Om toegang te krijgen tot het gevraagde jaar lezen we de `RouteSettings` uit de `ModalRoute` geërfde widget.
```
id didChangeDependencies() {
super.didChangeDependencies();
eindjaar = ModalRoute.of(context)!.instellingen.argumenten als int;
// ...
}
```
HTTP-oproep
In dit voorbeeld wordt de `get` functie uit het `http` pakket aangeroepen om de gegevens uit de
/href/
https://datausa.io/api/data?drilldowns=Nation&measures=Population&year=2018
datausa.io API
/%href/
, parseert de resulterende JSON met de `jsonDecode` methode van de `dart:convert` bibliotheek en houdt `Future` als onderdeel van de status met een eigenschap genaamd `_future`.
```
late Future