fluttercommunity / fluttercommunity/community

Using Package fit_kit to display live step Counter data

Open
#68 0 comments 0 reactions 1 assignee Claimed by @jeroen-meijer View on GitHub
discussion
Dominant language
No language data
Stars
1.7k
Forks
128
PR merge metrics
No merged PRs in 30d

Description

I am trying to build a flutter app that will display live step counter .
For that i am using package fit_kit in which i have setup Oauth ID and all steps for Permission granted for sensor.

In Sample Usage of [https://pub.dev/packages/fit_kit](https://pub.dev/packages/fit_kit
), i am unable to display, if user walking , then display live step counting in app.

Note: I have given ACTIVITY_RECOGNITION permission in manifest file, App is building successfully but what method should be used to display live step counter data.

Only one dart is used, code given below:

```

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

void main() {
runApp(MyApp());
}

class MyApp extends StatefulWidget {

_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
String result = '';
Map> results = Map();
bool permissions;

RangeValues _dateRange = RangeValues(1, 8);
List _dates = List();
double _limitRange = 0;

DateTime get _dateFrom => _dates[_dateRange.start.round()];

DateTime get _dateTo => _dates[_dateRange.end.round()];

int get _limit => _limitRange == 0.0 ? null : _limitRange.round();

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

final now = DateTime.now();
_dates.add(null);
for (int i = 7; i >= 0; i--) {
_dates.add(DateTime(
now.year,
now.month,
now.day,
).subtract(Duration(days: i)));
}
_dates.add(null);

hasPermissions();
}

Future revokePermissions() async {
results.clear();

try {
await FitKit.revokePermissions();
permissions = await FitKit.hasPermissions(DataType.values);
result = 'revokePermissions: success';
} catch (e) {
result = 'revokePermissions: $e';
}

setState(() {});
}

Future hasPermissions() async {
try {
permissions = await FitKit.hasPermissions(DataType.values);
} catch (e) {
result = 'hasPermissions: $e';
}

if (!mounted) return;

setState(() {});
}

@override
Widget build(BuildContext context) {
final items =
results.entries.expand((entry) => [entry.key, ...entry.value]).toList();

return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('FitKit Step Count'),
),
body: Container(
padding: EdgeInsets.symmetric(horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(padding: EdgeInsets.symmetric(vertical: 8)),
Text(
'Date Range: ${_dateToString(_dateFrom)} - ${_dateToString(
_dateTo)}'),
Text('Limit: $_limit'),
Text('Permissions: $permissions'),
Text('Result: $result'),
_buildDateSlider(context),
_buildLimitSlider(context),
_buildButtons(context),
Expanded(
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
final item = items[index];
if (item is DataType) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 8),
child: Text(
'$item - ${results[item].length}',
style: Theme
.of(context)
.textTheme
// ignore: deprecated_member_use
.title,
),
);
} else if (item is FitData) {
return Padding(
padding: EdgeInsets.symmetric(
vertical: 4,
horizontal: 8,
),
child: Text(
'$item',
style: Theme
.of(context)
.textTheme
.caption,
),
);
}

return Container();
},
),
),
],
),
),
),
);
}

String _dateToString(DateTime dateTime) {
if (dateTime == null) {
return 'null';
}

return '${dateTime.day}.${dateTime.month}.${dateTime.year}';
}

Widget _buildDateSlider(BuildContext context) {
return Row(
children: [
Text('Date Range'),
Expanded(
child: RangeSlider(
values: _dateRange,
min: 0,
max: 9,
divisions: 10,
onChanged: (values) => setState(() => _dateRange = values),
),
),
],
);
}

Widget _buildLimitSlider(BuildContext context) {
return Row(
children: [
Text('Limit'),
Expanded(
child: Slider(
value: _limitRange,
min: 0,
max: 4,
divisions: 4,
onChanged: (newValue) => setState(() => _limitRange = newValue),
),
),
],
);
}

Widget _buildButtons(BuildContext context) {
return Row(
children: [
Expanded(
child: FlatButton(
color: Theme
.of(context)
.accentColor,
textColor: Colors.white,
onPressed: () => read(),
child: Text('Read'),
),
),
Padding(padding: EdgeInsets.symmetric(horizontal: 4)),
Expanded(
child: FlatButton(
color: Theme
.of(context)
.accentColor,
textColor: Colors.white,
onPressed: () => readLast(),
child: Text('Step Count'),
),
),
Padding(padding: EdgeInsets.symmetric(horizontal: 4)),
Expanded(
child: FlatButton(
color: Theme
.of(context)
.accentColor,
textColor: Colors.white,
onPressed: () => revokePermissions(),
child: Text('Revoke permissions'),
),
),
],
);
}

void read() async {
try {
final results = await FitKit.read(
DataType.STEP_COUNT,

dateFrom: DateTime.now().subtract(Duration(days: 5)),
dateTo: DateTime.now(),
);
} catch (e) {

}
}

void readLast() async {
final result = await FitKit.readLast(DataType.STEP_COUNT);

}

void readAll() async {
if (await FitKit.requestPermissions(DataType.values)) {
for (DataType type in DataType.values) {
final results = await FitKit.read(
type= DataType.STEP_COUNT,
dateFrom: DateTime.now().subtract(Duration(days: 5)),
dateTo: DateTime.now(),
);
}
}
}

}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.