import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; import 'package:mycoreapi/api.dart'; import 'package:myhomie_app/Helpers/MQTTHelper.dart'; import 'package:myhomie_app/Screens/Debug/DebugPage.dart'; import 'package:myhomie_app/app_context.dart'; import 'package:myhomie_app/client.dart'; import 'package:provider/provider.dart'; class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State { int _counter = 0; final MqttServerClient client = MqttServerClient.withPort('192.168.31.140', 'flutter_client', 1883); // TODO Add switch button or check online connexion if local broker available //final MqttServerClient client = MqttServerClient.withPort('myhomie.be', 'flutter_client00', 1883); // TODO ONLINE void _incrementCounter() { setState(() { _counter++; print("client.connectionStatus !!! ==" + client.connectionStatus.toString()); if (client.connectionStatus.state == MqttConnectionState.connected) { const pubTopic = 'topic/test'; final builder = MqttClientPayloadBuilder(); builder.addString('Hello MQTT'); client.publishMessage(pubTopic, MqttQos.atLeastOnce, builder.payload); } }); } // connection succeeded void onConnected() { print('Connected !!!!!!!!!!!! ----------------------------------'); client.updates.listen((List> c) { final MqttPublishMessage message = c[0].payload; final payload = MqttPublishPayload.bytesToStringAsString(message.payload.message); print('Received message:$payload from topic: ${c[0].topic}>'); }); } // unconnected void onDisconnected() { print('Disconnected'); } // subscribe to topic succeeded void onSubscribed(String topic) { print('Subscribed topic: $topic'); } // subscribe to topic failed void onSubscribeFail(String topic) { print('Failed to subscribe $topic'); } // unsubscribe succeeded void onUnsubscribed(String topic) { print('Unsubscribed topic: $topic'); } Future connect() async { client.logging(on: false); client.keepAlivePeriod = 20; client.onDisconnected = onDisconnected; client.onConnected = onConnected; client.onSubscribed = onSubscribed; /// Security context /*SecurityContext context = new SecurityContext() ..useCertificateChain('path/to/my_cert.pem') ..usePrivateKey('path/to/my_key.pem', password: 'key_password') ..setClientAuthorities('path/to/client.crt', password: 'password');*/ //client.setProtocolV31(); //client.secure = true; //client.securityContext = context; final connMessage = MqttConnectMessage() .authenticateAs('thomas', 'MyCore,1') // TODO ONLINE /*.keepAliveFor(60) .withWillTopic('willtopic') .withWillMessage('Will message')*/ .withClientIdentifier("TESSST") .startClean(); //.withWillQos(MqttQos.atLeastOnce); //client.secure = true; client.connectionMessage = connMessage; client.autoReconnect = true; try { await client.connect(); } catch (e) { print('Exception: $e'); client.disconnect(); } client.subscribe("#", MqttQos.atLeastOnce); return client; return null; } @override Widget build(BuildContext context) { final appContext = Provider.of(context); if (!MQTTHelper.instance.isInstantiated) { print("MQTT NOT INSTANTIATED"); MQTTHelper.instance.connect(appContext); } return Scaffold( appBar: AppBar( title: Text("HomePage TODO"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () => { Navigator.push( context, MaterialPageRoute( builder: (context) { return DebugPage(); }, ) ) }, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }