#flutter
Вопрос:
Я получаю ошибку с новыми изменениями флаттера на нулевой безопасности. Не уверен, должен ли я добавить окончательный/поздний/! в этом кодексе.
У меня есть код для подключения к картам Google, и теперь я хочу иметь возможность хранить собранные данные.
Прямо сейчас я столкнулся с ошибкой в блоке приложений: Non-nullable field 'currentLocation' must be initialized.
import 'package:flutter/material.dart';
import 'package:hawkepedia/services/geolocator_Services.dart';
import 'package:geolocator/geolocator.dart';
class ApplicationBloc with ChangeNotifier {
final geoLocatorService = GeolocatorService();
//Variables
Position currentLocation;
//fire function when the app starts
ApplicationBloc(){
setCurrentLocation();
}
//gets current location
setCurrentLocation() async {
currentLocation = await geoLocatorService.getCurrentLocation();
notifyListeners();
}
}
Ответ №1:
Как указано в сообщении об ошибке, полем, вызывающим проблему, является currentLocation.
Ты можешь:
- установите его как
late
значение, означающее, что вы инициализируете его, например, во время initState. - установите для него значение null, не уверен, что это возможно в данном случае
Position? currentLocation
. (Но это для основных типов) - Инициализируйте его нейтральным значением, которое, как вы знаете, еще не инициализировано
Редактировать:
import 'package:flutter/material.dart';
import 'package:hawkepedia/services/geolocator_Services.dart';
import 'package:geolocator/geolocator.dart';
class ApplicationBloc with ChangeNotifier {
final geoLocatorService = GeolocatorService();
//Variables
late Position currentLocation;
//fire function when the app starts
ApplicationBloc(){
setCurrentLocation();
}
//gets current location
setCurrentLocation() async {
currentLocation = await geoLocatorService.getCurrentLocation();
notifyListeners();
}
}
Комментарии:
1. Привет @Wapazz, я попытался изменить свой код на приведенный ниже, но он все равно выдает ошибку. Как мне инициализировать его в initState? setCurrentLocation() асинхронно { позднее текущее местоположение = ожидание геоЛокаторСервиса.getCurrentLocation(); Уведомители(); } }
2. это был общий ответ, у вас нет состояния инициализации за пределами виджета
3. вы должны указать ключевое слово late в объявлении переменной, в верхней части вашего класса, а не внутри вашей функции
4. Так что это работает, если у вас больше нет ошибки, не так ли ? 🙂 Это просто еще одна проблема в вашем коде. Может быть, создать еще один с подробностями кода, в котором он загружает данные и т. Д.
5. Привет @Wapazz, я пробовал ваш метод, но он все равно не работает. Я также попытался изменить свой код на «Позиция? Текущее местоположение». Однако, поскольку у меня есть команда Futures на другой странице dart под названием «Будущая асинхронная<Позиция> getCurrentLocation ()», мой код просто продолжает загружаться, а консоль отладки указывает «<Позиция><асинхронная приостановка>»