import 'dart:io'; import 'package:flutter/material.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; import 'constants.dart'; void main() { String initialRoute; initialRoute = '/home'; final MyApp myApp = MyApp( initialRoute: initialRoute, //context: localContext, ); runApp(myApp); } class MyApp extends StatefulWidget { final String initialRoute; //final Context context; MyApp({this.initialRoute}); // This widget is the root of your application. @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'MyHomie App Demo', initialRoute: widget.initialRoute, /*supportedLocales: [ const Locale('en', 'US'), //const Locale('fr', 'FR'), ],*/ theme: ThemeData( primarySwatch: Colors.blue, scaffoldBackgroundColor: kBackgroundColor, //fontFamily: "Vollkorn", textTheme: TextTheme(bodyText1: TextStyle(color: kBodyTextColor)), visualDensity: VisualDensity.adaptivePlatformDensity, ), routes: { '/home': (context) => MyHomePage(title: 'MyHomie App Demo Home Page') } ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State { int _counter = 0; final MqttServerClient client = MqttServerClient.withPort('192.168.31.140', 'flutter_client00', 1883); //192.168.31.140 void _incrementCounter() { setState(() { _counter++; 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') .keepAliveFor(60) .withWillTopic('willtopic') .withWillMessage('Will message')*/ .withClientIdentifier("TESSST") .startClean(); //.withWillQos(MqttQos.atLeastOnce); //client.secure = true; client.connectionMessage = connMessage; try { await client.connect(); } catch (e) { print('Exception: $e'); client.disconnect(); } client.subscribe("#", MqttQos.atLeastOnce); return client; } @override Widget build(BuildContext context) { connect(); return Scaffold( appBar: AppBar( title: Text(widget.title), ), 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: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }