soil_device_sdk 0.1.0 copy "soil_device_sdk: ^0.1.0" to clipboard
soil_device_sdk: ^0.1.0 copied to clipboard

PlatformAndroid

USB Type-C soil sensor (CH34x) Modbus-RTU SDK for Flutter with API key verification and offline data queue.

example/lib/main.dart

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 1) Provide API key in main()
  SoilDeviceSdk.configure(
    apiKey: 'YOUR_API_KEY',
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: ExampleHome(),
    );
  }
}

class ExampleHome extends StatefulWidget {
  const ExampleHome({super.key});

  @override
  State<ExampleHome> createState() => _ExampleHomeState();
}

class _ExampleHomeState extends State<ExampleHome> {
  final client =
      SoilDeviceClient(mode: SoilReadMode.once, proactiveReportingSeconds: 2);

  List<SoilUsbDeviceInfo> devices = [];
  SoilUsbDeviceInfo? selected;
  SoilData? last;
  String? error;

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

  Future<void> _refreshDevices() async {
    setState(() => error = null);
    try {
      final d = await client.getDeviceList();
      setState(() {
        devices = d;
        selected = d.isNotEmpty ? d.first : null;
      });
    } catch (e) {
      setState(() => error = e.toString());
    }
  }

  Future<void> _connect() async {
    if (selected == null) return;
    setState(() => error = null);
    try {
      await client.makeConnection(selected!);
      final v = await client.getPrintingValue();
      setState(() => last = v);
    } catch (e) {
      setState(() => error = e.toString());
    }
  }

  Future<void> _read() async {
    setState(() => error = null);
    try {
      final v = await client.getPrintingValue();
      setState(() => last = v);
    } catch (e) {
      setState(() => error = e.toString());
    }
  }

  Future<void> _disconnect() async {
    await client.makeDisconnect();
    setState(() => last = null);
  }

  @override
  void dispose() {
    client.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Soil SDK Example')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Expanded(
                  child: DropdownButton<SoilUsbDeviceInfo>(
                    isExpanded: true,
                    value: selected,
                    items: devices
                        .map((d) => DropdownMenuItem(
                              value: d,
                              child: Text(d.displayName,
                                  overflow: TextOverflow.ellipsis),
                            ))
                        .toList(),
                    onChanged: (v) => setState(() => selected = v),
                  ),
                ),
                const SizedBox(width: 8),
                ElevatedButton(
                    onPressed: _refreshDevices, child: const Text('Refresh')),
              ],
            ),
            const SizedBox(height: 12),
            Wrap(
              spacing: 8,
              children: [
                ElevatedButton(
                    onPressed: _connect, child: const Text('Connect')),
                ElevatedButton(
                    onPressed: client.isConnected ? _read : null,
                    child: const Text('Read')),
                OutlinedButton(
                    onPressed: client.isConnected ? _disconnect : null,
                    child: const Text('Disconnect')),
              ],
            ),
            const SizedBox(height: 16),
            if (error != null)
              Text(error!, style: const TextStyle(color: Colors.red)),
            if (last != null) ...[
              Text('Temp: ${last!.temperatureC}'),
              Text('Moisture: ${last!.humidityPercent}'),
              Text('pH: ${last!.ph}'),
              Text('EC: ${last!.ecUsCm}'),
              Text('Salinity: ${last!.salinityMgL}'),
              Text('N: ${last!.nitrogenMgKg}'),
              Text('P: ${last!.phosphorusMgKg}'),
              Text('K: ${last!.potassiumMgKg}'),
            ],
          ],
        ),
      ),
    );
  }
}
0
likes
140
points
8
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

USB Type-C soil sensor (CH34x) Modbus-RTU SDK for Flutter with API key verification and offline data queue.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

connectivity_plus, dio, flutter, geolocator, meta, shared_preferences, usb_serial

More

Packages that depend on soil_device_sdk