Skip to content

Commit

Permalink
Migrate to Flutter 2 / null-safety (#175)
Browse files Browse the repository at this point in the history
* upgrade deps to null safe versions

* upgrade pubspec and flutter pub get OK

* fix advertisement data utils & tests

* migrate views/control_module directory

* finish migrating views folder

* finish migrating lib/src folder

* migrate test_driver folder

* migrate ble folder

* migrate freezed model

* migrate mesh manager api

* migrate provisioning.dart

* migrate mesh_network.dart

* finish migrating to null safety 🥳

* fix Action on_pr.yaml

* fix pr comments

* [MeshManagerApi] fix exportMeshNetwork signature

* [MeshNetwork] get node methods is now allowing return null

* export more from the lib

* add missing files

* put file_picker dep inside example app instead main pubspec.yaml

* fix compile error

* use long uuids as before

* fix runtime error

* guard disconnect call if no device connected

* [UnprovisionedMeshNod] make provisionerPublicKeyXY nullable

* [BleScanner] change onError getter so it gives a broadcast stream to avoid errors of multiple listen calls

* fix ble scann error streamer
  • Loading branch information
R0m4in-dooz committed Sep 6, 2021
1 parent 636c5e2 commit 271eab1
Show file tree
Hide file tree
Showing 94 changed files with 2,768 additions and 2,145 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/on_pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
submodules: true
- uses: actions/setup-java@v1
with:
java-version: "12.x"
- uses: subosito/flutter-action@v1
with:
flutter-version: '1.22.6'
channel: "stable"
- name: Get dependencies
run: flutter packages get
- name: Check format
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ class DoozMeshManagerApi(context: Context, binaryMessenger: BinaryMessenger) : S
mMeshManagerApi.createMeshPdu(unicastAddress, configNodeReset)
}
} catch (ex: Exception) {
Log.e(tag, ex.message)
Log.e(tag, ex.message.toString())
result.success(false)
}
result.success(true)
Expand Down
2 changes: 1 addition & 1 deletion example/lib/src/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class _MyAppState extends State<MyApp> {

@override
Widget build(BuildContext context) {
Widget body;
Widget body = const SizedBox.shrink();

if (_bottomNavigationBarIndex == 0) {
// home
Expand Down
6 changes: 3 additions & 3 deletions example/lib/src/data/board_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ class BoardData {
payload = 0;

factory BoardData.decode(int level) {
final payload = (level & 0x1FF).toString();
final offset = ((level >> 9) & 0x1F).toString();
final payload = (level & 0x1FF);
final offset = ((level >> 9) & 0x1F);
var io = (level >> (9 + 5)) & 0x3;
if (level < 0) {
io = io | 0x2;
}
return BoardData(io, int.tryParse(offset), int.tryParse(payload));
return BoardData(io, offset, payload);
}

int toByte() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ class SendConfigModelSubscriptionAdd extends StatefulWidget {
}

class _SendConfigModelSubscriptionAddState extends State<SendConfigModelSubscriptionAdd> {
int selectedElementAddress;
int selectedModelType;
int selectedSubscriptionAddress;
int selectedAddress;
late int selectedElementAddress;
late int selectedModelType;
late int selectedSubscriptionAddress;
late int selectedAddress;

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -48,24 +48,24 @@ class _SendConfigModelSubscriptionAddState extends State<SendConfigModelSubscrip
selectedSubscriptionAddress = int.parse(text);
},
),
RaisedButton(
child: Text('Send level'),
TextButton(
onPressed: () async {
final scaffoldState = Scaffold.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context);
try {
await widget.meshManagerApi
.sendConfigModelSubscriptionAdd(
selectedElementAddress, selectedSubscriptionAddress, selectedModelType)
.timeout(Duration(seconds: 40));
scaffoldState.showSnackBar(SnackBar(content: Text('OK')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('OK')));
} on TimeoutException catch (_) {
scaffoldState.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
} on PlatformException catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.message)));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('${e.message}')));
} catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.toString())));
scaffoldMessenger.showSnackBar(SnackBar(content: Text(e.toString())));
}
},
child: Text('Send level'),
)
],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class SendCreateGroupWithName extends StatefulWidget {
}

class _SendCreateGroupWithNameState extends State<SendCreateGroupWithName> {
String _name;
late String _name;

@override
Widget build(BuildContext context) {
Expand All @@ -27,21 +27,21 @@ class _SendCreateGroupWithNameState extends State<SendCreateGroupWithName> {
_name = text;
},
),
RaisedButton(
child: Text('Send create group'),
TextButton(
onPressed: () async {
final scaffoldState = Scaffold.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context);
try {
await widget.meshManagerApi.meshNetwork.addGroupWithName(_name).timeout(Duration(seconds: 40));
scaffoldState.showSnackBar(SnackBar(content: Text('OK')));
await widget.meshManagerApi.meshNetwork!.addGroupWithName(_name).timeout(Duration(seconds: 40));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('OK')));
} on TimeoutException catch (_) {
scaffoldState.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
} on PlatformException catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.message)));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('${e.message}')));
} catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.toString())));
scaffoldMessenger.showSnackBar(SnackBar(content: Text(e.toString())));
}
},
child: Text('Send create group'),
)
],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class SendDeleteGroup extends StatefulWidget {
}

class _SendDeleteGroupState extends State<SendDeleteGroup> {
int _id;
int? _id;

@override
Widget build(BuildContext context) {
Expand All @@ -24,24 +24,24 @@ class _SendDeleteGroupState extends State<SendDeleteGroup> {
TextField(
decoration: InputDecoration(hintText: 'id'),
onChanged: (text) {
_id = int.parse(text);
_id = int.tryParse(text);
},
),
RaisedButton(
child: Text('Send delete group'),
TextButton(
onPressed: () async {
final scaffoldState = Scaffold.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context);
try {
await widget.meshManagerApi.meshNetwork.removeGroup(_id).timeout(Duration(seconds: 40));
scaffoldState.showSnackBar(SnackBar(content: Text('OK')));
await widget.meshManagerApi.meshNetwork!.removeGroup(_id!).timeout(Duration(seconds: 40));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('OK')));
} on TimeoutException catch (_) {
scaffoldState.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
} on PlatformException catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.message)));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('${e.message}')));
} catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.toString())));
scaffoldMessenger.showSnackBar(SnackBar(content: Text(e.toString())));
}
},
child: Text('Send delete group'),
)
],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import 'package:nordic_nrf_mesh/nordic_nrf_mesh.dart';
class SendDeprovisioning extends StatefulWidget {
final MeshManagerApi meshManagerApi;

const SendDeprovisioning({Key key, this.meshManagerApi}) : super(key: key);
const SendDeprovisioning({Key? key, required this.meshManagerApi}) : super(key: key);

@override
_SendDeprovisioningState createState() => _SendDeprovisioningState();
}

class _SendDeprovisioningState extends State<SendDeprovisioning> {
int selectedElementAddress;
int? selectedElementAddress;

@override
Widget build(BuildContext context) {
Expand All @@ -31,27 +31,28 @@ class _SendDeprovisioningState extends State<SendDeprovisioning> {
});
},
),
RaisedButton(
child: Text('Send on off'),
TextButton(
onPressed: selectedElementAddress != null
? () async {
final scaffoldState = Scaffold.of(context);
final node = await widget.meshManagerApi.meshNetwork.getNode(selectedElementAddress);
final nodes = await widget.meshManagerApi.meshNetwork.nodes;

final provisionedNode = nodes.firstWhere((element) => element.uuid == node.uuid, orElse: () => null);
final scaffoldMessenger = ScaffoldMessenger.of(context);
final node = await widget.meshManagerApi.meshNetwork!.getNode(selectedElementAddress!);
final nodes = await widget.meshManagerApi.meshNetwork!.nodes;
try {
final provisionedNode = nodes.firstWhere((element) => element.uuid == node!.uuid);
await widget.meshManagerApi.deprovision(provisionedNode).timeout(Duration(seconds: 40));
scaffoldState.showSnackBar(SnackBar(content: Text('OK')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('OK')));
} on TimeoutException catch (_) {
scaffoldState.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
} on PlatformException catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.message)));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('${e.message}')));
} on StateError catch (_) {
scaffoldMessenger.showSnackBar(SnackBar(content: Text('No node found with this uuid')));
} catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.toString())));
scaffoldMessenger.showSnackBar(SnackBar(content: Text(e.toString())));
}
}
: null,
child: Text('Send node reset'),
)
],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ import 'package:nordic_nrf_mesh/nordic_nrf_mesh.dart';
class SendGenericLevel extends StatefulWidget {
final MeshManagerApi meshManagerApi;

const SendGenericLevel({Key key, this.meshManagerApi}) : super(key: key);
const SendGenericLevel({Key? key, required this.meshManagerApi}) : super(key: key);

@override
_SendGenericLevelState createState() => _SendGenericLevelState();
}

class _SendGenericLevelState extends State<SendGenericLevel> {
int selectedElementAddress;
int? selectedElementAddress;

int selectedLevel;
int? selectedLevel;

@override
Widget build(BuildContext context) {
Expand All @@ -40,26 +40,26 @@ class _SendGenericLevelState extends State<SendGenericLevel> {
});
},
),
RaisedButton(
child: Text('Send level'),
TextButton(
onPressed: selectedLevel != null
? () async {
final scaffoldState = Scaffold.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context);
print('send level $selectedLevel to $selectedElementAddress');
try {
await widget.meshManagerApi
.sendGenericLevelSet(selectedElementAddress, selectedLevel)
.sendGenericLevelSet(selectedElementAddress!, selectedLevel!)
.timeout(Duration(seconds: 40));
scaffoldState.showSnackBar(SnackBar(content: Text('OK')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('OK')));
} on TimeoutException catch (_) {
scaffoldState.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
} on PlatformException catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.message)));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('${e.message}')));
} catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.toString())));
scaffoldMessenger.showSnackBar(SnackBar(content: Text(e.toString())));
}
}
: null,
child: Text('Send level'),
)
],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import 'package:nordic_nrf_mesh/nordic_nrf_mesh.dart';
class SendGenericOnOff extends StatefulWidget {
final MeshManagerApi meshManagerApi;

const SendGenericOnOff({Key key, this.meshManagerApi}) : super(key: key);
const SendGenericOnOff({Key? key, required this.meshManagerApi}) : super(key: key);

@override
_SendGenericOnOffState createState() => _SendGenericOnOffState();
}

class _SendGenericOnOffState extends State<SendGenericOnOff> {
int selectedElementAddress;
int? selectedElementAddress;

bool onOff = false;

Expand All @@ -38,36 +38,37 @@ class _SendGenericOnOffState extends State<SendGenericOnOff> {
value: onOff,
onChanged: (value) {
setState(() {
onOff = value;
onOff = value!;
});
},
),
RaisedButton(
child: Text('Send on off'),
TextButton(
onPressed: selectedElementAddress != null
? () async {
final scaffoldState = Scaffold.of(context);
final scaffoldMessenger = ScaffoldMessenger.of(context);
print('send level $onOff to $selectedElementAddress');
final provisionerUuid = await widget.meshManagerApi.meshNetwork.selectedProvisionerUuid();
final nodes = await widget.meshManagerApi.meshNetwork.nodes;

final provisionedNode =
nodes.firstWhere((element) => element.uuid == provisionerUuid, orElse: () => null);
final sequenceNumber = await widget.meshManagerApi.getSequenceNumber(provisionedNode);
final provisionerUuid = await widget.meshManagerApi.meshNetwork!.selectedProvisionerUuid();
final nodes = await widget.meshManagerApi.meshNetwork!.nodes;
try {
final provisionedNode = nodes.firstWhere((element) => element.uuid == provisionerUuid);
final sequenceNumber = await widget.meshManagerApi.getSequenceNumber(provisionedNode);
await widget.meshManagerApi
.sendGenericOnOffSet(selectedElementAddress, onOff, sequenceNumber)
.sendGenericOnOffSet(selectedElementAddress!, onOff, sequenceNumber)
.timeout(Duration(seconds: 40));
scaffoldState.showSnackBar(SnackBar(content: Text('OK')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('OK')));
} on TimeoutException catch (_) {
scaffoldState.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('Board didn\'t respond')));
} on StateError catch (_) {
scaffoldMessenger.showSnackBar(
SnackBar(content: Text('No provisioner found with this uuid : $provisionerUuid')));
} on PlatformException catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.message)));
scaffoldMessenger.showSnackBar(SnackBar(content: Text('${e.message}')));
} catch (e) {
scaffoldState.showSnackBar(SnackBar(content: Text(e.toString())));
scaffoldMessenger.showSnackBar(SnackBar(content: Text(e.toString())));
}
}
: null,
child: Text('Send on off'),
)
],
);
Expand Down
Loading

0 comments on commit 271eab1

Please sign in to comment.