fluttercommunity / fluttercommunity/community
Using Package fit_kit to display live step Counter data
- 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.