Beagle v1.6 não é mais mantida ativamente. A versão documentada que você está visualizando pode conter funcionalidades depreciadas. Para obter as funcionalidades mais recentes, consulte a nossa última versão .
A sua aplicação pode mudar o comportamento default do Beagle, a partir da customização de propriedades da instância do Beagle.dependencies
.
Elas possuem um papel específico na capacidade do Beagle, esta é a razão pela qual você deve tratar o Beagle.dependencies
como principal foco de customização para que as outras partes de sua aplicação possa ver as modificações feitas nas dependências.
Você deve confiar nas implementações padrão, como nos exemplos abaixo:
class BeagleDependencies: BeagleDependenciesProtocol {
var urlBuilder: UrlBuilderProtocol
var networkClient: NetworkClient
var decoder: ComponentDecoding
var appBundle: Bundle
var theme: Theme
var validatorProvider: ValidatorProvider?
var deepLinkHandler: DeepLinkScreenManaging?
var localFormHandler: LocalFormHandler?
var repository: Repository
var analytics: Analytics?
var navigation: BeagleNavigation
var preFetchHelper: BeaglePrefetchHelping
var cacheManager: CacheManagerProtocol?
var formDataStoreHandler: FormDataStoreHandling
var windowManager: WindowManager
var opener: URLOpener
var globalContext: GlobalContext
var isLoggingEnabled: Bool
var logger: BeagleLoggerType
}
As dependências do Beagle deverão ser registradas no AppDelegate, veja o exemplo abaixo:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let dependencies = BeagleDependencies()
dependencies.theme = AppTheme.theme
dependencies.urlBuilder = UrlBuilder(baseUrl: URL(string: .baseURL))
dependencies.navigation.defaultAnimation = .init(
pushTransition: .init(
type: .fade,
subtype: .fromRight, duration: 0.1
),
modalPresentationStyle: .formSheet
)
dependencies.isLoggingEnabled = true
dependencies.decoder.register(
component: CustomComponent.self,
named: "CustomComponent"
)
dependencies.decoder.register(
action: CustomAction.self,
named: "CustomAction")
Beagle.dependencies = dependencies
let rootViewController = MainScreen().screenController()
window?.rootViewController = rootViewController
return true
}
}
Configura uma URL base para sua aplicação, é usada quando os fluxos de navegação via Beagle serão definidos, você pode usar uma URL relativa.
Veja abaixo um exemplo de como usar:
dependencies.urlBuilder = UrlBuilder(baseUrl: URL(string: "SUA URL BASE"))
É responsável por executar network requests. A sua aplicação deverá ser customizada nesta parte porque cada projeto possui uma demanda específica para network layer. Por isso, a implementação padrão pode não servir dependendo das necessidades do seu negócio.
Transforma um JSON em Componentes do Beagle (Seção Elementos). Ele já possui uma lógica para decodificar todos os componentes default. Se você precisar trabalhar com componentes customizáveis, você pode registrá-los nesta instância.
Veja abaixo um exemplo de como registrar um componente e uma action customizada:
Beagle.dependencies.decoder.register(
component: CustomWidget.self,
named: "CustomWidget"
)
Beagle.dependencies.decoder.register(
action: CustomAction.self,
named: "CustomAction"
)
Você pode fornecer um pacote para sua aplicação de modo que o Beagle possa acessar seus recursos, como por exemplo, imagens, fontes, cores, etc.
Armazena todos os seus styles e sabe como aplicá-los em seus componentes.
Alguns widgets possuem uma variável que permite você definir o estilo. O nome de cada uma deverá ser repassada à dependência do Theme, de modo que aquele estilo possa ser usado no seu respectivo componente.
Para configurar os estilos customizados, siga os seguintes passos:
Text
como um widget que possui o UITextView
como seu UIKit view. Depois disso, você irá aplicar suas mudanças de estilo para esse view nos quais terão também customizações de font
e textColor
.Passo 1: crie uma função que irá receber a representação o UIKit
com a representação do widget que você quer aplicar o estilo.
static func blackTextNormalStyle() -> (UITextView?) -> Void {
return {
$0?.font = .systemFont(ofSize: 16)
$0?.textColor = .black
}
}
Passo 2: crie uma instância concreta do AppTheme
com os nomes dos seus estilos e as funções correspondentes.
let theme = AppTheme(styles: [
"myStyleName": blackTextNormalStyle
])
Passo 3: atribua sua instância Theme às dependências do Beagle.
Beagle.dependencies.theme = theme
Passo 4: agora, você pode usar o Text com sua propriedade de style definida e assim configurar o nome que você definiu para o seu style customizado.
Text("Some text", style: "myStyleName")
Valida a customização que será realizada quando o widget Form for utilizado.
Este handler é usado para uma ação de deep link navigation. A variável possui um valor default, você pode adicionar novas telas ou substituir por outras na aplicação.
Abaixo, você encontra um comando de como adicionar uma tela com um possível roteamento para deep linking usando um valor default:
let deepLinkHandler = DeeplinkScreenManager.shared
deepLinkHandler["MyDeepLinkScreen"] = MyDeepLinkScreenClass.self
Beagle.dependenciesdeepLinkHandler = deepLinkHandler
Sua aplicação pode lidar com o envio de formulário por conta própria usando o FormLocalAction
.
O LocalFormHandler definido nas dependências do Beagle será usado para executar isso.
É responsável pelas três principais operações no:
fetchComponent
: Orquestra a requisição para buscar widgets no servidor.submitForm
: Submete forms no widget.fetchImage
: Busca imagens para o networkImage;É um protocolo que pode ser implementado para rastrear ações de aparecimento da tela ou sua finalização e eventos de clique.
Veja o exemplo abaixo:
class AnalyticsSample: Analytics {
func trackEventOnScreenAppeared(_ event: AnalyticsScreen) {
print("Screen \(event.screenName) appeared")
}
func trackEventOnScreenDisappeared(_ event: AnalyticsScreen) {
print("Screen \(event.screenName) disappeared")
}
func trackEventOnClick(_ event: AnalyticsClick) {
print("Button touch with:\ncategory = \(event.category)\nlabel = \(event.label ?? "empty")\nvalue = \(event.value ?? "empty")")
}
}
O navigation
lida com tipo de ações de navigate da sua aplicação. Existe uma implementação que é usada como valor default, mas que também pode ser substituída por uma classe que está de acordo com BeagleNavigation
Nesse mesmo atributo também é possível definir uma animação de navegação.
Este componente é usado como pré-busca do BeagleScreenViewControllers
e entrega uma experiência para o usuário mais fluida. Ela já possui um valor e pode ser alterado para se adequar em que você precisa.
A pré-busca é acionada quando há um navigation widget de modo que você possa fazer um pré carregamento dos dados das possíveis próximas telas, evitando delays na navegação. Este comportamento pode ser desativado.
É responsável por manter e gerenciar o cache do conteúdo server-driven da aplicação.
É uma forma de persistir os dados de um formulário.
É responsável por gerenciar uma janela.
É um protocolo que tem um método que abre URL caso necessite navegar para um link externo.
Variável para definir um contexto de escopo global.
É uma variável boolean para habilitar ou desabilitar os logs e já vem habilitada por padrão.
O logger é uma variável do tipo BeagleLoggerType que organiza os logs da aplicação. Esses logs seguem o protocolo LogType, o qual tem os parâmetros:
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.