CGI Design System for Flutter
CGI Design System for flutter.
Sobre o projeto
"O projeto veio para trazer um conforto a todos os desenvolvedores com casos onde o desenvolvimento se repete constantemente, como em casos de tabelas de CRUD, campos customizados de data, entre outros...".
Instalação
- Adicione o
cids_cgi: 3.0.0
nopubspec.yaml
do seu aplicativo. - Adicione os arquivos do google firebase no Android e iOS.
- Rode
flutter pub get
Components
SettingsPage
Tela de configurações dos aplicativos
SettingsPage(
motorista: false,
placa: false,
filled: false,
cpf: false,
appBarColor: Colors.transparent,
appBarTextColor: Colors.white,
);
- Props
Propriedade | Required? | Type | Default value |
---|---|---|---|
motorista | false | Boolean | false |
placa | false | Boolean | false |
filled | false | Boolean | false |
cpf | false | Boolean | false |
appBarColor | false | Color | Colors.transparent |
appBarTextColor | false | Color | Colors.transparent |
AuthPage
Tela de login dos aplicativos
Baixe e adicione essas imagens no folder <projeto>/images/
consultors.png:
consultors_dark.png:
Permissões
Android
<!-- Arquivo AndroidManifest.xml -->
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
iOS
<key>NSFaceIDUsageDescription</key>
<string>Por que vai usar a autenticação?</string>
No arquivo main.dart adicione:
//main.dart
var defaultPage;
BuildContext biometricsContext;
final biometricsHandler = BiometricsHandler(
autenticacaoPage: () {
Navigator.of(biometricsContext).pushNamed('/auth');
},
homePage: () {
Navigator.of(biometricsContext)
.pushNamedAndRemoveUntil('/home', (Route<dynamic> route) => false);
}
);
void main() async {
biometricsHandler.listen();
biometricsHandler();
await cidsHandler.initialize(
gateway: bool,
loginPorCpfCnpj: bool,
campoMotorista: bool,
aplicativo: "nome_app",
versaoPacific: 1);
}
//No build do main.dart, adicionar o home e a geração de rotas.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: defaultPage,
onGenerateRoute: r.Router.generateRoute
);
}
Crie um arquivo na raiz da pasta lib com o nome page.dart
//page.dart
final biometricsPage = BiometricsErrorPage(
biometricsHandler: biometricsHandler,
context: (context) {
biometricsContext = context;
}
);
final homePage = HomePage(
context: (context) {
biometricsContext = context;
}
);
final authPage = AuthPage(
dropDb: () async {
//manipula os dados salvos
},
frase: 'Todos os indicadores da sua empresa',
imagePath: "images/index.jpg",
);
Crie um arquivo na raiz da pasta lib com o nome constants.dart
Arquivo para adicionar as strings das rotas do aplicativo
//constants.dart
const String homeRoute = '/home';
const String authRoute = '/auth';
const String indexRoute = '/index';
Crie um arquivo na raiz da pasta lib com o nome routes.dart importando as telas do arquivo page.dart
//routes.dart
class Router {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case authRoute:
return SlideRightRoute(widget: biometricsPage);
case homeRoute:
return SlideRightRoute(widget: homePage);
case indexRoute:
return SlideRightRoute(widget: authPage);
default:
return SlideRightRoute(widget: authPage);
}
}
}
class SlideRightRoute extends PageRouteBuilder {
final Widget widget;
SlideRightRoute({required this.widget})
: super(
pageBuilder: (BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) {
return widget;
},
transitionsBuilder: (BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child) =>
FadeTransition(opacity: animation, child: child),
transitionDuration: Duration(milliseconds: 500));
}
No arquivo da tela principal do aplicativo, geralmente a tela Home, adicione algumas configurações extras para buscar o contexto
//home.dart sua pagina de home do aplicativo
class HomePage extends StatefulWidget { //TORNE A HOME UM STATEFULL WIDGET!!!!
@override
_HomePageState createState() => _HomePageState();
//CRIE UMA FUNCTION QUE SERA CHAMADA AO CARREGAR A TELA PASSANDO O CONTEXT!!!!
final Function(BuildContext) context;
const HomePage({Key key, @required this.context}) : super(key: key);
}
class _HomePageState extends State<HomePage> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
//LEMBRE-SE DE PASSAR O CONTEXT AO CRIAR A TELA, SEM ISSO A BIOMETRIA NUNCA IRÁ FUNCIONAR CORRETAMENTE!!!!
widget.context(context);
}
}
Por ultimo e o mais importante, altere o arquivo MainActivity.kt na pasta android do projeto. Necessário para funcionamento no android
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
QRScan
Permissões
Android
<!-- Arquivo AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
iOS
<key>NSCameraUsageDescription</key>
<string>Your Description</string>
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
//QRScanType.bar BARCODE
//QRScanType.code QRCODE
String response = await QRScan().startScan(context, QRScanType.bar);
print(response);
Handler
SharedPreferences
final handler = SharedPreferencesHandler();
// busca, salva e remove qualquer informação
handler.set("chave", "valor");
handler.get("chave");
handler.remove("chave");
handler.clear(); // limpa toda e qualquer chave salva
handler.setNomeAplicativo("nome app"); // seta o nome do app para aparecer no gateway
handler.setPasswordFirebase("senha"); // seta a senha default do FIREBASE
handler.setVersaoProgramaPacific(1); // seta a versão do programa .r
handler.setGateway(false); // seta se utiliza ou não o gateway
handler.permiteAlterarQuantidadeEscaneada(); // busca se permite alterar a quantidade do mais estoque
handler.getVersaoProgramaPacific(); // busca a versão do programa .r
handler.getNumDevicesVendedor(); // busca o numero de devices
handler.getPasswordFirebase(); // busca a senha default do login no FIREBASE
handler.getNomeAplicativo(); // busca o nome do app configurado
handler.getVersaoMinima(); // busca a versão minima do firebase
handler.getBuildVersion(); // busca a versão de build do app
handler.getNumDevices(); // busca o numero de dispositivos liberados
handler.getMotorista(); // busca o motorista nas configs
handler.getGateway(); // busca se utiliza o gateway
handler.getUsuario(); // busca o usuario
handler.getCodigo(); // busca o codigo da empresa
handler.getLogin(); // busca se o login é por CNPJ
handler.getSenha(); // busca a senha
handler.getPlaca(); // busca a placa configurada
handler.getToken(); // busca o token de sessão do gateway
handler.getURL(); // busca a url do pacific
handler.logout(); // limpa os dados de login
handler.isAuth(); // verifica se está logado;
DialogHandler
final handler = DialogHandler();
// mostra um alert na tela com avisos
handler.show(message: "mensagem para mostrar pro usuário", context: context);
// mostra mensagem para confirmação
handler.confirm(message: "mensagem para mostrar pro usuário", context: context, textBtn1: "btn1", textBtn2: "btn2");
CidsHandler
final handler = CidsHandler()
// faz load das configurações do json criado no projeto do firebase
// necessario usar no metodo main do arquivo main.dart
handler.initialize(
gateway: true,
aplicativo: "",
senha: "",
versaoPacific: 2
)
ErrorHandler
try {
Dio dio = new Dio();
Response response = await dio.get("url");
return response?.data ?? [];
} on DioError catch (error) {
final handler = ErrorHandler(error.response.data)
Retorno r = await handler.validaErro();
throw r.mensagem;
} catch (e) {
throw e.toString();
}