Conectar Design System

Version Flutter Dart License

Sistema de design completo para Flutter com componentes reutilizáveis e suporte multiplataforma

📱 Demo Web📖 Documentação🐛 Issues💬 Discussões

📊 Status do Build

Plataforma Status Tempo de Build
🌐 Web ✅ Passando ~20s
📱 iOS ✅ Passando ~90s
🤖 Android ✅ Passando ~75s
🧪 Testes ✅ 100% ~3s

📋 Índice

🚀 Instalação

Via Git (Recomendado)

dependencies:
  conectar_design_system:
    git:
      url: https://github.com/seu-usuario/conectar_design_system.git
      ref: v0.1.3

Via Pub.dev (Em breve)

dependencies:
  conectar_design_system: ^0.1.3

Instalação rápida

flutter pub add conectar_design_system
flutter pub get

⚙️ Configuração

Inicialização básica

import 'package:conectar_design_system/conectar_design_system.dart';

void main() {
  // Inicializar o design system
  ConectarDesignSystem.init(
    systemSettings: ConectarSettings(
      primaryColor: Color(0xff1bb17a),
      backgroundColor: Color(0xFFfafafa),
      successColor: Color(0xFF4CAF50),
      textColor: Color(0xFF000000),
      borderColor: Color(0xFFDEE2E6),
    ),
  );

  runApp(MyApp());
}

Configuração avançada

ConectarDesignSystem.init(
  systemSettings: ConectarSettings(
    // Cores principais
    primaryColor: Color(0xff1bb17a),
    secondaryColor: Color(0xFF6C757D),
    backgroundColor: Color(0xFFfafafa),

    // Estados
    successColor: Color(0xFF4CAF50),
    warningColor: Color(0xFFFF9800),
    errorColor: Color(0xFFF44336),
    infoColor: Color(0xFF2196F3),

    // Texto e bordas
    textColor: Color(0xFF000000),
    borderColor: Color(0xFFDEE2E6),

    // Configurações específicas
    enableDebug: true,
    defaultFontFamily: 'Roboto',
  ),
);

🧩 Componentes

🎯 Novos Destaques

📸 MyImagePicker (v0.1.1) - NOVO!

Seletor de imagens revolucionário com suporte completo multiplataforma:

MyImagePicker(
  label: "Selecionar Foto do Perfil",
  width: 300,
  height: 200,
  defaultSource: ImageSource.gallery,
  onImageSelected: (XFile? image) {
    if (image != null) {
      print('Imagem selecionada: ${image.name}');
      print('Caminho: ${image.path}');

      // Ler bytes se necessário
      final bytes = await image.readAsBytes();
    }
  },
),

Funcionalidades:

  • 📸 Câmera nativa: Suporte completo em todas as plataformas
  • 🖼️ Galeria: Seleção de imagens existentes
  • 🗑️ Remover: Botão para limpar seleção
  • 🎨 Preview: Visualização com informações da imagem
  • 📱 Otimizações: Android Photo Picker (13+), PHPicker (iOS 14+)
  • 📐 Responsivo: Layout adaptável e constraints seguros

🔘 Botões

// Botão principal
MyButton(
  text: "Salvar",
  onPressed: () => print("Salvando..."),
  backgroundColor: Colors.green,
  icon: Icons.save,
)

// Botão flat
MyFlatButton(
  text: "Cancelar",
  onPressed: () => Navigator.pop(context),
)

// Botão link
MyLinkButton(
  text: "Esqueci minha senha",
  onPressed: () => _resetPassword(),
)

📝 Campos de Formulário

// Campo de texto com debounce
MyDebouncedTextFormField(
  label: "Buscar produtos",
  hintText: "Digite para buscar...",
  onChanged: (value) => _searchProducts(value),
  debounceTime: Duration(milliseconds: 500),
)

// Dropdown com BaseModel
MyDrowdownFormField<StatusModel>(
  label: "Status do Pedido",
  items: statusList,
  selectedItem: selectedStatus,
  onChanged: (status) => setState(() => selectedStatus = status),
  required: true,
)

// Campo de moeda
MyCurrencyFormField(
  label: "Valor do Produto",
  onChanged: (value) => _updatePrice(value),
  prefix: "R\$ ",
)

🃏 Cartões e Containers

MyBaseCard(
  title: "Informações do Cliente",
  subtitle: "Dados cadastrais atualizados",
  showBullet: true,
  backgroundColor: Colors.blue[50],
  child: Column(
    children: [
      Text("Nome: João Silva"),
      Text("Email: joao@email.com"),
    ],
  ),
)

☑️ Seleção

// Múltipla seleção
MyMultiSelectDropdownFormField<CategoryModel>(
  label: "Categorias",
  items: categoryList,
  selectedItems: selectedCategories,
  onChanged: (categories) => _updateCategories(categories),
)

// Checkbox personalizado
MyRoundedCheckbox(
  value: isAccepted,
  onChanged: (value) => setState(() => isAccepted = value),
  label: "Aceito os termos de uso",
)

// Switch
MySwitchButton(
  value: isEnabled,
  onChanged: (value) => _toggleFeature(value),
  activeText: "Ativo",
  inactiveText: "Inativo",
)

📊 Tabelas

MyTableView<ProductModel>(
  columns: [
    TableColumn(key: 'name', title: 'Produto'),
    TableColumn(key: 'price', title: 'Preço'),
    TableColumn(key: 'category', title: 'Categoria'),
  ],
  data: productList,
  onRowTap: (product) => _editProduct(product),
  pagination: PaginationModel(
    currentPage: 1,
    totalPages: 10,
    itemsPerPage: 20,
  ),
)

🛠️ Utilitários

🔍 PlatformUtils

// Detecção de plataforma
if (PlatformUtils.isWeb) {
  // Lógica específica para web
} else if (PlatformUtils.isMobile) {
  // Lógica para mobile
}

print(PlatformUtils.platformName); // "Web", "iOS", "Android", etc.

📱 Responsive

Responsive(
  mobile: MobileLayout(),
  tablet: TabletLayout(),
  desktop: DesktopLayout(),
)

🎯 Debounce

final debouncer = Debounce(duration: Duration(milliseconds: 300));

debouncer.call(() {
  // Ação com debounce
  _performSearch(query);
});

📦 Modelos

BaseModel

class ProductModel extends BaseModel {
  final String id;
  final String name;
  final double price;

  ProductModel({
    required this.id,
    required this.name,
    required this.price,
  });

  @override
  String get internalId => id;

  @override
  String get title => name;

  @override
  Map<String, dynamic> toJson() => {
    'id': id,
    'name': name,
    'price': price,
  };
}

✔️ Validadores

MyTextFormField(
  label: "Email",
  validator: Validators.compose([
    Validators.required("Email é obrigatório"),
    Validators.email("Email inválido"),
  ]),
)

MyTextFormField(
  label: "CPF",
  validator: Validators.cpf("CPF inválido"),
  inputFormatters: [TaxInputFormatter()],
)

🎮 Showcase App

Execute o app de demonstração para ver todos os componentes em ação:

cd example
flutter run -d chrome  # Para web
flutter run            # Para mobile

Páginas disponíveis:

  • 🏠 Visão Geral: Estatísticas e introdução
  • 🔘 Botões: Todos os tipos de botão
  • 📝 Formulários: Campos e validação
  • 🃏 Cartões: Containers e layouts
  • ☑️ Seleção: Checkboxes, switches, radio
  • 🎞️ Mídia: Image picker e players
  • 📊 Tabelas: Grids e paginação
  • 🛠️ Utilitários: Helpers e tools
  • 🔧 Componentes Corrigidos: Testes de compatibilidade

🧪 Testes

Executar todos os testes

# Testes unitários
flutter test

# Testes específicos
flutter test test/my_image_picker_test.dart
flutter test test/fixed_components_test.dart

# Testes de compatibilidade
./scripts/test_platforms.sh

Coverage atual

  • MyImagePicker: 6/6 testes passando
  • Componentes Corrigidos: 6/6 testes passando
  • Layout Tests: 5/5 testes passando

🛠️ Scripts de Desenvolvimento

O projeto inclui scripts úteis para desenvolvimento e publicação:

Script de Desenvolvimento (scripts/dev.sh)

# Configurar projeto pela primeira vez
./scripts/dev.sh setup

# Executar testes
./scripts/dev.sh test

# Análise de código
./scripts/dev.sh analyze

# Formatar código
./scripts/dev.sh format

# Build para todas as plataformas
./scripts/dev.sh build

# Executar showcase
./scripts/dev.sh showcase

# Executar showcase na web
./scripts/dev.sh web

# Limpar projeto
./scripts/dev.sh clean

# Health check completo
./scripts/dev.sh check

# Ver ajuda
./scripts/dev.sh help

Script de Publicação (publisher.sh)

Script avançado para publicação automatizada:

# Bump automático de versão
./publisher.sh patch   # 0.1.1 -> 0.1.2
./publisher.sh minor   # 0.1.1 -> 0.2.0
./publisher.sh major   # 0.1.1 -> 1.0.0

# Versão específica
./publisher.sh 1.2.3

# Modo interativo
./publisher.sh

# Ver ajuda
./publisher.sh --help

O que o script de publicação faz:

  • ✅ Valida e atualiza versões
  • ✅ Executa análise de código
  • ✅ Roda todos os testes
  • ✅ Testa builds multiplataforma
  • ✅ Atualiza documentação
  • ✅ Cria commits e tags git
  • ✅ Publica no pub.flutter-io.cn

Script de Teste de Plataformas (scripts/test_platforms.sh)

# Testar todas as plataformas
./scripts/test_platforms.sh

# Testar plataforma específica
./scripts/test_platforms.sh web
./scripts/test_platforms.sh ios
./scripts/test_platforms.sh android

📚 Documentação

Arquivos de documentação:

🤝 Contribuindo

Adoramos contribuições! Veja nosso Guia de Contribuição.

Como contribuir:

  1. 🍴 Fork o projeto
  2. 🔧 Crie sua feature branch (git checkout -b feature/AmazingFeature)
  3. ✅ Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. 📤 Push para a branch (git push origin feature/AmazingFeature)
  5. 🔄 Abra um Pull Request

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

🙏 Agradecimentos

  • Flutter Team pela plataforma incrível
  • image_picker pela solução multiplataforma
  • Comunidade Flutter pelos feedbacks e contribuições

Feito com ❤️ pela equipe Conectar

⬆ Voltar ao topo

Libraries

app/app_label
app/app_widget
commons/debounce
commons/document_dalidator
commons/platform_utils
commons/request_handler
commons/responsive
components/custom_loading_overlay
components/final_step_view
components/index
components/my_alert_view
components/my_animated_star_rating
components/my_base_card
components/my_base_login_widget
components/my_button
components/my_calendar_picker
components/my_checkbox_group
components/my_currency_form_field
components/my_debounced_text_form_field
components/my_dropdown_form_field
components/my_filter_view
components/my_flat_button
components/my_image_picker
components/my_internal_widget
components/my_label_form_field_text
components/my_modal_view
components/my_multi_select_dropdown_form_field
components/my_notification_icon
components/my_paginated_component
components/my_radion_options
components/my_register_steps
components/my_rounded_checkbox
components/my_row
components/my_search_field
components/my_switch_button
components/my_tabbar
components/my_text
components/my_text_form_field
components/table_view/models/table_models
components/table_view/my_table_view
components/table_view/widgets/table_builders
conectar_design_system
conectar_design_system_method_channel
conectar_design_system_platform_interface
conectar_design_system_web
conectar_settings
debug/logger
extensions/date_extension
extensions/paginated_model_extensions
extensions/string_extension
managers/storage_manager
models/base_model
models/base_request
models/base_response
models/boolean_select_model
models/index
models/paginated_model
models/pagination_model
models/status_select_model
models/supplier_status_model
network/api_connect
network/interface_http_client
platform_config
repositories/interface_repository
validators/index
validators/tax_input_formatter