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”),
                  ),
                )
              ],
            ),
          )
        ],
      ),
    );
  }
}

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *