xdk_mobile 0.0.4
xdk_mobile: ^0.0.4 copied to clipboard
XDK.Mobile para projetos Flutter. Realize integrações com qualquer API com muita facilidade, especialmente se estiver usando a XDK também no servidor.
example/example.md
Exemplo padrão com autenticação #
Página de login da XDK #
class XApp extends StatelessWidget {
XApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
// Inicializa a XDK.
XDKSetup.init(IxMobileConfig(
// Nome da aplicação.
applicationName: 'XDK Mobile Test',
// ID da aplicação, pode ser um nome simples, mas no padrão slug.
applicationId: 'xdk-mobile-test',
// BuildContext da aplicação atual.
context: context,
// Endereço base do servidor (API).
baseUrl: 'https://itixti.com.br',
// Configuração da segurança.
securityConfig: IxMobileSecurityConfig(
shouldUseAuthorizer: true, // Indica que deve usar o autorizador.
useIxOAuth: true // Indica que deve usar a autenticação OAuth da ITIX.
)
));
// Configura as stores da aplicação.
XDKSetup.addStores([ProductsStore(), CompaniesStore()]);
// Se estiver usando autenticação, aqui obtemos o serviço de autenticação.
var authService = getService<AuthService>();
// Dispara quando o usuário tiver logado.
authService.onUserLoggedIn.stream.listen((userInfo) {
Navigator.pop(context); // Removendo loading.
// Envia para a tela principal do sistema.
Navigator.pushReplacement(context, MaterialPageRoute<void>(builder: (BuildContext context) {
// Sempre que o contexto é alterado, precisamos avisar para a XDK.
updateXDKConfigContext(context);
return MyHomePage(title: 'XDK Mobile Test', userInfo: userInfo);
}));
});
return const LoginPage(); // Usa a tela de login fornecida pela XDK.
}
}
Página de login personalizada local e sem usar OAuth ITIX #
class XApp extends StatelessWidget {
XApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
// Inicializa a XDK.
XDKSetup.init(IxMobileConfig(
// Nome da aplicação.
applicationName: 'XDK Mobile Test',
// ID da aplicação, pode ser um nome simples, mas no padrão slug.
applicationId: 'xdk-mobile-test',
// BuildContext da aplicação atual.
context: context,
// Endereço base do servidor (API).
baseUrl: 'https://itixti.com.br'
));
// Configura as stores da aplicação.
XDKSetup.addStores([ProductsStore(), CompaniesStore()]);
// Se estiver usando autenticação, aqui obtemos o serviço de autenticação.
var authService = getService<AuthService>();
// Dispara quando o usuário tiver logado.
authService.onUserLoggedIn.stream.listen((userInfo) {
Navigator.pop(context); // Removendo loading.
// Envia para a tela principal do sistema.
Navigator.pushReplacement(context, MaterialPageRoute<void>(builder: (BuildContext context) {
// Sempre que o contexto é alterado, precisamos avisar para a XDK.
updateXDKConfigContext(context);
return MyHomePage(title: 'XDK Mobile Test', userInfo: userInfo);
}));
});
return const SuaLoginPage();
}
}
Criando modelos de envio/resposta do servidor (API) #
Os modelos de envio/resposta devem conter a assinatura @jsonSerializable e herdar de BaseModel (se não tiver ID) ou
de BaseEntityModel (se tiver ID).
import 'package:dart_json_mapper/dart_json_mapper.dart';
import 'package:xdk_mobile/core.dart' show BaseModel;
@jsonSerializable
class ProductModel extends BaseModel {
String name;
String description;
TestModel({required this.name, required this.description});
}
NOTA: Após alterar qualquer classe com esse annotation (remover/adicionar annotation), deve-se rodar o comando:
flutter pub run build_runner build
Criando stores para comunicação com o servidor (API) #
Para se comunicar com uma API (servidor), podemos usar Stores, eles facilitam o gerenciamento das requisições.
import 'package:xdk_mobile/rest.dart' show BaseStore, StoreConfig;
import '../models/product_model.dart';
class ProductStore extends BaseStore<ProductModel> {
ProductStore() : super(StoreConfig<ProductModel>(baseUrl: 'products'));
Future<ProductModel?> obter() async {
return requestService.makeGet<ProductModel>(getRequestModel(''));
}
}