Aplicacions amb Flutter, Dart i Flame

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

Millora de la presentació de resultats

El resultat que ens dona l'aplicació que tenim fins ara ens diu un valor teòric de resistència; però pot succeir que la resistència indicada no existeixi o sigui molt difícil de trobar. Per aquesta aplicació no calen resistències de precisió i, per tant, el més raonable seria fer servir la sèrie E12 que, com el seu nom indica, té dotze valors i dues xifres significatives. Per tant, el raonable seria calcular la resistència teòrica i agafar el valor normalitzat immediatament superior.

Els valors que poden obtenir-se com a resultat, les dues xifres significatives poden anar des de les unitats i un decimal fins a les unitats de miler i les centenes.

Fins ara, en el requadre de resultats s'escrivia directament el valor calculat amb dos decimals.

...
class _ReqResultState extends State<ReqResult> {
  @override
  Widget build(BuildContext context) {
    String txt = widget.resistencia >= 0
        ? "La resistència adequada és de: \n${widget.resistencia.toStringAsFixed(2).replaceAll('.', ',')} Ω"
        : "";
    return Expanded(
      child: Padding(
        padding: const EdgeInsets.only(left: 20, right: 20, bottom: 40),
        child: Container(
          alignment: Alignment.center,
          decoration: BoxDecoration(
            color: ColorsApp.component,
            borderRadius: BorderRadius.circular(12),
          ),
          child: Padding(
            padding: const EdgeInsets.all(20.0),
            child: Text(txt, style: Estils.estilTextResultat),
          ),
        ),
      ),
    );
  }
}

Ara farem una funció (que anomenarem resposta) que, si el valor de la resistència és vàlid, calculi el valor normalitzat més adequat i ja generi el text que cal mostrar.

...
class _ReqResultState extends State<ReqResult> {
  @override
  Widget build(BuildContext context) {
    String txt = widget.resistencia >= 0 ? resposta(widget.resistencia) : "";
    return Expanded(
      child: Padding(
        padding: const EdgeInsets.only(left: 20, right: 20, bottom: 40),
        child: Container(
          alignment: Alignment.center,
          decoration: BoxDecoration(
            color: ColorsApp.component,
            borderRadius: BorderRadius.circular(12),
          ),
          child: Padding(
            padding: const EdgeInsets.all(20.0),
            child: Text(txt, style: Estils.estilTextResultat),
          ),
        ),
      ),
    );
  }
}

String resposta(double resist) {
  List<int> valors = [10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, 82, 100];
  double multip = 0;
  int decim = 0;
  switch (resist) {
    case < 1:
      multip = 0;
      decim = 2;
    case < 10:
      multip = 0.1;
      decim = 1;
    case < 100:
      multip = 1;
      decim = 0;
    case < 1000:
      multip = 10;
      decim = 0;
    default:
      multip = 100;
      decim = 0;
  }
  for (var elem in valors) {
    double resNorm = elem * multip;
    if (resNorm >= resist) {
      return "La resistència adequada és de: \n${resNorm.toStringAsFixed(decim).replaceAll('.', ',')} Ω";
    }
  }
  return "No s'ha pogut trobar una resistència adequada";
}

A la vida real, les resistències més grans que 1000 Ω es mesuren en kΩ. Aquesta nova versió de la funció dona resultats en kΩ si el valor és superior o igual a mil.

...
String resposta(double resist) {
  List<int> valors = [10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, 82, 100];
  double multip = 0;
  int decim = 0;
  String unitats = "Ω";
  switch (resist) {
    case < 1:
      multip = 0;
      decim = 2;
    case < 10:
      multip = 0.1;
      decim = 1;
    case < 100:
      multip = 1;
      decim = 0;
    case < 1000:
      multip = 10;
      decim = 0;
    default:
      multip = 100;
      decim = 0;
  }
  for (var elem in valors) {
   double resNorm = elem * multip;
    if (resNorm >= resist) {
      if (resNorm >= 1000) {
        resNorm /= 1000;
        unitats = "kΩ";
        decim = 1;
      }
      return "La resistència adequada és de: \n${resNorm.toStringAsFixed(decim).replaceAll('.', ',')} $unitats";
    }
  }
  return "No s'ha pogut trobar una resistència adequada";
}

 

 

 

 

 

 

 

 

 

 

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