es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo asigno colores a los contenedores de una lista de colores?

¿Cómo asigno colores a mi fila a partir de una lista de colores?

Aquí está el código.

import 'dart:math';

<p>import 'package:flutter/material.dart';</p>

<p>void main() {
  runApp(MyApp());
}</p>

<p>class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Demo de Flutter',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Matriz de Filas y Columnas'),
    );
  }
}</p>

<p>class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);</p>

<p>final String title;</p>

<p>@override
  _MyHomePageState createState() => _MyHomePageState();
}</p>

<p>class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    List<Color> muchosColores = [
      Colors.red,
      Colors.green,
      Colors.blue,
      Colors.yellow,
      Colors.brown,
      Colors.purple,
      Colors.orange,
      Colors.pink
    ];</p>

<pre><code>List<Widget> misHijosFila = [];
List<List<int>> numeros = [];
List<int> numerosColumna = [];
int z = 1;
int numeroTubos = 18;
Color colorContenedor = Colors.red;

for (int i = 0; i < numeroTubos; i++) {
  int fibrasPorTubo = 24;
  for (int y = 0; y < fibrasPorTubo; y++) {
    int numeroActual = z + y;
    numerosColumna.add(numeroActual);
  }
  z += fibrasPorTubo;

  numeros.add(numerosColumna);
  numerosColumna = [];
}

misHijosFila = numeros
    .map(
      (columnas) => Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: columnas.map((nr) {


          return Container(
            padding: EdgeInsets.all(2),
            decoration: BoxDecoration(
                color: muchosColores[0],
                border: Border.all(
                  color: Colors.black,
                  width: 1,
                )),
            child: Text(
              nr.toString(),
            ),
          );
        }).toList(),
      ),
    )
    .toList();

return Scaffold(
  appBar: AppBar(
    title: Text(widget.title),
  ),
  body: SingleChildScrollView(
    scrollDirection: Axis.horizontal,
    child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: misHijosFila,
    ),
  ),
);
</code></pre>

<p>}
}

Quiero asignar el primer color de la lista a la primera fila, el segundo color de la lista a la segunda fila y así sucesivamente.

Quiero lograr la funcionalidad de este gráfico en mi aplicación

Básicamente, esto es un gráfico para codificación de colores de fibra óptica. Agregaré una fila en la parte superior de mi matriz que tendrá nombres de columna para cada columna del gráfico.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para asignar colores a las filas a partir de una lista de colores, puedes modificar la lista myRowChildren dentro de la clase _MyHomePageState para que incluya un contador que se incrementa con cada fila, y usar ese contador como índice en la lista manyColors:

    // Inicializa un contador de filas
    int rowCounter = 0;
    
    myRowChildren = numbers
        .map(
          (columns) => Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
                // Agrega una fila para los nombres de las columnas al principio
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: columns.map((nr) {
                    return SizedBox(
                      width: 30,
                      child: Text(
                        'Columna $nr',
                        overflow: TextOverflow.ellipsis,
                      ),
                    );
                  }).toList(),
                ),
                // Agrega una fila para los colores asignados a las fibras
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: columns.map((nr) {
                    return Container(
                      padding: EdgeInsets.all(2),
                      // Usa el contador de filas como índice en la lista manyColors
                      decoration: BoxDecoration(
                        color: manyColors[rowCounter % manyColors.length],
                        border: Border.all(
                          color: Colors.black,
                          width: 1,
                        ),
                      ),
                      child: SizedBox(
                        width: 30,
                        child: Text(
                          '',
                          style: TextStyle(
                            color: Colors.white,
                          ),
                        ),
                      ),
                    );
                  }).toList(),
                ),
                // Agrega una fila de espacio entre los colores de las fibras y los números
                SizedBox(height: 10),
                // Agrega una fila para los números de las fibras
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: columns.map((nr) {
                    return Container(
                      padding: EdgeInsets.all(2),
                      decoration: BoxDecoration(
                        color: Colors.white,
                        border: Border.all(
                          color: Colors.black,
                          width: 1,
                        ),
                      ),
                      child: SizedBox(
                        width: 30,
                        child: Text(
                          nr.toString(),
                        ),
                      ),
                    );
                  }).toList(),
                ),
            ],
          ),
        )
        .toList();
    
        // Incrementa el contador de filas después de que se agrega cada fila
        rowCounter++;
    

    Este código agrega tres filas para cada conjunto de columnas de fibra: una fila para los nombres de las columnas, una fila para los colores de las fibras con colores asignados, y una fila para los números de las fibras. La variable rowCounter se usa como índice en la lista manyColors, y se incrementa después de agregar cada fila para asegurarse de que cada una reciba un color diferente de la lista.

    Ten en cuenta que el código anterior asume que hay al menos tantos colores en manyColors como filas en el gráfico. Si manyColors tiene menos colores que el número de filas, el índice se volverá a iniciar y se repetirán colores desde el principio de la lista.

Comments are closed.