No exemplo prático da página “Criando um projeto com Beagle para iOS”, você pode conferir como fazer a implementação do Beagle e criar sua primeira tela server-driven.
Neste tutorial, a ideia é avançar a partir do projeto anterior para criar um Design System na sua biblioteca do Beagle. Os exemplos que ilustrarão o passo a passo estão nestes sample codes que você encontra no nosso repositório.
A ideia aqui é configurar alguns estilos no iOS para que você possa customizar componentes como:
Além disso, vamos aplicar estilos de texto nos 2 componentes textuais.
Para tal, criaremos uma espécie de Design System, ou seja, um arquivo para reunir um conjunto desses estilos guardando os registros dos componentes de estilo criados no frontend.
É dessa forma que sua aplicação iOS “saberá” qual componente de estilo deverá renderizar ao receber uma tela server-driven. Vale lembrar que, no caso da tela server-driven, estarão relacionados os elementos visuais (views) utilizados na construção da sua tela.
Crie um arquivo Swift. No nosso exemplo, vamos chamar de Styles
. Nele, você deve importar o UIKit
e o BeagleUI
e criar uma Struct
com nome Styles
assim como fizemos no exemplo abaixo:
import UIKit
import Beagle
struct Styles {
}
Essa struct
irá conter todos os estilos que serão acessados pelo Beagle. Aqui, estará listada a lógica que permite ao Beagle aplicar os estilos definidos no iOS a uma tela server-driven.
Uma vez que você gerou seu arquivo, você deve agora criar função estática para definir e retornar um estilo de texto. Como, no caso deste exemplo, teremos um estilo para título e outro para parágrafo, criaremos duas funções.
O retorno desta função irá utilizar a classe BeagleStyle,
que é uma classe interna do Beagle que fica acessível quando você importa a classe beagleUI
.
É neste retorno que estará definido o estilo criado para o componente text
. Siga o passo abaixo para criar cada função:
O estilo do título irá retornar a fonte Courier com tamanho 20 e com a cor laranja. Implemente-o como no exemplo abaixo.
static func titleTextStyle() -> (UITextView?) -> Void {
return BeagleStyle.text(
font: UIFont.init(name: "Courier", size: 20) ?? UIFont.systemFont(ofSize: 20),
color: .orange
)
}
Realize o mesmo processo para criar o estilo do nosso parágrafo. Exemplo abaixo:
static func descriptionTextStyle() -> (UITextView?) -> Void {
return BeagleStyle.text(
font: UIFont.init(name: "Courier", size: 15) ?? UIFont.systemFont(ofSize: 15),
color: .orange
)
}
Depois de implementar estes dois estilos, o seu arquivo Styles
deverá estar assim:
import UIKit
import Beagle
struct Styles {
static func titleTextStyle() -> (UITextView?) -> Void {
return BeagleStyle.text(
font: UIFont.init(name: "Courier", size: 20) ?? UIFont.systemFont(ofSize: 20),
color: .orange
)
}
static func descriptionTextStyle() -> (UITextView?) -> Void {
return BeagleStyle.text(
font: UIFont.init(name: "Courier", size: 15) ?? UIFont.systemFont(ofSize: 15),
color: .orange
)
}
}
Agora é necessário registrar os estilo no Beagle, é importante para que ele seja capaz de aplicar esses estilos nas telas server-driven.
BeagleConfig
. Registre uma constante com o nome theme
theme
que será listado todos os estilos.AppTheme
que é onde os estilos são registrados.static func config
static func config
let theme = AppTheme(styles: [])
"Title.Text.Orange": Styles.titleTextStyle
"Title.Text.Organge"
é o nome do estilo definido para o componente text
na tela server-driven.Styles.titleTextStyle
é a função criada logo no início desse tutorial. Ela retorna o estilo que está definido nela para que o Beagle Config
saiba renderizar o estilo correto em cada componente visual, nesse caso o text que será o título.A constante theme com os dois estilos registrados deve estar assim:
let theme = AppTheme(styles: [
"Title.Text.Orange": Styles.titleTextStyle,
"Description.Text.Orange": Styles.descriptionTextStyle
])
Ainda no BeagleConfig devemos referenciar o theme que criamos no BeagleDependencies
.
Siga o exemplo abaixo e finalize a configuração do BeagleConfig como mostrado abaixo:
import Beagle
import Foundation
class BeagleConfig {
static func config() {
let theme = AppTheme(styles: [
"Title.Text.Orange": Styles.titleTextStyle,
"Description.Text.Orange": Styles.descriptionTextStyle
])
let dependencies = BeagleDependencies()
dependencies.theme = theme
dependencies.urlBuilder = UrlBuilder(
baseUrl: URL(string: "http://localhost:8080")
)
Beagle.dependencies = dependencies
}
}
Assim, o front-end está configurado e os estilos definidos.
No tutorial de configuração do backend, uma pagina server driven foi criada com 2 textos, um título e um parágrafo.
A página era assim quando renderizada no frontend:
Para atribuir um estilo a esses textos siga as instruções:
FirstScreenBeagleBuilder
.class FirstScreenBuilder : ScreenBuilder {
override fun build() = Screen(
child = Container(
children = listOf(
Text(
text = "Hello Beagle!",
styleId = "Title.Text.Orange"
).setStyle {
margin = EdgeValue.only(top = 16)
}.setFlex {
alignSelf = AlignSelf.CENTER
},
Text(
text = "Beagle is a cross-platform framework which provides usage of the " +
"Server-Driven UI concept, natively in iOS, Android and Web applications. " +
"By using Beagle, your team could easily change application's layout and" +
" data by just changing backend code.",
styleId = "Description.Text.Orange"
).setStyle {
margin = EdgeValue.only(top = 20, left = 16, right = 16)
}
)
)
)
}
Para adicionar um estilo a um elemento de texto, você deve listar o nome do estilo dentro do componente texto, conforme mostrado baixo. Não se esqueça de separar os componentes por uma vírgula. Segure o botão Ctrl e coloque o mouse sobre o componente Text
e você verá a lista de atributos que esse componente pode receber aqui no backend. Por hora, utilizaremos apenas o Style
1. Coloque uma virgula após o atributo text = "Hello Beagle", e escreva o outro atributo que quer definir, que é o `styleId`
2. Digite a string `“Title.Text.Orange”` e pronto! O estilo está definido para esse componente de texto.
Text(
text = "Hello Beagle!",
styleId = "Title.Text.Orange"
).setStyle {
margin = EdgeValue.only(top = 16)
}.setFlex {
alignSelf = AlignSelf.CENTER
}
E pronto, isso é tudo que faremos no backend nesse momento.
Text
que é um parágrafo, mas nomeie-o como “Description.Text.Orange”
Você pode rodar sua aplicação backend para que o serviço fique disponível.
Depois de executar o backend, agora execute o Xcode.
E o resultado será esse:
Agora que está pronto, teste um pouco, mude os tamanhos, mude as cores, e teste os estilos que quiser!
Neste exemplo foi utilizado elementos de estilo simples para explicar o Design system, mas o número de funções nessa classe mostra como ela pode ser ampla. Você pode desenvolver toolBars diferentes, botões e todo o tipo de componentes, inclusive componentes customizados (que abordaremos em outro codeLab) e utilizá-los no Beagle.
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.