Flutter Maps в реальном времени терпит крах, потому что живое местоположение - это не Future <dynamic>. Как это исправить? - PullRequest
0 голосов
/ 01 апреля 2019

Я начал работать над проектом флаттера, где я должен использовать карты Google и местоположение людей в реальном времени, чтобы доставить их в определенное место.Я получил карты Google на экране, но когда я начал добавлять местоположение в реальном времени, он вылетает.У меня также есть экран со стандартным местоположением, но, так как в реальном времени происходит сбой местоположения, этот экран вылетает / закрывает все приложение.

На экране местоположения в реальном времени я теперь получаю красный экран: «Будущее не является подтипом типа« CameraPosition ».У меня также есть эта ошибка в коде Visualstudio: Невозможно открыть 'libobject_patch.dart': Невозможно прочитать свойство 'create' из неопределенного.

Я использую карты Google и зависимости от местоположения.

Я пытался с помощью try on, но он получает местоположение (проверяется с помощью точек останова), но затем не возвращает правильные данные (возвращается как будущее)

Это код, который я использую вклассы.Это немного грязно, это мой первый флаттер-проект.

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';


//deze functie werkt, hij vindt de locatie als al is toegestaan
//ook wordt er gevraagd om de locatie als deze nog niet is gegeven
//daarna pas de error
  GoogleMapController myController;
  Location location = new Location();
  _animateToUser() async{
    location.onLocationChanged();
    try{
      LocationData pos = await location.getLocation();
        myController.animateCamera(CameraUpdate.newCameraPosition(
          CameraPosition(
            target: LatLng(pos.latitude, pos.longitude),
            zoom: 12.0,
          )
        )
      );
    }
    on Exception{
      final CameraPosition pos = CameraPosition(
      target: LatLng(52.0575, 4.49306),
      zoom: 12.0,
      );
    }
  }

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
    GoogleMapController myController;
    Location location = new Location();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
      title: new Text("P-App"),
      ),
      backgroundColor: Colors.lightBlueAccent,
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ButtonTheme(
              minWidth: 200.0,
              height: 10.0,
              child: RaisedButton(
                  onPressed: (){
                    _animateToUser();                    
                    Navigator.push(context,
                    MaterialPageRoute(builder: (context) => VindLocatie()),
                    );
                  //invoeren naar de pagina met maps waar gebruiker om locatie wordt gevraagd
                  },
                  elevation: 5.0,
                  textColor: Colors.blue,
                  color: Colors.white,
                  padding: const EdgeInsets.all(8.0),
                  child: new Text(
                    "Zoek met uw locatie",
                  ),
            ),
            ),
            ButtonTheme(
              minWidth: 200.0,
              height: 10.0,
              child: RaisedButton(
                onPressed: (){
                  Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => EigenLocatie()),
                  );
                },
                elevation: 5.0,
                textColor: Colors.blue,
                color: Colors.white,
                padding: const EdgeInsets.all(8.0),
                  child: new Text(
                    "Zoek met opgegeven locatie",
                  ),
            ),
            ),
          ],
        )
        )
    );
  }
}

class VindLocatie extends StatelessWidget{

  GoogleMapController myController;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("P-App"),
      ),
      body: Column(
        children: <Widget>[
          Container(
            height: 350.0, //Manier vinden om voor de helft te zetten ( misschien met percentages ofzo)
            width: MediaQuery.of(context).size.width,
            child:GoogleMap(
              mapType: MapType.hybrid,
              initialCameraPosition: _animateToUser(),
              onMapCreated: (GoogleMapController controller) {
                myController = controller;
              },
            ),
          ),
        ],
    ),
    );
  }
}

Я ожидаю реального местоположения пользователя.Фактический результат - это красный экран с будущим, а не подтипом CameraPosition.

...