O método BeagleSdk.init
é a porta de entrada do Beagle Flutter e o recebedor de todas as configurações que lida. Por padrão já é fornecido implementações básicas para alguns de seus parâmetros, não sendo necessário configurar todos eles.
Essas são todas as opções de configuração que o Beagle Flutter suporta:
Confira abaixo como configurar cada um:
Esse atributo informa ao Beagle sobre o atual estado de build da aplicação. Esta propriedade é usada no BeagleUndefinedWidget
.
Undefined Component
quando o environment
é BeagleEnvironment.debug
.SizedBox.shrink
quando BeagleEnvironment.production
.O padrão é BeagleEnvironment.debug
.
enum BeagleEnvironment {
debug,
production,
}
Informa a URL base usada no Beagle na aplicação.
As requisições feitas pelo BeagleWidget
e ações de navegação usam a propriedade baseUrl
para montar seus paths. O padrão é uma string vazia. No exemplo abaixo, a request resultante vai ser https://usebeagle.io/start/welcome
:
BeagleSdk.init(
baseUrl: 'https://usebeagle.io/start',
);
BeagleWidget(
screenRequest: BeagleScreenRequest('welcome'),
);
Uma interface que provê um cliente para o Beagle fazer as requisições.
O padrão é o DefaultHttpClient
. Este é um componente chave para o Beagle, porque ele é usado em todas as requisições. Veja abaixo o contrato HttpClient
:
abstract class HttpClient {
Future<Response> sendRequest(BeagleRequest req);
}
Provê uma estrutura onde a chave é a propriedade _beagleComponent_
no JSON e o valor é o widget que o Beagle deve renderizar.
Se você quiser usar uma lista de widgets comuns com implementação básica:
beagle_components
no seu projeto.O padrão é um mapa vazio. Aqui está um exemplo da declaração de componente:
Map<String, ComponentBuilder> myComponent = {
'custom:loading': (element, _, __) {
return Center(
key: element.getKey(),
child: const Text('My Component'),
);
}
};
Cuida do armazenamento de cache para as requisições feitas pelo Beagle. O padrão é o DefaultStorage
.
Para evitar problemas de vulnerabilidade, a implementação padrão armazena a informação somente em memória, veja abaixo:
class DefaultStorage implements Storage {
Map<String, String> storage = {};
@override
Future<void> clear() async {
storage.clear();
}
@override
Future<String> getItem(String key) async {
return storage[key];
}
@override
Future<void> removeItem(String key) async {
storage.remove(key);
}
@override
Future<void> setItem(String key, String value) async {
storage[key] = value;
}
}
Controla se deve ou não enviar cabeçalhos específicos do Beagle em solicitações para buscar um widget. O padrão é true
.
Este é o mapa de ações customizadas. A chave deve ser o identificador _beagleAction_
no JSON e o valor deve ser o action handler. O padrão é o mapa defaultActions
. Veja abaixo uma declaração desta propriedade:
Map<String, ActionHandler> myAction = {
'custom:log': ({action, _, __, ___}) {
debugPrint(action.getAttributeValue('message'));
}
};
Essa propriedade diz ao Beagle como cuidar do cache das requisições. Existem sete eestratégias de cache que o Beagle implementa. O padrão é BeagleNetworkStrategy.beagleWithFallbackToCache
. Confira abaixo todas elas:
enum BeagleNetworkStrategy {
beagleCacheOnly,
beagleWithFallbackToCache,
networkWithFallbackToCache,
cacheWithFallbackToNetwork,
cacheOnly,
networkOnly,
cacheFirst,
}
Estas são as opções para feedback visual quando navegando de um widget para outro.
Para atribuir as opções padrões:
isDefault: true
no controlador de navegação.O padrão é um mapa vazio. Confira abaixo uma declaração de um NavigationController
customizado:
Map<String, NavigationController> myController = {
'general': NavigationController(
isDefault: true,
loadingComponent: 'custom:loading',
),
};
Uma interface que provê um design do sistema para os componentes do Beagle. Ele habilita imagens e estilos de botões e textos no Beagle. O padrão é o DefaultEmptyDesignSystem
, que não retorna nenhum valor. Veja abaixo o contrato BeagleDesignSystem
:
abstract class BeagleDesignSystem {
String image(String id);
BeagleButtonStyle buttonStyle(String id);
TextStyle textStyle(String id);
}
Uma interface que provê imagens da internet. Ele deve implementar o methodo downloadImage
que recebe a URL da imagem e retorna um Future<Uint8List>
como imagem. O padrão é o DefaultBeagleImageDownloader
.
class DefaultBeagleImageDownloader implements BeagleImageDownloader {
DefaultBeagleImageDownloader({
@required this.httpClient,
}) : assert(httpClient != null);
final HttpClient httpClient;
@override
Future<Uint8List> downloadImage(String url) async {
final request = BeagleRequest(url);
final response = await httpClient.sendRequest(request);
if (response.status != HttpStatus.ok) {
throw BeagleImageDownloaderException(
statusCode: response.status, url: request.url);
}
final bytes = response.bodyBytes;
if (bytes.lengthInBytes == 0) {
throw Exception('Image is an empty file: $url');
}
return bytes;
}
}
Interface que provê o logger para o Beagle utilizar na aplicação. O padrão é o DefaultEmptyLogger
que não loga nenhuma informação. Veja o contrato BeagleLogger
:
abstract class BeagleLogger {
void warning(String message);
void error(String message);
void errorWithException(String message, Exception exception);
void info(String message);
}
Um mapa de operações customizadas que podem ser usadas para extender a capacidade das expressões do Beagle e são chamadas como funções, por exemplo @{sum(1, 2)}
. O padrão é um mapa vazio.
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.