user_status_collector 0.1.1 copy "user_status_collector: ^0.1.1" to clipboard
user_status_collector: ^0.1.1 copied to clipboard

Collects device, network, battery, and foreground location status for upload.

example/lib/main.dart

import 'dart:async';

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _collector = UserStatusCollector();
  UserStatusSnapshot? _snapshot;
  Object? _error;
  bool _isCollecting = false;

  Future<void> _collectStatus() async {
    setState(() {
      _isCollecting = true;
      _error = null;
    });

    try {
      final snapshot = await _collector.collect(trigger: UserStatusTrigger.appLaunch);

      if (!mounted) {
        return;
      }

      setState(() {
        _snapshot = snapshot;
      });
    } on Object catch (error) {
      if (!mounted) {
        return;
      }

      setState(() {
        _error = error;
      });
    } finally {
      if (mounted) {
        setState(() {
          _isCollecting = false;
        });
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('User status collector example')),
        body: Padding(
          padding: const EdgeInsets.all(16),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              FilledButton(
                onPressed: _isCollecting ? null : () => unawaited(_collectStatus()),
                child: Text(_isCollecting ? 'Collecting...' : 'Collect status'),
              ),
              const SizedBox(height: 16),
              if (_error != null)
                Text('Collection failed: $_error')
              else if (_snapshot == null)
                const Text('No snapshot collected.')
              else
                Expanded(child: SingleChildScrollView(child: Text(_snapshot!.toJson().toString()))),
            ],
          ),
        ),
      ),
    );
  }
}