Flutter集成CIDS CGI服务插件cids_cgi的使用

Flutter集成CIDS CGI服务插件cids_cgi的使用

CGI设计系统简介

CGI设计系统用于Flutter。

关于项目

“该项目旨在为开发人员带来便利,特别是在需要频繁重复开发的场景中,例如CRUD表格、自定义日期字段等。”

安装

  1. 在你的应用的pubspec.yaml文件中添加以下依赖:
    cids_cgi: 3.0.0
    
  2. 将Google Firebase文件添加到Android和iOS项目中。
  3. 运行以下命令获取依赖:
    flutter pub get
    

组件

SettingsPage

应用程序设置页面

SettingsPage(
  motorista: false,
  placa: false,
  filled: false,
  cpf: false,
  appBarColor: Colors.transparent,
  appBarTextColor: Colors.white,
);

Props

属性 必填? 类型 默认值
motorista Boolean false
placa Boolean false
filled Boolean false
cpf Boolean false
appBarColor Color Colors.transparent
appBarTextColor Color Colors.transparent

AuthPage

登录页面

图片

下载并添加以下图片到你的项目中的<projeto>/images/目录:

  • consultors.png

  • consultors_dark.png

权限

Android

AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>

iOS

Info.plist文件中添加以下键值对:

<key>NSFaceIDUsageDescription</key>
<string>为什么需要使用面部识别?</string>

主文件main.dart

在主文件中添加以下代码:

// 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);
}

// 在main.dart的build方法中添加home和路由生成
@override
Widget build(BuildContext context) {
  return MaterialApp(
    home: defaultPage,
    onGenerateRoute: r.Router.generateRoute
  );
}

创建page.dart

创建一个名为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 {
    // 操作保存的数据
  },
  frase: '公司所有指标',
  imagePath: "images/index.jpg",
);

创建constants.dart

创建一个名为constants.dart的文件,并添加以下代码:

// constants.dart
const String homeRoute = '/home';
const String authRoute = '/auth';
const String indexRoute = '/index';

创建routes.dart

创建一个名为routes.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));
}

主页配置

在应用的主页中添加一些额外的配置以获取上下文:

// home.dart 应用程序的主页
class HomePage extends StatefulWidget { // 将主页设为有状态的widget
  @override
  _HomePageState createState() => _HomePageState();

  // 创建一个函数,在加载屏幕时传递上下文
  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();

    // 记得传递上下文来创建屏幕,否则生物识别功能将无法正常工作
    widget.context(context);
  }
}

修改MainActivity.kt文件

最后,在项目的android文件夹下的MainActivity.kt文件中进行必要的修改:

// MainActivity.kt
import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity: FlutterFragmentActivity() {
}

使用二维码扫描

权限

Android

AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.CAMERA" />

iOS

Info.plist文件中添加以下键值对:

<key>NSCameraUsageDescription</key>
<string>您的描述</string>

<key>io.flutter.embedded_views_preview</key>
<string>YES</string>

扫描二维码

String response = await QRScan().startScan(context, QRScanType.bar);
print(response);

Handler

SharedPreferences

final handler = SharedPreferencesHandler();

// 获取、保存和移除任何信息
handler.set("chave", "valor");
handler.get("chave");
handler.remove("chave");
handler.clear(); // 清除所有保存的键

handler.setNomeAplicativo("应用名称");        // 设置应用名称以便在网关中显示
handler.setPasswordFirebase("密码");         // 设置Firebase默认密码
handler.setVersaoProgramaPacific(1);          // 设置程序版本
handler.setGateway(false);                    // 设置是否使用网关

handler.permiteAlterarQuantidadeEscaneada();  // 查询是否允许更改库存数量
handler.getVersaoProgramaPacific();           // 查询程序版本
handler.getNumDevicesVendedor();              // 查询设备数量
handler.getPasswordFirebase();                // 查询Firebase登录默认密码
handler.getNomeAplicativo();                  // 查询已配置的应用名称
handler.getVersaoMinima();                    // 查询Firebase最小版本
handler.getBuildVersion();                    // 查询应用构建版本
handler.getNumDevices();                      // 查询已分配的设备数量
handler.getMotorista();                       // 查询配置中的司机
handler.getGateway();                         // 查询是否使用网关
handler.getUsuario();                         // 查询用户
handler.getCodigo();                          // 查询企业代码
handler.getLogin();                           // 查询登录是否通过CNPJ
handler.getSenha();                           // 查询密码
handler.getPlaca();                           // 查询配置中的车牌号
handler.getToken();                           // 查询网关会话令牌
handler.getURL();                             // 查询Pacific URL

handler.logout();                             // 清除登录数据
handler.isAuth();                             // 检查是否已登录

DialogHandler

final handler = DialogHandler();

// 显示带有消息的警告对话框
handler.show(message: "消息要显示给用户", context: context);

// 显示确认对话框
handler.confirm(message: "消息要显示给用户", context: context, textBtn1: "按钮1", textBtn2: "按钮2");

CidsHandler

final handler = CidsHandler()

// 加载在Firebase项目中创建的json配置
// 需要在main.dart文件的main方法中使用
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();
}

更多关于Flutter集成CIDS CGI服务插件cids_cgi的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成CIDS CGI服务插件cids_cgi的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用cids_cgi插件的示例代码案例。这个插件假设是用于与CIDS CGI服务进行交互的。请注意,由于cids_cgi并非一个广为人知的官方Flutter插件,以下代码将基于假设的插件API进行编写。如果实际插件的API有所不同,请参照插件的官方文档进行调整。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加cids_cgi插件的依赖。如果这是一个假设的插件,你可能需要替换为实际的插件名称和版本。

dependencies:
  flutter:
    sdk: flutter
  cids_cgi: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来安装依赖。

步骤 2: 导入插件

在你的Dart文件中导入cids_cgi插件。

import 'package:cids_cgi/cids_cgi.dart';

步骤 3: 初始化并使用插件

以下是一个使用cids_cgi插件进行CGI服务调用的示例代码。假设插件提供了一个CidsCgiClient类用于与服务进行交互。

import 'package:flutter/material.dart';
import 'package:cids_cgi/cids_cgi.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('CIDS CGI Service Example'),
        ),
        body: Center(
          child: CidsCgiExample(),
        ),
      ),
    );
  }
}

class CidsCgiExample extends StatefulWidget {
  @override
  _CidsCgiExampleState createState() => _CidsCgiExampleState();
}

class _CidsCgiExampleState extends State<CidsCgiExample> {
  String _response = '';

  @override
  void initState() {
    super.initState();
    _callCidsCgiService();
  }

  Future<void> _callCidsCgiService() async {
    // 假设CidsCgiClient是插件提供的用于与服务交互的类
    final CidsCgiClient client = CidsCgiClient();

    try {
      // 假设这是一个CGI服务的调用方法,参数和返回值需根据实际情况调整
      final Map<String, dynamic> result = await client.callService(
        methodName: 'exampleMethod',
        parameters: {
          'param1': 'value1',
          'param2': 'value2',
        },
      );

      // 更新UI以显示响应
      setState(() {
        _response = 'Response: ${result['responseData']}';
      });
    } catch (e) {
      // 处理错误
      setState(() {
        _response = 'Error: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Text(_response);
  }
}

说明

  1. 依赖管理:通过pubspec.yaml文件添加cids_cgi依赖。
  2. 导入插件:在Dart文件中导入cids_cgi包。
  3. 使用插件:创建一个CidsCgiClient实例,并调用其callService方法(这里假设的方法名和参数需根据实际情况调整)。
  4. UI更新:通过setState方法更新UI以显示CGI服务的响应或错误信息。

请注意,上述代码是基于假设的API编写的。如果cids_cgi插件的实际API与此不同,请参照插件的官方文档进行相应的调整。如果插件提供了更多的配置选项或方法,也请根据实际情况进行扩展和使用。

回到顶部