错误:"Trying to create a platform view of unregistered type: umair.mapbox_navigation/mapboxMapView"



我想使用mapbox_navigation包,但当我在一个新的Flutter项目中粘贴示例时,我得到了这个错误:

E/flutter (11145): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create a platform view of unregistered type: umair.mapbox_navigation/mapboxMapView
E/flutter (11145):  at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:199)
E/flutter (11145):  at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:104)
E/flutter (11145):  at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59)
E/flutter (11145):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/flutter (11145):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter (11145):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/flutter (11145):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (11145):  at android.os.MessageQueue.next(MessageQueue.java:325)
E/flutter (11145):  at android.os.Looper.loop(Looper.java:142)
E/flutter (11145):  at android.app.ActivityThread.main(ActivityThread.java:6944)
E/flutter (11145):  at java.lang.reflect.Method.invoke(Native Method)
E/flutter (11145):  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
E/flutter (11145):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
E/flutter (11145): , null, null)
E/flutter (11145): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
E/flutter (11145): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
E/flutter (11145): <asynchronous suspension>
E/flutter (11145): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
E/flutter (11145): #3      TextureAndroidViewController._sendCreateMessage (package:flutter/src/services/platform_views.dart:1039:54)
E/flutter (11145): #4      AndroidViewController.create (package:flutter/src/services/platform_views.dart:749:11)
E/flutter (11145): #5      TextureAndroidViewController.create (package:flutter/src/services/platform_views.dart:1018:34)
E/flutter (11145): #6      TextureAndroidViewController.setSize (package:flutter/src/services/platform_views.dart:1002:14)
E/flutter (11145): #7      RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:174:29)
E/flutter (11145): #8      RenderAndroidView.performResize (package:flutter/src/rendering/platform_view.dart:155:5)
E/flutter (11145): #9      RenderObject.layout (package:flutter/src/rendering/object.dart:1756:9)
E/flutter (11145): #10     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:113:14)
E/flutter (11145): #11     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #12     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:560:15)
E/flutter (11145): #13     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #14     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
E/flutter (11145): #15     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:498:7)
E/flutter (11145): #16     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:243:7)
E/flutter (11145): #17     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:402:14)
E/flutter (11145): #18     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #19     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:113:14)
E/flutter (11145): #20     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #21     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:113:14)
E/flutter (11145): #22     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1308:11)
E/flutter (11145): #23     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #24     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:113:14)
E/flutter (11145): #25     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #26     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:113:14)
E/flutter (11145): #27     RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
E/flutter (11145): #28     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:113:14)
E/flutter (11145): #29     RenderObject.layout (package:flutter/src

我的代码:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:mapbox_navigation/mapbox_navigation.dart';
void main() {
  runApp(MaterialApp(
    home: MainPage(),
  ));
}
class MainPage extends StatefulWidget {
  @override
  _MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
  MapViewController controller;
  var mapBox = MapboxNavigation();
  var isLoading = false;
  var isRouteInProgress = false;
  @override
  void initState() {
    super.initState();
    mapBox.init();
    mapBox.getMapBoxEventResults().onData((data) {
      printWrapped("Event: ${data.eventName}, Data: ${data.data}");
      var event = MapBoxEventProvider.getEventType(data.eventName);
      if (event == MapBoxEvent.route_building) {
        setState(() {
          isLoading = true;
        });
        print("Building route..");
      } else if (event == MapBoxEvent.route_build_failed) {
        setState(() {
          isLoading = false;
        });
        print("Route building failed.");
      } else if (event == MapBoxEvent.route_built) {
        setState(() {
          isLoading = false;
        });
        var routeResponse = MapBoxRouteResponse.fromJson(jsonDecode(data.data));
        controller.getFormattedDistance(routeResponse.routes.first.distance)
            .then((value) => print("Route Distance: $value"));
        controller.getFormattedDuration(routeResponse.routes.first.duration)
            .then((value) => print("Route Duration: $value"));
      } else if (event == MapBoxEvent.progress_change) {
        setState(() {
          isRouteInProgress = true;
        });
        var progressEvent = MapBoxProgressEvent.fromJson(jsonDecode(data.data));
        controller.getFormattedDistance(progressEvent.legDistanceRemaining)
            .then((value) => print("Leg Distance Remaining: $value"));
        controller.getFormattedDistance(progressEvent.distanceTraveled)
            .then((value) => print("Distance Travelled: $value"));
        controller.getFormattedDuration(progressEvent.legDurationRemaining)
            .then((value) => print("Leg Duration Remaining: $value"));
        print(
            "Instruction: ${progressEvent.currentStepInstruction},"
                "Current Direction: ${progressEvent.currentDirection}");
      } else if (event == MapBoxEvent.milestone_event) {
        var mileStoneEvent = MapBoxMileStoneEvent.fromJson(jsonDecode(data.data));
        controller.getFormattedDistance(mileStoneEvent.distanceTraveled)
            .then((value) => print("Distance Travelled: $value"));
      } else if (event == MapBoxEvent.speech_announcement) {
        var speechEvent = MapBoxEventData.fromJson(jsonDecode(data.data));
        print("Speech Text: ${speechEvent.data}");
      } else if (event == MapBoxEvent.banner_instruction) {
        var bannerEvent = MapBoxEventData.fromJson(jsonDecode(data.data));
        print("Banner Text: ${bannerEvent.data}");
      } else if (event == MapBoxEvent.navigation_cancelled) {
        setState(() {
          isRouteInProgress = false;
        });
      } else if (event == MapBoxEvent.navigation_finished) {
        setState(() {
          isRouteInProgress = false;
        });
      } else if (event == MapBoxEvent.on_arrival) {
        setState(() {
          isRouteInProgress = false;
        });
      } else if (event == MapBoxEvent.user_off_route) {
        var locationData = MapBoxLocation.fromJson(jsonDecode(data.data));
        print("User has off-routed: Location: ${locationData.toString()}");
      } else if (event == MapBoxEvent.faster_route_found) {
        var routeResponse = MapBoxRouteResponse.fromJson(jsonDecode(data.data));
        controller.getFormattedDistance(routeResponse.routes.first.distance)
            .then((value) => print("Faster route found: Route Distance: $value"));
        controller.getFormattedDuration(routeResponse.routes.first.duration)
            .then((value) => print("Faster route found: Route Duration: $value"));
      }
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('MapBox Demo'),
      ),
      body: Stack(
        children: <Widget>[
          MapBoxMapView(onMapViewCreated: _onMapViewCreated),
          !isLoading
              ? Align(
            alignment: Alignment.bottomCenter,
            child: !isRouteInProgress
                ? Column(
              children: <Widget>[
                Row(
                  mainAxisAlignment:
                  MainAxisAlignment.spaceEvenly,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    RaisedButton(
                        child: Text("Add Marker"),
                        color: Colors.blue,
                        textColor: Colors.white,
                        onPressed: () async {
                          await controller.addMarker(
                              latitude: 33.569126,
                              longitude: 73.1231471);
                          await controller.moveCameraToPosition(
                              latitude: 33.569126,
                              longitude: 73.1231471);
                        }),
                    RaisedButton(
                        child: Text("Move Camera"),
                        color: Colors.blue,
                        textColor: Colors.white,
                        onPressed: () async {
                          await controller.moveCameraToPosition(
                              latitude: 33.6392443,
                              longitude: 73.278358);
                        })
                  ],
                ),
                Row(
                  mainAxisAlignment:
                  MainAxisAlignment.spaceEvenly,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    RaisedButton(
                        child: Text("Build Route"),
                        color: Colors.blue,
                        textColor: Colors.white,
                        onPressed: () async {
                          setState(() {
                            isLoading = true;
                          });
                          print("My controller: $controller");
                          await controller.buildRoute(
                              originLat: 46.320324,
                              originLong: -0.581215,
                              destinationLat: 46.319783,
                              destinationLong: -0.584455,
                              zoom: 9.5);
                        }),
                    RaisedButton(
                        child: Text("Navigate"),
                        color: Colors.blue,
                        textColor: Colors.white,
                        onPressed: () async {
                          await controller.startNavigation(
                              shouldSimulateRoute: true);
                        }),
                    RaisedButton(
                        child: Text("Navigate Embedded"),
                        color: Colors.blue,
                        textColor: Colors.white,
                        onPressed: () async {
                          await controller
                              .startEmbeddedNavigation(
                              zoom: 18.0,
                              tilt: 90.0,
                              bearing: 50.0,
                              shouldSimulateRoute: true);
                        })
                  ],
                )
              ],
            )
                : RaisedButton(
                child: Text("Cancel Navigation"),
                color: Colors.blue,
                textColor: Colors.white,
                onPressed: () async {
                  setState(() {
                    isRouteInProgress = false;
                    isLoading = false;
                  });
                  await controller.stopNavigation();
                }),
          )
              : Align(
              alignment: Alignment.center,
              child: CircularProgressIndicator()),
        ],
      ),
    );
  }
  void _onMapViewCreated(MapViewController _controller) async {
    print("MapView is created");
    this.controller = _controller;
    await controller.showMap(MapBoxOptions(
        initialLat: 33.569126,
        initialLong: 73.1231471,
        enableRefresh: true,
        alternatives: true,
        zoom: 13.0,
        tilt: 0.0,
        bearing: 0.0,
        clientAppName: "MapBox Demo",
        voiceInstructions: true,
        bannerInstructions: true,
        continueStraight: false,
        profile: "driving-traffic",
        language: "en",
        testRoute: "",
        debug: true));
  }
  void printWrapped(String text) {
    final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
    pattern.allMatches(text).forEach((match) => print(match.group(0)));
  }
}

我的Flutter医生:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 1.22.0, on Linux, locale en_US.utf8)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Android Studio (version 4.0)
[✓] Connected device (1 available)
• No issues found!

我的pubsec.yaml依赖项:

dependencies:
  flutter:
    sdk: flutter
  mapbox_navigation: ^1.0.4

我想我只是在使用mapbox naviagtion包时错过了一步,但我没有发现其他指定使用它的内容
如果我错了,请注意
感谢阅读

我将结束这个问题,因为这对包的作者来说似乎是一个错误。我根本没有找到答案,所以我要尝试另一个包,希望它能起作用
否则我会辞职使用谷歌地图

最新更新