Aplicacions amb Flutter, Dart i Flame

Tutorial Flutter Flame Projectes   Recursos CITCEA
Exemples Dart Dades pràctiques     Inici

Accions controlades per temps

El temps es pot controlar amb les opcions de la biblioteca dart:async. Es pot fer que una acció succeeixi passat un temps o bé fer que es repeteixi de manera periòdica cada un cert interval.

Accions d'un sol cop

Tenim dues maneres de fer accions que s'executin passat un temps, amb Future.delayed o amb Timer.

Per a les accions d'un sol cop amb Future.delayed, a més d'importar la biblioteca dart:async, haurem de posar el mètode Future.delayed en el nostre giny. Si aquest mètode depèn d'alguna acció, per exemple prémer un botó, el posarem dins d'una funció.

  void retardat() {
    Future.delayed(Duration(seconds: 2), () {
      accio();
    });
  }

En aquest cas l'acció s'executa dos segons després d'executar la funció.

Amb Timer no hi ha gaires diferències:

  void retardat() {
    Timer(Duration(seconds: 2), () {
      accio();
    });
  }

La durada es pot establir amb diferents escales de temps, però sempre ha de ser un valor enter. Les opcions possibles són: days, hours, minutes, seconds, milliseconds i microseconds. Quan es fan servir valors petits (pocs mil·lisegons o microsegons) la precisió depèn del sistema operatiu sobre el qual s'executi l'aplicació.

En aquest exemple es fa servir una acció temporitzada quan es prem un polsador.

Accions periòdiques

Per a les accions periòdiques, a més d'importar la biblioteca dart:async necessitarem crear un objecte de tipus Timer en el nostre giny i afegir-hi dos mètodes (initState i dispose) que modifiquen mètodes interns de l'objecte. En el mètode initState caldrà indicar quina funció s'executa quan passi el temps establert.

class _PantPrincipalState extends State<PantPrincipal> {
  Timer? timer;
  ...
  @override
  Widget build(BuildContext context) {
  ...
  }

  void incre() {
  ...
  }

  @override
  void initState() {
    super.initState();
    timer = Timer.periodic(Duration(seconds: 5), (Timer t) => incre());
  }

  @override
  void dispose() {
    timer?.cancel();
    super.dispose();
  }
}

En aquest cas, el període s'ha establert en cinc segons. És molt important que la funció que s'executa periòdicament duri significativament menys que el període establert; en cas contrari es provocarien dues o més execucions simultànies de la funció, fet que pot portar problemes.

La durada es pot establir amb diferents escales de temps, però sempre ha de ser un valor enter. Les opcions possibles són: days, hours, minutes, seconds, milliseconds i microseconds. Quan es fan servir valors petits (pocs mil·lisegons o microsegons) la precisió depèn del sistema operatiu sobre el qual s'executi l'aplicació.

En aquest exemple es fa servir un temporitzador periòdic.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.