rtl_ir_control 0.0.1-dev.1 copy "rtl_ir_control: ^0.0.1-dev.1" to clipboard
rtl_ir_control: ^0.0.1-dev.1 copied to clipboard

Remotec IR Control package

example/lib/main.dart

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

void main() => runApp(const MyApp());

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Plugin example app')),
        body: SetupPage(),
      ),
    );
  }
}

class SetupPage extends StatefulWidget {
  @override
  State<SetupPage> createState() => _SetupPageState();
}

class _SetupPageState extends State<SetupPage> {
  final _rtlIrControlPlugin = RtlIrControl();

  final blufi = RTLBlufiSetupUtils();

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Expanded(
          child: StreamBuilder(
            stream: _rtlIrControlPlugin.startScan(namePrefix: ['Roomate']),
            builder: (
              BuildContext context,
              AsyncSnapshot<List<RTLBluetoothScanRecord>> snapshot,
            ) {
              return ListView(
                children: [
                  snapshot.error != null
                      ? Text(snapshot.error.toString())
                      : Container(),
                  snapshot.connectionState == ConnectionState.active
                      ? LinearProgressIndicator()
                      : Container(),
                  ...snapshot.data
                          ?.map(
                            (e) => ListTile(
                              title: Text(e.device.name ?? ''),
                              subtitle: Text(e.device.id),
                              trailing: Row(
                                mainAxisSize: MainAxisSize.min,
                                children: [
                                  ElevatedButton(
                                    onPressed:
                                        () =>
                                            downloadCode(e.device.id, dataJson),
                                    child: Text('download'),
                                  ),
                                  ElevatedButton(
                                    onPressed: () => setup(e.device.id),
                                    child: Text('setup'),
                                  ),
                                ],
                              ),
                            ),
                          )
                          .toList() ??
                      [],
                ],
              );
            },
          ),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              // onPressed: () => setState(() {}),
              onPressed: () async {
                setState(() {});
              },
              child: Text('Scan'),
            ),
          ],
        ),
      ],
    );
  }

  var dataJson = 'your api response';

  Future<void> downloadCode(String id, String apiJson) async {
    try {
      RTLIrCodeset codeset = RTLIrCodeset.fromApiJson(apiJson);

      var device = RtlIrControl().getDevice(id);

      await device.connect();

      RoomateDeviceHandler roomateDeviceHandler = RoomateDeviceHandler(device);

      roomateDeviceHandler
          .downloadCodeFromCodeset(1, "40", codeset)
          .listen((progress) {
            print(progress);
          });
    } catch (e, i) {
      print(e);
      print(i);
      showMessageDialog('error', e.toString());
    }
  }

  Future<void> setup(String id) async {
    try {
      _rtlIrControlPlugin.stopScan();

      await blufi.setCurrentId(id);

      await blufi.connect();

      // get device wifi list
      var list = await blufi.scanWifiList();

      var ssid = await selectWifi(list);

      var password = await inputPassword(ssid);

      await blufi.configProvision(ssid: ssid, password: password);
    } catch (e) {
      if (e is RTLBluetoothException)
        showMessageDialog(e.toString(), e.getMessage());
      else
        showMessageDialog('Unknown Error', e.toString());
    }
  }

  void showMessageDialog(String title, String message) {
    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return Dialog(
          child: Container(
            padding: EdgeInsets.all(16),
            width: double.infinity,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  title,
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
                Text(message, style: TextStyle(fontSize: 16)),
                ElevatedButton(
                  onPressed: () => Navigator.pop(context),
                  child: Text('OK'),
                ),
              ],
            ),
          ),
        );
      },
    );
  }

  Future<String> selectWifi(List<String> wifiList) {
    Completer<String> completer = Completer();
    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return Dialog(
          child: Container(
            padding: EdgeInsets.all(16),
            width: double.infinity,
            child: ListView(
              children:
                  wifiList
                      .map(
                        (e) => Card(
                          child: ListTile(
                            title: Text(e),
                            onTap: () {
                              completer.complete(e);
                              Navigator.pop(context);
                            },
                          ),
                        ),
                      )
                      .toList(),
            ),
          ),
        );
      },
    );
    return completer.future;
  }

  Future<String> inputPassword(String ssid) {
    TextEditingController controller = TextEditingController();
    Completer<String> completer = Completer();
    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return Dialog(
          child: Container(
            padding: EdgeInsets.all(16),
            width: double.infinity,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                TextField(
                  controller: controller,
                  obscureText: true,
                  decoration: InputDecoration(
                    border: OutlineInputBorder(),
                    labelText: 'Password',
                  ),
                ),
                ElevatedButton(
                  onPressed: () {
                    if (controller.text.toString().isEmpty) return;
                    completer.complete(controller.text.toString());
                    Navigator.pop(context);
                  },
                  child: Text('OK'),
                ),
              ],
            ),
          ),
        );
      },
    );
    return completer.future;
  }
}
0
likes
0
points
54
downloads

Publisher

unverified uploader

Weekly Downloads

Remotec IR Control package

Homepage

License

unknown (license)

Dependencies

async, esp_blufi, flutter, flutter_blue_plus, permission_handler, plugin_platform_interface

More

Packages that depend on rtl_ir_control