flutter_activity_recognition 3.1.0 flutter_activity_recognition: ^3.1.0 copied to clipboard
This plugin is used to recognize user activity on Android and iOS platforms.
import 'dart:async';
import 'dart:developer' as dev;
import 'package:flutter/material.dart';
import 'package:flutter_activity_recognition/flutter_activity_recognition.dart';
void main() => runApp(ExampleApp());
class ExampleApp extends StatefulWidget {
@override
_ExampleAppState createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> {
final _activityStreamController = StreamController<Activity>();
StreamSubscription<Activity>? _activityStreamSubscription;
void _onActivityReceive(Activity activity) {
dev.log('Activity Detected >> ${activity.toJson()}');
_activityStreamController.sink.add(activity);
}
void _handleError(dynamic error) {
dev.log('Catch Error >> $error');
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
final activityRecognition = FlutterActivityRecognition.instance;
// Check if the user has granted permission. If not, request permission.
PermissionRequestResult reqResult;
reqResult = await activityRecognition.checkPermission();
if (reqResult == PermissionRequestResult.PERMANENTLY_DENIED) {
dev.log('Permission is permanently denied.');
return;
} else if (reqResult == PermissionRequestResult.DENIED) {
reqResult = await activityRecognition.requestPermission();
if (reqResult != PermissionRequestResult.GRANTED) {
dev.log('Permission is denied.');
return;
}
}
// Subscribe to the activity stream.
_activityStreamSubscription = activityRecognition.activityStream
.handleError(_handleError)
.listen(_onActivityReceive);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Activity Recognition'),
centerTitle: true
),
body: _buildContentView()
),
);
}
@override
void dispose() {
_activityStreamController.close();
_activityStreamSubscription?.cancel();
super.dispose();
}
Widget _buildContentView() {
return StreamBuilder<Activity>(
stream: _activityStreamController.stream,
builder: (context, snapshot) {
final updatedDateTime = DateTime.now();
final content = snapshot.data?.toJson().toString() ?? '';
return ListView(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(8.0),
children: [
Text('•\t\tActivity (updated: $updatedDateTime)'),
SizedBox(height: 10.0),
Text(content)
]
);
}
);
}
}