geocomb_flutter 0.0.1-alpha.1 copy "geocomb_flutter: ^0.0.1-alpha.1" to clipboard
geocomb_flutter: ^0.0.1-alpha.1 copied to clipboard

geocomb but for flutter, locations storage with hexagons

example/lib/main.dart

import 'dart:math';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geocomb_flutter/geocomb_flutter.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  double _lat = 0;
  double _lon = 0;
  int _res = 0;
  HashProperties _hashProperties;

  /// [lower] is lower range limit, inclusive
  /// [upper] is upper range limit, inclusive
  /// [lower] must be less than [upper]
  double randomNum(double lower, double upper) {
    return Random().nextDouble() * (upper - lower) + lower;
  }

  void _callGeocomb() async {
    _lat = randomNum(-90, 90);
    _lon = randomNum(-180, 180);
    _res = randomNum(1, 999).round();

    Icosahedron ico =
        await Icosahedron.onReady(MapOrientation.ECEF, RotationMethod.gnomonic);

    Point3 p = ico.pointFromCoords(_lat, _lon);

    debugPrint("point created, now attempting hash creation");

    _hashProperties = ico.hash(p, _res);

    debugPrint(
      "hash created, hash: ${_hashProperties.mo}|${_hashProperties.rm}|${_hashProperties.res}|${_hashProperties.row}|${_hashProperties.col}\n  now attempting parse hash",
    );

    GPoint3 parsed = ico.parseHash(_hashProperties);

    debugPrint("hash parsed, sweet, parsed point obj: $parsed");

    setState(() {
      // This call to setState tells the Flutter framework that something has
      // changed in this State, which causes it to rerun the build method below
      // so that the display can reflect the updated values. If we changed
      // _counter without calling setState(), then the build method would not be
      // called again, and so nothing would appear to happen.
    });
  }

  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),
      ),
      body: Center(
        // Center is a layout widget. It takes a single child and positions it
        // in the middle of the parent.
        child: Column(
          // Column is also a layout widget. It takes a list of children and
          // arranges them vertically. By default, it sizes itself to fit its
          // children horizontally, and tries to be as tall as its parent.
          //
          // Invoke "debug painting" (press "p" in the console, choose the
          // "Toggle Debug Paint" action from the Flutter Inspector in Android
          // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
          // to see the wireframe for each widget.
          //
          // Column has various properties to control how it sizes itself and
          // how it positions its children. Here we use mainAxisAlignment to
          // center the children vertically; the main axis here is the vertical
          // axis because Columns are vertical (the cross axis would be
          // horizontal).
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              _hashProperties == null
                  ? 'press + button on bottom right to generate some geocomb hash properties'
                  : 'latitude: $_lat\n  longitude: $_lon\n  resolution: $_res' +
                      '\nhash properties:\n  res: ${_hashProperties.res}\n  row: ${_hashProperties.row}\n  col: ${_hashProperties.col}\n  mo: ${_hashProperties.mo.toString()}\n  rm: ${_hashProperties.rm}',
              style: Theme.of(context).textTheme.headline4,
            ),
            Text(
              _hashProperties == null ? '' : '',
              style: Theme.of(context).textTheme.headline6,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _callGeocomb,
        tooltip: 'test geocomb',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

///
///
///
///
///
///
/// old code (auto-generated)
///
///
///
///
///
///

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

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

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

// class MyApp extends StatefulWidget {
//   @override
//   _MyAppState createState() => _MyAppState();
// }

// class _MyAppState extends State<MyApp> {
//   String _platformVersion = 'Unknown';

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

//   // Platform messages are asynchronous, so we initialize in an async method.
//   Future<void> initPlatformState() async {
//     String platformVersion;
//     // Platform messages may fail, so we use a try/catch PlatformException.
//     try {
//       platformVersion = await Icosahedron.platformVersion;
//     } on PlatformException {
//       platformVersion = 'Failed to get platform version.';
//     }

//     // If the widget was removed from the tree while the asynchronous platform
//     // message was in flight, we want to discard the reply rather than calling
//     // setState to update our non-existent appearance.
//     if (!mounted) return;

//     setState(() {
//       _platformVersion = platformVersion;
//     });
//   }

//   @override
//   Widget build(BuildContext context) {
//     return MaterialApp(
//       home: Scaffold(
//         appBar: AppBar(
//           title: const Text('Plugin example app'),
//         ),
//         body: Center(
//           child: Text('Running on: $_platformVersion\n'),
//         ),
//       ),
//     );
//   }
// }
1
likes
30
pub points
0%
popularity

Publisher

verified publishershmibblez.com

geocomb but for flutter, locations storage with hexagons

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

flutter, flutter_web_plugins, js

More

Packages that depend on geocomb_flutter