Generar Listado de Widgets Aleatorios en Flutter

Te voy a mostrar cómo puedes generar un listado aleatorio de elementos entiéndase con elementos que pueden ser de enteros es decir números flotantes guanos u objetos como es mi caso entonces es muy sencillo realmente el esquema que estoy siguiendo aquí fíjate en la parte de construcción de la lista en la parte importante esto sería mediante una Api Pero obviamente puedes tener un listado por ahí estático o generado de otra forma aquí finalmente tenemos el listado al momento de construir ir lo por aquí le agregué lo
que es un parámetro adicional:

class QuestionModel {
  int id;
  String title;
  String tagTitle;
  String tagDescription;
  String type;
  int tagId;
  int questionsQuantity;
  String language;
  int randomOrder = 0;
  List<QuestionSimpleModel> questionsSimple = [];

  QuestionModel.fromJson(Map<String, dynamic> qMap)
      : id = qMap['id'],
        title = qMap['title'],
        tagTitle = qMap['tag_title'],
        tagDescription = qMap['tag_description'],
        tagId = qMap['tag_id'],
        type = qMap['type'],
        questionsQuantity = qMap['questions_quantity'] ?? 0,
        randomOrder = Random().nextInt(100), // orden aleatorio
        language = qMap['language'];
}

Que es para indicar el orden esto puede ser un poco ineficiente esto es algo que estoy evaluando como lo puedo corregir un poco ya que estamos creando si tenemos por ejemplo un listado de 1000 elementos entonces aquí estuviéramos creando 1000 instancias de Random cosa que sería ineficiente ya que con una sola instancia pudiéramos generar el número aleatorio por lo tanto aquí se lo pudiera pasar como parámetro y lo construyo en donde est invocando este método pudiera ser una solución pero de momento lo tengo así para mi caso son simplemente 15 preguntas entonces 15 preguntas por vez entonces no me afecta mucho pero te lo dejo ahí pendiente en resumen aquí colocas en este caso listado de objetos la Data que tú quieras manejar en mi caso es la que estás viendo en pantalla y adicionalmente creas un parámetro que es para generar el orden aleatorio aquí siéntete libre de como quien dice modificarlo como tú quieras perfectamente también puedes crearte una clase base que tenga este parámetro para indicar que se va a ordenar y recibir
una instancia genérica un dinámico que viene siendo el modelo acá entonces en caso de que no quieras entre comillas ensuciar la distancia de la clase o la definición de la clase con un parámetro de este tipo que no tiene absolutamente nada que ver con la clase puedes crearte una clase de manera wrapper Por así decirlo es decir una clase llamada order y ahí defines este parámetro y luego el parámetro que sea de tipo Dinámico o un template y aquí defines lo que es el modelo en sí que estás trabajando pero en fin esto es una forma sencilla de hacerlo sin muchos problemas esto es una simplemente es decir con esto no se está ordenando de manera aleatoria donde lo hacemos es justamente acá aquí estamos como quien dice construyendo nuestro listado otra vez aquí esto puede ser cualquier cosa en mi caso es una petición a mi apir y aquí mediante el método llamado sor:

_questions = await QuestionHelper.getQuestionGetByPrincipalId(
       widget.id, userPreference.locale);
   // orden aleatorio
   _questions.sort((a, b) => a.randomOrder.compareTo(b.randomOrder));

Lo que hacemos es la ordenación la ordenación en base a algún parámetro en este caso es mediante el número generado de manera aleatoria y es así de simple por lo demás no hay más nada que hacer en la práctica tenemos lo siguiente voy a venir aquí al de al módulo de question venimos a question voy a agarrar una por ejemplo javascript aspectos básicos aquí lo tenemos tal cual puedes ver esta Sería para la primera parte Esto es lo primero que está preguntando qué métodos utiliza para escribir en la consola de navegador ahora sería Cuál es el valor de retorno vamos otra vez entrar al módulo ahora fíjate que está preguntando otra cosa por lo tanto la ordenación aleatoria que hicimos antes está funcionando correctamente.

- Andrés Cruz

In english

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.