Animaatioiden yksinkertaistaminen Flutterissa implisiittisesti animoitujen widgettien avulla
Implisiittisesti animoitujen widgettien avulla
Animaatioita on melko helppo tehdä Flutterissa ja paljon monimutkaisuutta voidaan saavuttaa paljon vähemmällä vaivalla kuin natiivissa Androidissa. Tämä saavutetaan yleensä tavoilla, kuten määrittelemällä Animation + AnimationController. Mutta on olemassa sisäänrakennettuja widgettejä, jotka jopa vähentävät tätä ja tekevät animaatioista yhtä helppoja kuin pelkkä arvojen muuttaminen!
Täydelliset esimerkit löytyvät artikkelin lopussa mainitulta Github-sivultani.
An AnimatedContainer siirtyy automaattisesti määritettyihin arvoihin (väreihin, kokoihin jne.) sen sijaan, että se muuttuisi niihin vain hetkessä. Yllä annettu GIF on esimerkki AnimatedContainerista.
An AnimatedContainer määritellään seuraavasti:
var myColor = Colors.blue;
var myHeight = 100.0;
var myWidth = 100.0;AnimatedContainer(
duration: Duration(seconds: 1),
color: myColor,
height: myHeight,
width: myWidth,
),
Normaalitapauksissa määrittelisit ohjaimen ja Tween<double>:n ja ColorTweenin saavuttaaksesi yllä olevan GIF:n mukaisen animaation. Mutta AnimatedContainerin kanssa sinun tarvitsee vain:
- Määritä animaation kesto
duration: Duration(seconds: 1),
2. Muuta arvoja (Muuta väri ja koko omiin arvoihisi)
myColor = Colors.green;
myHeight = MediaQuery.of(context).size.height;
myWidth = MediaQuery.of(context).size.width;
3. SetState()
setState(() {});
Ei ohjaimia. Ei Tweenejä.
Hetkellä kun muutat arvoja myColor, my Height tai myWidth ja setState(), kontti siirtyy automaattisesti arvoihin sen sijaan, että vaihtaisi suoraan kyseiseen arvoon.
onPressed: () {
myColor = Colors.green;
myHeight = MediaQuery.of(context).size.height;
myWidth = MediaQuery.of(context).size.width;
setState(() {});
}
Alussa myColor oli asetettu arvoon Colors.blue. Kun muutamme sen arvoksi Colors.green ja setState:lla rakennamme sen uudelleen, se siirtyy sinisestä vihreään ilman, että Tweenejä käytetään. (Huomautus: Tweenejä käytetään implisiittisesti, mutta niiden ei tarvitse olla käyttäjän määrittelemiä.)
Mitä olen nähnyt, monet kehittäjät eivät näytä olevan tietoisia näistä implisiittisesti animoiduista widgetistä ja tuhlaavat aikaa, kun se ei ole tarpeen. Ilmeisesti on tapauksia, joissa voi haluta toisenlaista käyttäytymistä, mutta useimmiten AnimatedContainer hoitaa homman.