Flutter集成Nimmsta服务插件nimmsta_sdk的使用

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

Flutter集成Nimmsta服务插件nimmsta_sdk的使用

Nimmsta SDK 是一个用于Flutter应用的Nimmsta服务插件。

目前仅支持Android平台,因为Nimmsta仅提供了针对该平台的SDK。

使用方法

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  nimmsta_sdk: <version>

将以下值添加到你的 <strong>local.properties</strong> 文件中:

nimmsta.username=<username>
nimmsta.password=<password>

用户名和密码由Nimmsta提供(https://nimmsta.com/)。

修改你的 AndroidManifest.xml 文件,添加以下内容:

<application
    ...
    android:theme="@style/NormalTheme">
    <activity
        ...
        <meta-data
            android:name="io.flutter.embedding.android.NormalTheme"
            android:resource="@style/NormalTheme"
            />
        ...
</application>

/res/values/styles.xml 文件中添加以下样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <style name="NormalTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

在你的app级别的 build.gradle 文件中添加以下配置:

android {
    ...
    packagingOptions {
        exclude 'META-INF/*.kotlin_module'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/INDEX.LIST'
        exclude 'META-INF/io.netty.versions.properties'
    }
}

dependencies {
    ...
    implementation "androidx.appcompat:appcompat:1.2.0" /* TODO 临时依赖,为了使Nimmsta SDK工作 */
}

你的布局文件应该放在 /res/raw 目录下。

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中集成和使用Nimmsta SDK。

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

import 'package:nimmsta_sdk/nimmsta_sdk.dart';
import 'package:nimmsta_sdk/models/scan_picking_mode.dart' as Picking;
import 'package:nimmsta_sdk/models/scan_trigger_mode.dart' as Trigger;

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? _barcode = "Unknown";
  String _connectionFlag = "disconnected";

  late NimmstaSdk nimmstaSdk;

  [@override](/user/override)
  void initState() {
    super.initState();
    initNimmsta();
  }

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> initNimmsta() async {
    nimmstaSdk = NimmstaSdk(
      didConnectAndInitCallback: (deviceAddress) async {
        // 当设备连接并初始化时调用此回调
        await nimmstaSdk.setLayout("test_layout", {
          "title": "设备状态",
          "subtitle": "didConnectAndInitCallback",
        });
        await nimmstaSdk.pushSettings(true, true,
            Trigger.ScanTriggerMode.Button, Picking.ScanPickingMode.DISABLED);
        setState(() {
          _connectionFlag = "didConnectAndInitCallback";
        });
      },
      didDisconnectCallback: () {
        // 当设备断开连接时调用此回调
        setState(() {
          _connectionFlag = "disconnected";
        });
      },
      didTouchCallback: (dynamic arguments) {
        // 当触摸屏幕时调用此回调
        debugPrint(
            "NIMMSTA SDK: didTouchCallback with coordinates ${arguments.toString()}");
      },
      didClickButtonCallback: (dynamic action) {
        // 当点击按钮时调用此回调
        debugPrint("NIMMSTA SDK: didClickButtonCallback with action $action");
      },
      didScanBarcodeCallback: (dynamic barcode) {
        // 当扫描条形码时调用此回调
        setState(() {
          _barcode = barcode;
        });
      },
      didReconnectAndInitCallback: (deviceAddress) async {
        // 当设备重新连接并初始化时调用此回调
        await nimmstaSdk.setLayout("test_layout", {
          "title": "设备状态",
          "subtitle": "didReconnectAndInitCallback",
        });
        await nimmstaSdk.pushSettings(true, true,
            Trigger.ScanTriggerMode.Button, Picking.ScanPickingMode.DISABLED);
        setState(() {
          _connectionFlag = "didReconnectAndInitCallback";
        });
      },
      connectedWithDeviceAddress: (deviceAddress) async {
        // 当设备连接时调用此回调
        await nimmstaSdk.setLayout("test_layout", {
          "title": "设备状态",
          "subtitle": "connectedWithDeviceAddress",
        });
        await nimmstaSdk.pushSettings(true, true,
            Trigger.ScanTriggerMode.Button, Picking.ScanPickingMode.DISABLED);
        setState(() {
          _connectionFlag = "connectedWithDeviceAddress";
        });
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            children: [
              Text('连接状态: $_connectionFlag\n'),
              TextButton(
                onPressed: () async {
                  // 连接Nimmsta设备
                  await nimmstaSdk.connect();
                },
                child: Text('连接Nimmsta设备'),
              ),
              Text('扫描的条形码: $_barcode\n'),
              TextButton(
                onPressed: () async {
                  // 更改布局
                  await nimmstaSdk.setLayout("test_layout", {
                    "title": "这是标题!",
                    "subtitle": "这是副标题",
                  });
                },
                child: Text('更改布局'),
              ),
              TextButton(
                onPressed: () async {
                  // 触发LED闪烁
                  await nimmstaSdk.triggerLEDBurst(2, 500, 250, Colors.green);
                },
                child: Text('触发LED'),
              ),
              TextButton(
                onPressed: () async {
                  // 触发蜂鸣器
                  await nimmstaSdk.triggerBeeperBurst(1, 100, 50, 100);
                },
                child: Text('触发蜂鸣器'),
              ),
              TextButton(
                onPressed: () async {
                  // 触发振动
                  await nimmstaSdk.triggerVibrationBurst(2, 1000, 500, 100);
                },
                child: Text('触发振动'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成并使用Nimmsta服务插件nimmsta_sdk的代码案例。假设你已经有一个Flutter项目,并且已经配置好了开发环境。

第一步:添加依赖

首先,你需要在pubspec.yaml文件中添加nimmsta_sdk的依赖。确保你的Flutter项目根目录下有一个pubspec.yaml文件,然后在dependencies部分添加以下内容:

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

然后,运行以下命令来获取依赖:

flutter pub get

第二步:配置Android和iOS

在使用Nimmsta服务之前,你需要在Android和iOS平台上进行一些配置。这通常涉及在AndroidManifest.xmlInfo.plist文件中添加必要的权限和配置。由于具体配置可能随Nimmsta SDK的版本变化,请参考Nimmsta的官方文档获取最新的配置信息。

第三步:初始化Nimmsta SDK

在你的Flutter项目的入口文件(通常是main.dart)中,初始化Nimmsta SDK。以下是一个基本的初始化示例:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initNimmsta();
  }

  Future<void> initNimmsta() async {
    // 替换为你的Nimmsta API密钥
    String apiKey = 'YOUR_NIMMSTA_API_KEY';
    
    try {
      await Nimmsta.initialize(apiKey: apiKey);
      print('Nimmsta SDK initialized successfully');
    } catch (e) {
      print('Failed to initialize Nimmsta SDK: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Nimmsta SDK Demo'),
        ),
        body: Center(
          child: Text('Check the console for Nimmsta SDK initialization status'),
        ),
      ),
    );
  }
}

第四步:使用Nimmsta SDK的功能

一旦SDK初始化成功,你就可以开始使用Nimmsta SDK提供的功能了。例如,发起一个呼叫:

Future<void> makeCall(String phoneNumber) async {
  try {
    await Nimmsta.makeCall(phoneNumber: phoneNumber);
    print('Call initiated successfully');
  } catch (e) {
    print('Failed to initiate call: $e');
  }
}

你可以在UI中添加一个按钮来触发这个呼叫功能:

ElevatedButton(
  onPressed: () {
    String phoneNumber = '目标电话号码';  // 替换为实际的电话号码
    makeCall(phoneNumber);
  },
  child: Text('Make Call'),
),

完整示例

将上述代码片段整合起来,你的main.dart文件可能看起来像这样:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initNimmsta();
  }

  Future<void> initNimmsta() async {
    String apiKey = 'YOUR_NIMMSTA_API_KEY';
    
    try {
      await Nimmsta.initialize(apiKey: apiKey);
      print('Nimmsta SDK initialized successfully');
    } catch (e) {
      print('Failed to initialize Nimmsta SDK: $e');
    }
  }

  Future<void> makeCall(String phoneNumber) async {
    try {
      await Nimmsta.makeCall(phoneNumber: phoneNumber);
      print('Call initiated successfully');
    } catch (e) {
      print('Failed to initiate call: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Nimmsta SDK Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () {
                  String phoneNumber = '目标电话号码';  // 替换为实际的电话号码
                  makeCall(phoneNumber);
                },
                child: Text('Make Call'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

确保替换'YOUR_NIMMSTA_API_KEY''目标电话号码'为实际的值。

这个示例展示了如何在Flutter项目中集成并使用Nimmsta服务插件nimmsta_sdk的基本步骤。根据实际需求,你可能需要查阅Nimmsta的官方文档以获取更多高级功能和配置选项。

回到顶部