Saltar al contenido

¿Cómo ordenar/ordenar una lista por fecha en dart/flutter?

Te recomendamos que revises esta resolución en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

En tu ejemplo anterior, expiry es un String, no un objeto DateTime. Tienes algunas opciones aquí, dependiendo de lo que quieras lograr.

La solución más fácil sería utilizar la función integrada de String. compareTo método, que permite ordenar cadenas. Esas marcas de tiempo ya están en un formato ordenable, por lo que esto funcionaría:

products.sort((a,b) 
    return a.compareTo(b);
 );

O más conciso:

products.sort((a,b) => a.compareTo(b));

Esto es bastante básico. Al igual que pskink mencionado en el comentario, basándose en esto, podría convertir las Cadenas en objetos DateTime reales.

DateTime expiryAsDateTime = DateTime.parse(expiry);

DateTime también tiene incorporado compareTo método, por lo que el fragmento de código anterior funcionaría tanto con DateTimes como con Strings.

Si desea invertir el orden, simplemente intercambie a y b.

Lo arreglé cambiando changing a.expiry into a['expiry'] y b.expiry into b['expiry']

products.sort((a,b) 
 var adate = a['expiry'] //before -> var adate = a.expiry;
 var bdate = b['expiry'] //before -> var bdate = b.expiry;
 return adate.compareTo(bdate); //to get the order other way just switch `adate & bdate`
);

convertir a fecha y hora

import 'package:intl/intl.dart';

void main() 
  List products = [
    "2019-11-25 00:00:00.000",
    "2019-11-22 00:00:00.000",
    "2019-11-22 00:00:00.000",
    "2019-11-24 00:00:00.000",
    "2019-11-23 00:00:00.000"
  ];
  List newProducts = [];
  DateFormat format = DateFormat("yyyy-MM-dd");

  for (int i = 0; i < 5; i++) 
    newProducts.add(format.parse(products[i]));
  
  newProducts.sort((a,b) => a.compareTo(b));

  for (int i = 0; i < 5; i++) 
    print(newProducts[i]);
  

sin convertir a DateTime

import 'package:intl/intl.dart';

void main() 
  List products = [
    "2019-11-25 00:00:00.000",
    "2019-11-22 00:00:00.000",
    "2019-11-22 00:00:00.000",
    "2019-11-24 00:00:00.000",
    "2019-11-23 00:00:00.000"
  ];

  products.sort((a,b) => a.compareTo(b));

  for (int i = 0; i < 5; i++) 
    print(products[i]);
  

Comentarios y calificaciones del artículo

Si te gusta la programación, puedes dejar una división acerca de qué te ha gustado de esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *