edit_map 0.0.3 copy "edit_map: ^0.0.3" to clipboard
edit_map: ^0.0.3 copied to clipboard

The map which allows your users to interact with 2D objects.

example/lib/main.dart

import 'dart:io';

import 'package:dio/dio.dart';
import 'package:edit_map/edit_map.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future<File> _loadImage() async {
    Response response = await Dio().get(
      'https://firebasestorage.googleapis.com/v0/b/workplacer-1deda.appspot.com/o/data%2Fuser%2F0%2Fhash.apps.workplacer%2Fcache%2Fimage_picker4792814428577454194.png?alt=media&token=aca939cc-28fa-4f9e-abfb-be3bd3e2a933',
      options: Options(responseType: ResponseType.bytes),
    );
    final tempDirectory = await getTemporaryDirectory();
    final file = File('${tempDirectory.path}/office-plan.jgp');
    final raf = file.openSync(mode: FileMode.write);
    raf.writeFromSync(response.data);
    await raf.close();
    return Future.value(file);
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _loadImage(),
      builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
        if (snapshot.data != null && snapshot.hasData) {
          return _MyHomeView(mapImageFile: snapshot.data!);
        }
        return const Center(
          child: CircularProgressIndicator(
              // valueColor: AlwaysStoppedAnimation<Color>(),
              ),
        );
      },
    );
  }
}

class _MyHomeView extends StatefulWidget {
  const _MyHomeView({Key? key, required this.mapImageFile}) : super(key: key);

  final File mapImageFile;

  @override
  State<_MyHomeView> createState() => _MyHomeViewState();
}

class _MyHomeViewState extends State<_MyHomeView> {
  bool isDraggableDeskShown = false;
  List<DeskPayload> desks = [];
  DeskPayload? lastModifiedObject;

  int index = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: lastModifiedObject != null
            ? Slider.adaptive(
                value: lastModifiedObject!.area.rotation / 1500,
                activeColor: Colors.black,
                onChanged: (double value) {
                  // TODO fix tapping after rotation
                  final angle = double.parse(value.toStringAsFixed(2)) * 1500;
                  if (angle != lastModifiedObject!.area.rotation) {
                    lastModifiedObject =
                        lastModifiedObject!.copyWith(rotation: angle);
                    setState(() {});
                  }
                },
                max: 0.24,
              )
            : null,
        actions: [
          InkWell(
            onTap: () {
              if (lastModifiedObject != null) {
                desks = desks.toList()..add(lastModifiedObject!);
                lastModifiedObject = null;
                setState(() {});
              }
            },
            child: const Center(
              child: Text('Save'),
            ),
          ),
          InkWell(
            onTap: () {
              lastModifiedObject =
                  DeskPayload(deskParams: DeskParams(id: (index++).toString()));
              setState(() {});
            },
            child: const AspectRatio(
              aspectRatio: 1,
              child: Center(
                child: Text(
                  '+',
                  style: TextStyle(color: Colors.white, fontSize: 34),
                ),
              ),
            ),
          )
        ],
      ),
      body: SizedBox.expand(
        child: EditMap(
          isEditMode: true,
          mapImage: widget.mapImageFile,
          deskParamsList: desks,
          selectedDesk: lastModifiedObject,
          onDeskMoved: (Offset deskPosition) {
            if (kDebugMode) {
              print(
                  '---desk moved---\nx:${deskPosition.dx}\ny:${deskPosition.dy}');
            }
            WidgetsBinding.instance.addPostFrameCallback((_) async {
              setState(() {
                lastModifiedObject =
                    lastModifiedObject?.copyWith(position: deskPosition);
              });
            });
          },
        ),
      ),
    );
  }
}
3
likes
160
pub points
0%
popularity

Publisher

unverified uploader

The map which allows your users to interact with 2D objects.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

equatable, flutter

More

Packages that depend on edit_map