Метод был вызван по пустому случаю. Случайный - PullRequest
0 голосов
/ 26 апреля 2020

Показать коды ниже:

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: {
        "list_page": (context) => PoiList(),
        "distance_page": (context) => Distance()
      },
      home: HomePage()
    );
  }
}

class HomePage extends StatelessWidget{
  AMapController _aMapController;

  BuildContext _buildContext;

  double _clickedLat;
  double _clickedLng;


  void onAMapCreated(AMapController controller) {
    _aMapController = controller;
  }

  void onPoiNaviButtonClicked(double lat, double lng) async{
    print(lat);
    print(lng);

    _clickedLat = lat;
    _clickedLng = lng;

    caculate(lat, lng);
  }

  void caculate(double lat, double lng) async{
    if (_aMapController == null){
      print("_aMapController == null");
    }
    _aMapController.caculteDistanceBetweenTwoPois({"lat":lat, "lng":lng}); //This is the error codes.
  }


  void onDidCaculateDistance(int distance){
    Navigator.of(_buildContext).pushNamed("distance_page", arguments: {"distance":distance, "poi":{"lat": _clickedLat,"lng":_clickedLng}});
  }


  List<Map<String, double>> pois = [
    {'lng': 119.932382, 'lat': 31.615883},
    {'lng': 119.934098, 'lat': 31.619684},
    {'lng': 119.946801, 'lat': 31.608574},
    {'lng': 119.957788, 'lat': 31.589859},
    {'lng': 119.949548, 'lat': 31.628162}
  ];

  @override
  Widget build(BuildContext context) {
    print("Widget build");
    _buildContext = context;
    // TODO: implement build
    return Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Stack(
          fit: StackFit.expand, //未定位的widget占满stack
          children: <Widget>[
            AMap(onAMapCreated: onAMapCreated, onPoiNaviButtonClicked: onPoiNaviButtonClicked, onDidCaculateDistance:onDidCaculateDistance),
            Positioned(
                child: RaisedButton(
                  color: Colors.orange,
                  onPressed: () {
                    print("定位");
                  },
                  child: Text("定位"),
                ),
                right: 20,
                bottom: 60),
            Positioned(
                child: RaisedButton(
                    color: Colors.orange,
                    onPressed: () {
                      print("缩小");
                      _aMapController == null
                          ? null
                          : _aMapController.setZoomLevel(6);
                    },
                    child: Text("缩小")),
                right: 20,
                bottom: 120),
            Positioned(
                child: RaisedButton(
                    color: Colors.orange,
                    onPressed: () {
                      print("放大");
                      _aMapController == null
                          ? null
                          : _aMapController.setZoomLevel(10);
                    },
                    child: Text("放大")),
                right: 20,
                bottom: 180),
            Positioned(
                child: RaisedButton(
                    color: Colors.orange,
                    onPressed: () {
                      print("搜索");
                      //Flutter中准备poi点经纬度坐标数组,在原生地图上显示

                      _aMapController == null ? null : _aMapController.showNearByChargingStation(pois);
                    },
                    child: Text("搜索")),
                right: 20,
                bottom: 240),
            Positioned(
                child: RaisedButton(
                    color: Colors.orange,
                    onPressed: () {
//                      jump(pois, distance)
                      print("跳转");
//                      Navigator.of(context).pushNamed("list_page", arguments: {'pois': pois, 'mapController':_aMapController});
                    },
                    child: Text("跳转")),
                right: 20,
                bottom: 300),
          ],
        ));
  }

}

В HomePage (StatelessWidget) я определяю переменную: AMapController _aMapController; В функции сборки я создал виджет AMap (это iOS native mapView). Когда AMap создан. Будет вызван обратный вызов, указанный ниже, и будет инициализирована переменная _aMapController.

  void onAMapCreated(AMapController controller) {
    _aMapController = controller;
  }

Функция onPoiNaviButtonClicked () - это еще один обратный вызов, инициируемый собственным кодом ios. в функции onPoiNaviButtonClicked () я вызываю функцию caculate (). в функции caculate (). _AMapController иногда будет нулевым! Это очень странно. Это не происходит каждый раз! Это иногда случается? Почему!

И кажется, что вы переходите на вторую страницу (расстояние ()), а затем возвращаетесь на домашнюю страницу, иногда это случается!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...