Skip to main content

Subtask 06 — Bottom Sheet de Escolha de Modalidade

Task pai: 197313 — Ajuste de layout nova vitrine Ordem de execução: 06 de 07 Depende de: 02 — Listagem v2 (usa hasSellerStock), 05 — Criação SellerStock (chama createSellerStock())

Objetivo

Implementar o bottom sheet "Escolha uma opção" exibido ao tocar em CRIAR VITRINE, com as opções Vitrine do estoque da loja (com badge "Nova", habilitada/desabilitada conforme hasSellerStock) e Criar nova vitrine (fluxo atual, sem mudança).

Requisitos atendidos

  • RF-02 — Bottom sheet de escolha de modalidade ao criar vitrine: AC1 a AC8.

Relação com o design doc

  • Decisão #1 — Bottom Sheet de Escolha de Modalidade (desing-doc.md): novo widget ShowCaseTypeSelectionBottomSheet, reaproveitando GetxBottomSheet.showBottomSheet(); badge "Nova" via ZzTag(theme: ZzTagTheme.newFeature) (novo valor de enum, cores confirmadas nas imagens do Figma).
  • Referências visuais: context/image.png, context/image-1.png (habilitado), context/image-2.png (desabilitado).

Arquivos a criar

ArquivoDescrição
lib/screens/show_case/widgets/show_case_type_selection_bottom_sheet.dartBottom sheet com as 2 opções, recebe hasSellerStock como prop, dispara MyShowCaseController.createSellerStock() ou navega para showCaseSearchProducts.

Arquivos a modificar

ArquivoModificação
lib/theme_widgets/tag/tag.dart+ ZzTagTheme.newFeature (backgroundColor: ZZColors.successMedium, foregroundColor: ZZColors.neutralLightest). Atenção: verificar se existe algum outro switch exaustivo sobre ZzTagTheme em outro arquivo que precise do novo case também.
lib/screens/show_case/show_case/my_show_case_controller.dartcreateFastCatalog() passa a chamar GetxBottomSheet.showBottomSheet<ShowCaseTypeSelectionBottomSheet>(hasSellerStock: _hasSellerStock.value) em vez de navegar direto para showCaseSearchProducts.

Testes unitários a criar

  • test/theme_widgets/tag/tag_test.dart (criar se não existir)
    • ZzTagTheme.newFeature.backgroundColor == ZZColors.successMedium
    • ZzTagTheme.newFeature.foregroundColor == ZZColors.neutralLightest
  • test/screens/show_case/widgets/show_case_type_selection_bottom_sheet_test.dart (widget test)
    • hasSellerStock = false: opção Vitrine do estoque da loja habilitada, sem opacidade reduzida, tocável
    • hasSellerStock = true: opção desabilitada (opacidade reduzida, sem resposta ao tap), mensagem Você já possui uma Vitrine de Estoque ativa. Apenas uma vitrine desta modalidade é permitida por vez. exibida
    • Badge "Nova" sempre visível, habilitado ou desabilitado
    • Tap em Criar nova vitrine → navega para AppRoutes.showCaseSearchProducts
    • Tap em Vitrine do estoque da loja (habilitada) → chama MyShowCaseController.createSellerStock()
    • Fechar o bottom sheet sem selecionar (botão X ou dispensar) → nenhuma navegação ocorre, estado não é alterado
  • test/screens/show_case/show_case/my_show_case_controller_test.dart
    • createFastCatalog() → abre ShowCaseTypeSelectionBottomSheet com hasSellerStock atual do controller (em vez de navegar direto)

Critérios de aceite (RF-02)

  1. Tocar em CRIAR VITRINE exibe bottom sheet com título Escolha uma opção e botão de fechar.
  2. Opção Vitrine do estoque da loja com badge Nova e descrição Crie uma vitrine com todos os produtos do estoque da loja..
  3. Opção Criar nova vitrine com descrição Crie vitrines personalizadas escolhendo os produtos ideais para cada cliente..
  4. Selecionar Criar nova vitrine inicia o fluxo atual via ShowCaseSearchProducts (showCaseType = ShowCaseType.store / "Store" na API).
  5. Selecionar Vitrine do estoque da loja com hasSellerStock = false inicia o fluxo de criação (subtask 05).
  6. hasSellerStock = true: opção Vitrine do estoque da loja permanece visível, porém desabilitada para toque.
  7. hasSellerStock = true: mensagem de limite exibida abaixo do título da opção.
  8. Fechar o bottom sheet sem selecionar retorna à listagem sem alterar o estado.

Definição de Pronto (Definition of Done)

  • ShowCaseTypeSelectionBottomSheet criado e testado.
  • ZzTagTheme.newFeature adicionado sem quebrar nenhum uso existente de ZzTag.
  • createFastCatalog() atualizado.
  • flutter analyze sem erros novos.
  • flutter test executando os testes listados acima, 100% verdes.
  • Projeto compila.
  • Validação visual manual comparando com context/image-1.png/image-2.png.