Fluxo em Tempo de Execução
Fluxo principal de dados
UI (BaseListPage / BaseFormPage)
↓
ViewModel (BaseListViewModel / BaseDetailViewModel)
↓
AuthorizingRecordsRepository
↓
DataSetAdapterRecords
↓
InMemoryDataSet / RemoteDataSet
Ciclo de vida do IDataSet
Open()— carrega dados; disparaBeforeOpen→AfterOpenEdit()— estadoEdit; habilita edição de camposInsert()— estadoInsert; disparaOnNewRecordpara valores padrãoPost()— valida campos obrigatórios;BeforePost→ persiste deltas →AfterPostCancel()— descarta alterações; retorna paraBrowseDelete()— remove registro; atualiza posição do cursorClose()— libera recursos; estadoClosed
Navegação no WorkbenchShell
- Usuário clica no menu → shell recebe
routineId - Shell consulta
app_composition.dartpara resolverroutineId → Widget - Widget instanciado como nova aba no
TabBar - Aba permanece em memória enquanto aberta
Pontos de falha
- Campo obrigatório vazio:
Post()interrompido; campo marcado na UI - Permissão negada (UI): botão bloqueado visualmente antes da ação
- Permissão negada (ViewModel):
PermissionDeniedException+ registro emAppTelemetry - Permissão negada (Data):
AuthorizingRecordsRepositoryretornaFailureHTTP 403/422 - Erro de rede:
RemoteDataSetpropagaNetworkFailureException