step_logger 1.0.0-beta.1 copy "step_logger: ^1.0.0-beta.1" to clipboard
step_logger: ^1.0.0-beta.1 copied to clipboard

A Flutter plugin for step counting and log sessions with background service support for Android.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:step_logger/models/step_logger_config.dart';
import 'package:step_logger/models/step_session.dart';
import 'package:step_logger/step_logger.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Initialize the StepTrackerPlugin with configuration

  await StepLogger.initialize(
    config: const StepLoggerConfig(
      androidNotificationTitle: 'My Example Step Tracker',
      androidNotificationContent: 'Tracking your steps in the background',
      //Note: Every Notifications can be removed in Android 14+ by the user
    ),
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Step Tracker')),
        body: const StepTrackerScreen(),
      ),
    );
  }
}

class StepTrackerScreen extends StatefulWidget {
  const StepTrackerScreen({super.key});

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

class StepTrackerScreenState extends State<StepTrackerScreen> {
  int _totalSteps = 0;
  int _sessionSteps = 0;
  bool _isTracking = false;

  @override
  void initState() {
    super.initState();
    _loadInitialData();
    _setupListeners();
  }

  Future<void> _loadInitialData() async {
    _totalSteps = await StepLogger.getTotalSteps();
    _sessionSteps = await StepLogger.getSessionSteps();
    _isTracking = await StepLogger.isTracking();
    setState(() {});
  }

  void _setupListeners() {
    StepLogger.stepUpdates.listen((update) {
      setState(() {
        _totalSteps = update.totalSteps;
        _sessionSteps = update.sessionSteps;
        _isTracking = update.isTracking;
      });
    });
  }

  @override
  void dispose() {
    StepLogger.stopStepTracking();
    super.dispose();
  }

  Future<List<StepSession>> _loadSessionHistory() async {
    final sessions = await StepLogger.getSessionHistory();
    // Handle session history data
    return sessions;
  }

  void _clearSessionHistory() async {
    await StepLogger.clearSessionHistory();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text('Total Steps: $_totalSteps',
              style: const TextStyle(fontSize: 24)),
          Text('Session Steps: $_sessionSteps',
              style: const TextStyle(fontSize: 24)),
          const SizedBox(height: 20),
          _isTracking
              ? ElevatedButton(
                  onPressed: () => StepLogger.stopStepTracking(),
                  child: const Text('Stop Tracking'),
                )
              : ElevatedButton(
                  onPressed: () => StepLogger.startStepTracking(),
                  child: const Text('Start Tracking'),
                ),
          const SizedBox(
            height: 20,
          ),
          ElevatedButton(
            onPressed: _clearSessionHistory,
            child: const Text('Clear Session History'),
          ),
          const SizedBox(height: 20),
          FutureBuilder(
              future: StepLogger.isBackgroundServiceRunning(),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.done) {
                  final isRunning = snapshot.data ?? false;
                  return Text(
                    'Background Service is ${isRunning ? 'Running' : 'Stopped'}',
                    style: const TextStyle(fontSize: 18),
                  );
                } else {
                  return const CircularProgressIndicator();
                }
              }),
          const SizedBox(height: 20),
          FutureBuilder(
              future: _loadSessionHistory(),
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  final sessions = snapshot.data!;
                  return ListView.builder(
                      shrinkWrap: true,
                      itemCount: sessions.length,
                      itemBuilder: (context, index) {
                        final session = sessions[index];
                        return ListTile(
                          title: Text('Steps: ${session.steps}'),
                          subtitle: Text(
                              'Duration: ${session.startTime} - ${session.endTime}'),
                        );
                      });
                } else {
                  return const CircularProgressIndicator();
                }
              })
        ],
      ),
    );
  }
}
4
likes
0
points
67
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for step counting and log sessions with background service support for Android.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dependency_validator, flutter, flutter_background_service, flutter_local_notifications, intl, pedometer, permission_handler, plugin_platform_interface, shared_preferences

More

Packages that depend on step_logger

Packages that implement step_logger