Skip to content

AR Location Viewer for Flutter porting from AR Location View

License

Notifications You must be signed in to change notification settings

dariocavada/ar_location_viewer

Repository files navigation

ar_location_viewer

Augmented reality for geolocation. Inspired HDAugmentedReality

Is an upgraded version of: https://pub.dev/packages/ar_location_view

Upgraded dependencies

Demo

ArLocationView

Description

ArLocationViewer is designed to used in areas with large concentration of static POIs. Where primary goal is the visibility of all POIs.

Remark: Altitudes of POIs are disregarded

Features

  • Automatic vertical stacking of annotations views
  • Tracks user movement and updates visible annotations
  • Fully customisable annotation view
  • Supports all rotations

Basic usage

Look at the example

For iOs

ArLocationView use device camera and location, add in Info.plist

<key>NSLocationWhenInUseUsageDescription</key>
<key>NSLocationUsageDescription</key>
<key>NSLocationAlwaysUsageDescription</key>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<key>NSCameraUsageDescription</key>

For Android

Add permission in manifest.xml

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

If you have an exception like:

PlatformException(error, To use the sampling rate of 500 microseconds, app needs to declare the normal permission HIGH_SAMPLING_RATE_SENSORS., null, null) 

add the follwing to the manifest:

<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS"/>

Create class extend ArAnnotation

class Annotation extends ArAnnotation {
  final AnnotationType type;
  
  Annotation({required super.uid, required super.position, required this.type});
}

Create a widget for Annotation view for example

class AnnotationView extends StatelessWidget {
  const AnnotationView({
    Key? key,
    required this.annotation,
  }) : super(key: key);

  final Annotation annotation;

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(5),
        color: Colors.white,
      ),
      child: Row(
        children: [
          Expanded(
            child: Container(
              decoration: const BoxDecoration(
                borderRadius: BorderRadius.only(
                  topLeft: Radius.circular(5),
                  bottomLeft: Radius.circular(5),
                ),
              ),
              child: typeFactory(annotation.type),
            ),
          ),
          Expanded(
            flex: 2,
            child: Padding(
              padding: const EdgeInsets.all(4.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Text(
                    annotation.type.toString().substring(15),
                    maxLines: 1,
                    style: const TextStyle(fontWeight: FontWeight.bold),
                  ),
                  Text(
                    '${annotation.distanceFromUser.toInt()} m',
                  ),
                ],
              ),
            ),
          )
        ],
      ),
    );
  }

  Widget typeFactory(AnnotationType type) {
    IconData iconData = Icons.ac_unit_outlined;
    Color color = Colors.teal;
    switch (type) {
      case AnnotationType.pharmacy:
        iconData = Icons.local_pharmacy_outlined;
        color = Colors.red;
        break;
      case AnnotationType.hotel:
        iconData = Icons.hotel_outlined;
        color = Colors.green;
        break;
      case AnnotationType.library:
        iconData = Icons.library_add_outlined;
        color = Colors.blue;
        break;
    }
    return Icon(
      iconData,
      size: 40,
      color: color,
    );
  }
}

License

ArLocationViewer is released under the MIT license.

About

AR Location Viewer for Flutter porting from AR Location View

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published