mapsforge_flutter
mapsforge_flutter copied to clipboard
Map is not loading
I have the following piece of code:
class Hbg extends StatelessWidget {
const Hbh({super.key});
Future<MapContext> _initialize(BuildContext ctx, Widget child) async {
final map = await MapFile.using(
(await DefaultAssetBundle.of(ctx).load("assets/map/mo.map"))
.buffer
.asUint8List(),
null,
null);
// Create the cache for assets
final symbolCache = FileSymbolCache();
final DisplayModel displayModel = DisplayModel(fontScaleFactor: 0.5);
// Create the render theme which specifies how to render the informations
// from the mapfile.
final renderTheme = await RenderThemeBuilder.create(
displayModel,
'assets/map/mapstyles/Elevate.xml',
);
// Create the Renderer
final jobRenderer =
MapDataStoreRenderer(map, renderTheme, symbolCache, true);
var bitmapCache =
await FileTileBitmapCache.create(jobRenderer.getRenderKey());
bitmapCache.purgeAll();
var viewModel = ViewModel(
displayModel: displayModel,
contextMenuBuilder: null // Remove default ContextMenuBuilder
);
viewModel.setZoomLevel(19);
var context = MapContext(
map: map,
jobRenderer: jobRenderer,
symbolCache: symbolCache,
bitmapCache: bitmapCache,
displayModel: displayModel,
viewModel: viewModel,
child: child);
return context;
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FutureBuilder<MapContext>(
future: _initialize(
context, const MapPage()), // The future that loads your map data
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
// This shows a loading view while data is still being fetched/initialized
return const LoadingView();
} else if (snapshot.hasError) {
// Handles any errors that occur during fetching/initializing
return Scaffold(
body: Center(
child: Text('Error loading map data: ${snapshot.error}'),
),
);
} else if (snapshot.hasData) {
// Once the data is successfully loaded, the map data is available
return snapshot
.requireData; // Directly using the loaded MapContext data
} else {
// Handles the case where no data is returned but also no error (unlikely but safe to handle)
return Scaffold(
body: Center(
child: Text('No data available.'),
),
);
}
},
),
routes: {
'/mapHome': (ctx) => const MapPage(),
//'/hutDetail': (ctx) => const HutDetails(hutData: null,),
//'/3': (ctx) => Widget3(),
},
);
}
}
and I want to populate my MapContext which looks like that:
import 'package:flutter/material.dart';
import 'package:hbg/app/services/gps/gps_service.dart';
import 'package:mapsforge_flutter/core.dart';
import 'package:mapsforge_flutter/datastore.dart';
import 'package:mapsforge_flutter/maps.dart';
class MapContext extends InheritedWidget {
MapContext({
super.key,
required child,
required this.map,
required this.jobRenderer,
required this.symbolCache,
required this.bitmapCache,
required this.displayModel,
required this.viewModel,
}) : super(child: child);
final MapDataStore map;
final JobRenderer jobRenderer;
final SymbolCache symbolCache;
final FileTileBitmapCache bitmapCache;
final DisplayModel displayModel;
final ViewModel viewModel;
final GpsService gpsService = GpsService();
static MapContext of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<MapContext>()!;
}
@override
bool updateShouldNotify(MapContext oldWidget) {
return false;
}
}
The problem is my map file is null once I try to load it (the asset exists 100% and its defined in pubspec.yaml). The error that I am getting is:
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building MapPage(dirty, dependencies: [MapContext], state:
_MapPageState#36d6f(ticker inactive)):
'package:mapsforge_flutter/src/mapfile/mapfileheader.dart': Failed assertion: line 51 pos 12:
'mapFileInfo != null': is not true.
The relevant error-causing widget was:
MapPage MapPage:file:///Users/zhivkovasilev/Development/hbg/hbgapp/lib/main.dart:104:28
When the exception was thrown, this was the stack:
#2 MapFileHeader.getMapFileInfo (package:mapsforge_flutter/src/mapfile/mapfileheader.dart:51:12)
#3 MapFile.getMapFileInfo (package:mapsforge_flutter/src/mapfile/mapfile.dart:167:32)
#4 MapFile.startPosition (package:mapsforge_flutter/src/mapfile/mapfile.dart:570:17)
#5 _MapPageState.build (package:hbg/features/map/views/map_home.dart:296:32)
#6 StatefulElement.build (package:flutter/src/widgets/framework.dart:5592:27)
#7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5480:15)
#8 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#9 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#10 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462:5)
#11 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5634:11)
#12 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456:5)
... Normal element mounting (7 frames)
#19 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335:16)
#20 Element.updateChild (package:flutter/src/widgets/framework.dart:3840:20)
#21 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505:16)
#22 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643:11)
#23 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#24 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2904:19)
#25 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:989:21)
#26 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:5)
#27 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:15)
#28 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:9)
#29 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169:5)
#30 _invoke (dart:ui/hooks.dart:312:13)
#31 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:5)
#32 _drawFrame (dart:ui/hooks.dart:283:31)
(elided 2 frames from class _AssertionError)
Any idea what I might be missing here? The map file is around 930MB