fi_mapxus_positioning_flutter 1.0.0 copy "fi_mapxus_positioning_flutter: ^1.0.0" to clipboard
fi_mapxus_positioning_flutter: ^1.0.0 copied to clipboard

A Flutter plugin for Mapxus indoor positioning services. Provides real-time location tracking and positioning state management for indoor navigation applications.

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:mapxus_positioning_flutter/mapxus_positioning_flutter.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  bool _isInitialized = false;
  bool _isPositioning = false;
  List<String> _positionEvents = [];
  List<String> _typedEvents = [];

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

  Future<void> _initializeMapxus() async {
    try {
      // Replace with your actual Mapxus credentials
      // Get these from https://developer.mapxus.com/
      final bool? result = await MapxusPositioning.init(
        'YOUR_MAPXUS_APP_ID',
        'YOUR_MAPXUS_SECRET',
      );

      if (mounted) {
        setState(() {
          _isInitialized = result!;
        });
      }
    } catch (e) {
      print('Initialization failed: $e');
    }
  }

  Future<void> _startPositioning() async {
    if (!_isInitialized) {
      await _initializeMapxus();
    }

    try {
      final bool? result = await MapxusPositioning.start();

      if (mounted) {
        setState(() {
          _isPositioning = result!;
        });
      }

      // Listen to position stream (legacy format)
      MapxusPositioning.positionStream.listen((position) {
        if (mounted) {
          setState(() {
            _positionEvents.add('Legacy: $position');
            // Keep only last 5 events for display
            if (_positionEvents.length > 5) {
              _positionEvents.removeAt(0);
            }
          });
        }
      });

      // Listen to typed event stream (new format)
      MapxusPositioning.eventStream.listen((event) {
        if (mounted) {
          setState(() {
            if (event is PositioningLocationEvent) {
              _typedEvents.add(
                'Location: ${event.latitude.toStringAsFixed(6)}, ${event.longitude.toStringAsFixed(6)} (±${event.accuracy.toStringAsFixed(1)}m, floorId: ${event.floor} venueId: ${event.venueId}, buildingId: ${event.buildingId})',
              );
            } else if (event is PositioningStateEvent) {
              _typedEvents.add('State: ${event.state}');
            } else if (event is PositioningErrorEvent) {
              _typedEvents.add('Error: ${event.message} (${event.code})');
            } else if (event is PositioningOrientationEvent) {
              _typedEvents.add(
                'Orientation: ${event.orientation.toStringAsFixed(1)}° (accuracy: ${event.accuracy})',
              );
            }
            // Keep only last 5 events for display
            if (_typedEvents.length > 5) {
              _typedEvents.removeAt(0);
            }
          });
        }
      });
    } catch (e) {
      print('Start positioning failed: $e');
    }
  }

  Future<void> _stopPositioning() async {
    try {
      final bool? result = await MapxusPositioning.stop();

      if (mounted) {
        setState(() {
          _isPositioning = !result!;
        });
      }
    } catch (e) {
      print('Stop positioning failed: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Mapxus Positioning Example')),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              const SizedBox(height: 20),

              // Initialization status
              Text('Initialized: $_isInitialized'),

              // Positioning status
              Text('Positioning active: $_isPositioning'),

              const SizedBox(height: 20),

              // Control buttons
              Wrap(
                children: [
                  ElevatedButton(
                    onPressed: _initializeMapxus,
                    child: const Text('Initialize'),
                  ),
                  const SizedBox(width: 10),
                  ElevatedButton(
                    onPressed: _isInitialized ? _startPositioning : null,
                    child: const Text('Start Positioning'),
                  ),
                  const SizedBox(width: 10),
                  ElevatedButton(
                    onPressed: _isPositioning ? _stopPositioning : null,
                    child: const Text('Stop Positioning'),
                  ),
                ],
              ),

              const SizedBox(height: 20),

              // Position events (legacy format)
              const Text(
                'Legacy String Events:',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              Expanded(
                flex: 1,
                child: ListView.builder(
                  itemCount: _positionEvents.length,
                  itemBuilder: (context, index) {
                    return ListTile(
                      dense: true,
                      title: Text(
                        _positionEvents[index],
                        style: const TextStyle(fontSize: 12),
                      ),
                    );
                  },
                ),
              ),

              const Divider(),

              // Typed events (new format)
              const Text(
                'Typed Object Events:',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              Expanded(
                flex: 1,
                child: ListView.builder(
                  itemCount: _typedEvents.length,
                  itemBuilder: (context, index) {
                    return ListTile(
                      dense: true,
                      title: Text(
                        _typedEvents[index],
                        style: const TextStyle(fontSize: 12),
                      ),
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
0
points
125
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for Mapxus indoor positioning services. Provides real-time location tracking and positioning state management for indoor navigation applications.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on fi_mapxus_positioning_flutter

Packages that implement fi_mapxus_positioning_flutter