Categoria: IA

Your blog category

  • Projeto

    import ‘package:flutter/material.dart’;
    void main() {
      runApp(
        MaterialApp(
          debugShowCheckedModeBanner: false,
          home: HomeMain(),
        ),
      );
    }
    class HomeMain extends StatefulWidget {
      @override
      HomeMainState createState() => HomeMainState();
    }
    class HomeMainState extends State<HomeMain> {
      int itemSelecionado = 0;
      List<Map<String, String>> listaDados = [];
      int? indexEditando;
      void salvarDados(Map<String, String> novosDados) {
        setState(() {
          if (indexEditando == null) {
            listaDados.add(novosDados);
          } else {
            listaDados[indexEditando!] = novosDados;
            indexEditando = null;
          }
          itemSelecionado = 0;
        });
      }
      void editarItem(int index) {
        setState(() {
          indexEditando = index;
          itemSelecionado = 1;
        });
      }
      void deletarItem(int index) {
        setState(() {
          listaDados.removeAt(index);
        });
      }
      @override
      Widget build(BuildContext context) {
        final pages = [
          HomePage(
            dados: listaDados,
            onEditar: editarItem,
            onDeletar: deletarItem,
          ),
          RegisterPage(
            onSalvar: salvarDados,
            dadosEdicao:
                indexEditando != null ? listaDados[indexEditando!] : null,
          ),
        ];
        return Scaffold(
          backgroundColor: Color(0xFFf8f3e9),
          appBar: AppBar(
            backgroundColor: Color(0xFFf8f3e9),
            title: Center(child: Text(“Terra Viva”)),
          ),
          body: IndexedStack(
            index: itemSelecionado,
            children: pages,
          ),
          bottomNavigationBar: BottomNavigationBar(
            currentIndex: itemSelecionado,
            onTap: (valor) {
              setState(() {
                itemSelecionado = valor;
              });
            },
            items: const [
              BottomNavigationBarItem(icon: Icon(Icons.home), label: ‘Home’),
              BottomNavigationBarItem(
                  icon: Icon(Icons.app_registration), label: ‘Cadastrar’),
            ],
          ),
        );
      }
    }
    /* ========================= HOME ========================= */
    class HomePage extends StatelessWidget {
      final List<Map<String, String>> dados;
      final Function(int index) onEditar;
      final Function(int index) onDeletar;
      HomePage({
        required this.dados,
        required this.onEditar,
        required this.onDeletar,
      });
      @override
      Widget build(BuildContext context) {
        return Column(
          children: [
            Container(
              height: 250,
              width: double.infinity,
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  colors: [Color(0xFF5E4638), Color(0xFF5E4638)],
                ),
                borderRadius: BorderRadius.only(
                  bottomLeft: Radius.circular(30),
                  bottomRight: Radius.circular(30),
                ),
              ),
              child: Padding(
                padding: EdgeInsets.fromLTRB(16, 60, 16, 0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(“Raízes Vivas”,
                        style: TextStyle(color: Colors.white)),
                    SizedBox(height: 10),
                    Text(
                      “Conecte-se\ncom nossas\nraízes”,
                      style: TextStyle(
                        fontSize: 26,
                        fontWeight: FontWeight.bold,
                        color: Color.fromARGB(255, 255, 255, 255),
                      ),
                    ),
                    SizedBox(height: 10),
                    Text(
                      “Informação, cultura e território na palma da sua mão.”,
                      style: TextStyle(color: Colors.white),
                    ),
                  ],
                ),
              ),
            ),
            Expanded(
              child: dados.isEmpty
                  ? Center(child: Text(“Nenhum dado foi cadastrado”))
                  : ListView.builder(
                      itemCount: dados.length,
                      itemBuilder: (context, index) {
                        final item = dados[index];
                        return Card(
                          margin: EdgeInsets.all(10),
                          child: Padding(
                            padding: EdgeInsets.all(12),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Text(
                                  item[‘territorio’] ?? ”,
                                  style: TextStyle(
                                      fontSize: 18,
                                      fontWeight: FontWeight.bold),
                                ),
                                Text(“Povo: ${item[‘povo’] ?? ”}”),
                                Text(“Local: ${item[‘localizacao’] ?? ”}”),
                                Text(“Data: ${item[‘data’] ?? ”}”),
                                Text(“Descrição:\n${item[‘descricao’] ?? ”}”),
                                SizedBox(height: 10),
                                Row(
                                  children: [
                                    ElevatedButton(
                                      onPressed: () => onEditar(index),
                                      child: Text(“Editar”),
                                    ),
                                    SizedBox(width: 10),
                                    ElevatedButton(
                                      style: ElevatedButton.styleFrom(
                                        backgroundColor: Color(0xFF337357),
                                      ),
                                      onPressed: () => onDeletar(index),
                                      child: Text(“Excluir”, style: TextStyle(color: Colors.white)),
                                    ),
                                  ],
                                )
                              ],
                            ),
                          ),
                        );
                      },
                    ),
            )
          ],
        );
      }
    }
    /* ========================= FORM ========================= */
    class RegisterPage extends StatefulWidget {
      final Function(Map<String, String>) onSalvar;
      final Map<String, String>? dadosEdicao;
      const RegisterPage({
        required this.onSalvar,
        this.dadosEdicao,
        super.key,
      });
      @override
      RegisterPageState createState() => RegisterPageState();
    }
    class RegisterPageState extends State<RegisterPage> {
      final territorioController = TextEditingController();
      final povoController = TextEditingController();
      final localizacaoController = TextEditingController();
      final dataController = TextEditingController();
      final descricaoController = TextEditingController();
      @override
      void initState() {
        super.initState();
        final d = widget.dadosEdicao;
        if (d != null) {
          territorioController.text = d[‘territorio’] ?? ”;
          povoController.text = d[‘povo’] ?? ”;
          localizacaoController.text = d[‘localizacao’] ?? ”;
          dataController.text = d[‘data’] ?? ”;
          descricaoController.text = d[‘descricao’] ?? ”;
        }
      }
      Map<String, String> salvarInfo() {
        return {
          ‘territorio’: territorioController.text,
          ‘povo’: povoController.text,
          ‘localizacao’: localizacaoController.text,
          ‘data’: dataController.text,
          ‘descricao’: descricaoController.text,
        };
      }
      @override
      Widget build(BuildContext context) {
        final isEdit = widget.dadosEdicao != null;
        return SingleChildScrollView(
          child: Column(
            children: [
              Container(
                height: 150,
                width: double.infinity,
                color: Color(0xFF8AA06A),
                child: Center(
                  child: Text(
                    isEdit ? “Editar território” : “Novo território”,
                    style: TextStyle(color: Colors.white, fontSize: 22),
                  ),
                ),
              ),
              Padding(
                padding: EdgeInsets.all(16),
                child: Column(
                  children: [
                    TextField(
                      controller: territorioController,
                      decoration:
                          InputDecoration(labelText: “Nome do território”),
                    ),
                    TextField(
                      controller: povoController,
                      decoration:
                          InputDecoration(labelText: “Povo indígena”),
                    ),
                    TextField(
                      controller: localizacaoController,
                      decoration: InputDecoration(labelText: “Localização”),
                    ),
                    TextField(
                      controller: dataController,
                      decoration:
                          InputDecoration(labelText: “Data de reconhecimento”),
                    ),
                    TextField(
                      controller: descricaoController,
                      decoration: InputDecoration(labelText: “Descrição”),
                    ),
                    SizedBox(height: 20),
                    SizedBox(
                      width: double.infinity,
                      child: ElevatedButton(
                        onPressed: () {
                          widget.onSalvar(salvarInfo());
                        },
                        child: Text(isEdit ? “Atualizar” : “Cadastrar”),
                      ),
                    )
                  ],
                ),
              )
            ],
          ),
        );
      }
    }