Future<Uint8List> getBytesFromAsset(String path, int width) async {
ByteData data = await rootBundle.load(path);
ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(),
targetWidth: width);
ui.FrameInfo fi = await codec.getNextFrame();
return (await fi.image.toByteData(format: ui.ImageByteFormat.png))!
.buffer
.asUint8List();
}
// init marker icon
final Uint8List markerIcon2 =
await getBytesFromAsset('assets/images/m1.png', 99);
final Uint8List markerIcon1 =
await getBytesFromAsset('assets/images/camion.png', 139);
teste1 = BitmapDescriptor.fromBytes(markerIcon2);
teste2 = BitmapDescriptor.fromBytes(markerIcon1);
// show marker
Marker(icon: teste1)
Marker(icon: teste2)
class _MapDataState extends State<MapData> {
List<SitesList> sl = [];
List<SnoTelSite> sts = [];
var marker = <Marker>[];
_MapDataState(){
print("map data state");
loadSites().then((sitesdata) {
print('Loaded Sites Asset JSON');
//clone sitesdata into sts array
sts..addAll(sitesdata);
sts.forEach((s) {
marker.add(
Marker(
point: new LatLng(double.parse(s.lat),double.parse(s.lng)),
builder: (ctx) => _MarkerPopUp(sitename: s.name, siteelevation: s.elevation, siteid: s.siteID,),
),
);
});
});
}
// @override
// initState() {
// print("INIT STATE");
// super.initState();
// }
//local load assets ... constants hold path snotelsitesjson
Future<String> _loadSiteAssets() async {
return await rootBundle.loadString(snotelsitesjson);
}
Future loadSites() async {
String jsonString = await _loadSiteAssets();
final jsonResponse = json.decode(jsonString);
SitesList sitesList = new SitesList.fromJson(jsonResponse);
return sitesList.sites;
}
//main build and screen layout
@override
Widget build(BuildContext context) {
print("BUILD LAYOUT");
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.cyan,
),
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
leading: Icon(Icons.ac_unit),
title: Text("SnoTel Map"),
actions: <Widget>[
IconButton(
icon: Icon(Icons.favorite),
onPressed: () {
debugPrint("Favorites");
},
),
IconButton(
icon: Icon(Icons.feedback),
onPressed: () {
debugPrint("Message sent");
},
),
],
),
body: _MapWidget()),
);
}
}
import 'dart:typed_data';
import 'dart:ui';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
class MarkerInfo extends StatefulWidget {
final Function getBitmapImage;
final String text;
MarkerInfo({Key key, this.getBitmapImage, this.text}) : super(key: key);
@override
_MarkerInfoState createState() => _MarkerInfoState();
}
class _MarkerInfoState extends State<MarkerInfo> {
final markerKey = GlobalKey();
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => getUint8List(markerKey)
.then((markerBitmap) => widget.getBitmapImage(markerBitmap)));
}
Future<Uint8List> getUint8List(GlobalKey markerKey) async {
RenderRepaintBoundary boundary =
markerKey.currentContext.findRenderObject();
var image = await boundary.toImage(pixelRatio: 2.0);
ByteData byteData = await image.toByteData(format: ImageByteFormat.png);
return byteData.buffer.asUint8List();
}
@override
Widget build(BuildContext context) {
return RepaintBoundary(
key: markerKey,
child: Container(
padding: EdgeInsets.only(bottom: 29),
child: Container(
width: 100,
height: 100,
color: Color(0xFF000000),
child: Text(
widget.text,
style: TextStyle(
color: Color(0xFFFFFFFF),
),
),
),
),
);
}
}