Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Escolha a sua bandeira

Olá! Baseado na sugestao do exercício eu resolvi fazer um "criador de bandeira". Como poderá ver tem algumas linhas a mais que ainda não vimos, e tive que pesquisar e quebrar um pouco a cabeça. Confesso que ainda não entendo 100%, mas espero que até o fim da minha jornada no curso esse código a seguir fará mais sentido.

import 'package:flutter/material.dart';


void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Choose your flag'),
        ),
        body: ListView(
          children: [
            Ex2Flag(),
          ],
        ),
        floatingActionButton: FloatingActionButton(onPressed: () {}),
      ),
    );
  }
}

class Ex2Flag extends StatefulWidget {
  @override
  State<Ex2Flag> createState() => _Ex2FlagState();
}

class _Ex2FlagState extends State<Ex2Flag> {
  List<List<Color>> _allColors = [
    [
      const Color.fromARGB(255, 0, 59, 108),
      const Color.fromARGB(255, 231, 15, 0),
      const Color.fromARGB(255, 0, 83, 3),
      const Color.fromARGB(255, 255, 255, 255),
      const Color.fromARGB(255, 0, 0, 0),
      Color.fromARGB(255, 18, 0, 214),
      Color.fromARGB(255, 213, 99, 0),
      Color.fromARGB(255, 249, 221, 4),
    ],
    [
      const Color.fromARGB(255, 0, 59, 108),
      const Color.fromARGB(255, 231, 15, 0),
      const Color.fromARGB(255, 0, 83, 3),
      const Color.fromARGB(255, 255, 255, 255),
      const Color.fromARGB(255, 0, 0, 0),
      Color.fromARGB(255, 18, 0, 214),
      Color.fromARGB(255, 213, 99, 0),
      Color.fromARGB(255, 249, 221, 4),
    ],
    [
      const Color.fromARGB(255, 0, 59, 108),
      const Color.fromARGB(255, 231, 15, 0),
      const Color.fromARGB(255, 0, 83, 3),
      const Color.fromARGB(255, 255, 255, 255),
      const Color.fromARGB(255, 0, 0, 0),
      Color.fromARGB(255, 18, 0, 214),
      Color.fromARGB(255, 213, 99, 0),
      Color.fromARGB(255, 249, 221, 4),
    ],
  ];
  List<int> _currentIndices = [0, 0, 0]; // Track individual color indices

  void _changeColor(int containerIndex) {
    setState(() {
      _currentIndices[containerIndex] = (_currentIndices[containerIndex] + 1) %
          _allColors[containerIndex].length;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 200,
      width: 350,
      color: Colors.grey,
      child: Padding(
        padding: const EdgeInsets.all(25.0),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            for (int i = 0; i < _allColors.length; i++)
              InkWell(
                onTap: () => _changeColor(i),
                child: Container(
                  color: _allColors[i]
                      [_currentIndices[i]], // Use color from individual list
                  width: 100,
                  height: 150,
                ),
              ),
          ],
        ),
      ),
    );
  }
}
3 respostas
solução!

Post removido

Basicamente ao clicar em cada retangulo inserido no container cinza você pode selecionar uma cor e formar a sua bandeira.

Olá, Thomas.

Tudo bem?

Parabéns pela iniciativa de criar um "criador de bandeira", isso mostra que você está realmente se esforçando para aprender e explorar novas possibilidades com o Flutter.

Entendendo o código:

Primeiro, você criou um aplicativo Flutter com um StatefulWidget chamado Ex2Flag. Dentro deste StatefulWidget, você tem uma lista de listas chamada _allColors, que armazena as cores que serão usadas para criar as bandeiras. Além disso, você tem outra lista chamada _currentIndices que é usada para rastrear o índice da cor atual de cada bandeira.

A função _changeColor(int containerIndex) é chamada quando você toca em uma das bandeiras. Esta função muda a cor da bandeira que você tocou, alterando o índice da cor atual (_currentIndices[containerIndex]) para o próximo índice na lista de cores (_allColors[containerIndex]).

No método build, você está criando um Container que contém uma Row de Containers. Cada um desses Containers representa uma bandeira, e a cor de cada bandeira é definida pelo índice da cor atual na lista de cores. Quando você toca em uma bandeira, a função _changeColor é chamada com o índice da bandeira que você tocou, e a cor da bandeira muda.

Seu código parece estar funcionando como esperado, com base na descrição do exercício. Se você ainda tem alguma dúvida sobre como ele funciona, eu recomendaria que você experimente alterar algumas coisas e veja o que acontece. Por exemplo, você poderia tentar adicionar mais cores à lista _allColors, ou alterar a forma como a função _changeColor muda a cor das bandeiras.

Eu coloquei sua resposta como solução sem querer

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software