Flutter车辆识别码解析插件rebi_vin_decoder的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter车辆识别码解析插件rebi_vin_decoder的使用

rebi_vin_decoder 是一个用于解析和验证车辆识别码(VIN)的 Flutter 插件。它基于 ISO 3779:2009 和 ISO 3780:2009 标准,提供了对车辆识别码(VIN)的基本解码和验证功能,并且支持生成合成的 VIN。

该插件可以独立使用(离线模式),也可以通过查询 NHTSA Vehicle API 获取更多详细信息(如制造商、型号和车辆类型)。注意,合成的 VIN 在 NHTSA Vehicle API 中无法查找,仅适用于实验目的。

使用

以下是一个简单的使用示例:

import 'package:flutter/material.dart';
import 'package:rebi_vin_decoder/rebi_vin_decoder.dart'; // 导入 rebi_vin_decoder 插件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('VIN Decoder Example'),
        ),
        body: Center(
          child: FutureBuilder(
            future: decodeVin('WP0ZZZ99ZTS392124'), // VIN 编号
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  final vinData = snapshot.data;
                  return Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text('WMI: ${vinData?.wmi ?? 'N/A'}'),
                      Text('VDS: ${vinData?.vds ?? 'N/A'}'),
                      Text('VIS: ${vinData?.vis ?? 'N/A'}'),
                      Text('Model Year: ${vinData?.modelYear ?? 'N/A'}'),
                      Text('Serial Number: ${vinData?.serialNumber ?? 'N/A'}'),
                      Text('Assembly Plant: ${vinData?.assemblyPlant ?? 'N/A'}'),
                      Text('Manufacturer: ${vinData?.getManufacturer ?? 'N/A'}'),
                      Text('Year: ${vinData?.getYear ?? 'N/A'}'),
                      Text('Region: ${vinData?.getRegion ?? 'N/A'}'),
                      Text('VIN String: ${vinData?.toString ?? 'N/A'}'),
                    ],
                  );
                }
              } else {
                return CircularProgressIndicator(); // 加载指示器
              }
            },
          ),
        ),
      ),
    );
  }

  Future<VIN> decodeVin(String vinNumber) async {
    var vin = VIN(number: vinNumber, extended: true);
    
    // 同步打印基本信息
    print('WMI: ${vin.wmi}');
    print('VDS: ${vin.vds}');
    print('VIS: ${vin.vis}');
    
    print("Model year is " + vin.modelYear());
    print("Serial number is " + vin.serialNumber());
    print("Assembly plant is " + vin.assemblyPlant());
    print("Manufacturer is " + vin.getManufacturer());
    print("Year is " + vin.getYear().toString());
    print("Region is " + vin.getRegion());
    print("VIN string is " + vin.toString());

    // 异步获取制造商、型号和车辆类型
    var make = await vin.getMakeAsync();
    print("Make is ${make}");
    
    var model = await vin.getModelAsync();
    print("Model is ${model}");
    
    var type = await vin.getVehicleTypeAsync();
    print("Type is ${type}");

    return vin;
  }
}

运行上述代码将输出类似以下结果:

WMI: WP0
VDS: ZZZ99Z
VIS: TS392124
Model year is T
Serial number is 92124
Assembly plant is S
Manufacturer is Porsche
Year is 1996
Region is EU
VIN string is WP0ZZZ99ZTS392124
Make is Porsche
Model is 911
Type is Passenger Car

更多关于Flutter车辆识别码解析插件rebi_vin_decoder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter车辆识别码解析插件rebi_vin_decoder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用rebi_vin_decoder插件来解析车辆识别码(VIN)的示例代码。这个插件可以帮助你解码VIN并获取车辆的详细信息。

第一步:添加依赖

首先,你需要在pubspec.yaml文件中添加rebi_vin_decoder插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  rebi_vin_decoder: ^最新版本号  # 请替换为实际的最新版本号

第二步:安装依赖

保存pubspec.yaml文件后,运行以下命令来安装依赖:

flutter pub get

第三步:使用插件

接下来,你可以在你的Flutter项目中导入并使用rebi_vin_decoder插件。下面是一个完整的示例,展示了如何解析VIN并显示解码后的信息。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'VIN Decoder Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: VinDecoderScreen(),
    );
  }
}

class VinDecoderScreen extends StatefulWidget {
  @override
  _VinDecoderScreenState createState() => _VinDecoderScreenState();
}

class _VinDecoderScreenState extends State<VinDecoderScreen> {
  final TextEditingController _controller = TextEditingController();
  String? _decodedResult;

  void _decodeVin() async {
    String vin = _controller.text.trim();
    if (vin.isNotEmpty && vin.length == 17) {
      try {
        VinDecoderResult result = await RebiVinDecoder.decodeVin(vin);
        setState(() {
          _decodedResult = result.toJson().toString();
        });
      } catch (e) {
        setState(() {
          _decodedResult = "Error: ${e.message}";
        });
      }
    } else {
      setState(() {
        _decodedResult = "Please enter a valid 17-character VIN.";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('VIN Decoder'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter VIN',
              ),
              keyboardType: TextInputType.text,
              maxLength: 17,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _decodeVin,
              child: Text('Decode VIN'),
            ),
            SizedBox(height: 16),
            if (_decodedResult != null)
              Text(
                _decodedResult!,
                style: TextStyle(fontSize: 16),
              ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml文件中添加rebi_vin_decoder依赖。
  2. UI构建:创建一个简单的UI,包括一个文本输入框用于输入VIN,一个按钮用于触发解码操作,以及一个文本区域用于显示解码结果。
  3. 解码逻辑:在按钮点击事件处理函数中,获取用户输入的VIN,调用RebiVinDecoder.decodeVin方法进行解码,并将解码结果显示在UI上。

注意事项

  • 确保你使用的rebi_vin_decoder插件版本是最新的,以获取最新的功能和修复。
  • 插件可能依赖于某些特定的API或数据源,因此在实际应用中,请注意检查其文档和隐私政策。
  • 示例代码中的错误处理较为简单,你可以根据实际需求进行更详细的错误处理。

希望这个示例代码能帮助你在Flutter项目中集成并使用rebi_vin_decoder插件。

回到顶部