#flutter #dart
Вопрос:
Я вызываю класс в плагине, чтобы получить список адресов, и когда я нажимаю на один из них, я хотел бы показать его в своем TypeAheadField
плагине. Я могу сделать все, кроме фактического отображения выделенного текста в текстовом поле TypeAheadField. Вот мой код для этого
class SearchScreen extends StatefulWidget {
@override
_SearchScreenState createState() => _SearchScreenState();
}
class _SearchScreenState extends State<SearchScreen> {
TextEditingController dropOffTextEditingController = TextEditingController();
Использование виджета заголовка типа
TypeAheadField(
textFieldConfiguration: TextFieldConfiguration(
..............
onSuggestionSelected: (suggestion) {
print(suggestion);
dropOffTextEditingController.text =
suggestion;
}),
Теперь класс в плагине, из которого берется список для заголовка типа
import 'geo_point.dart';
class Address {
final String? postcode;
final String? name;
final String? street;
final String? city;
final String? state;
final String? country;
Address({
this.postcode,
this.street,
this.city,
this.name,
this.state,
this.country,
});
Address.fromPhotonAPI(Map data)
: this.postcode = data["postcode"],
this.name = data["name"],
this.street = data["street"],
this.city = data["city"],
this.state = data["state"],
this.country = data["country"];
@override
String toString() {
String addr = "";
if (name != null amp;amp; name!.isNotEmpty) {
addr = addr "$name,";
}
if (street != null amp;amp; street!.isNotEmpty) {
addr = addr "$street,";
}
if (postcode != null amp;amp; postcode!.isNotEmpty) {
addr = addr "$postcode,";
}
if (city != null amp;amp; city!.isNotEmpty) {
addr = addr "$city,";
}
if (state != null amp;amp; state!.isNotEmpty) {
addr = addr "$state,";
}
if (country != null amp;amp; country!.isNotEmpty) {
addr = addr "$country";
}
return addr;
}
}
class SearchInfo {
final GeoPoint? point;
final Address? address;
SearchInfo({
this.point,
this.address,
});
SearchInfo.fromPhotonAPI(Map data)
: this.point = GeoPoint(
latitude: data["geometry"]["coordinates"][1],
longitude: data["geometry"]["coordinates"][0]),
this.address = Address.fromPhotonAPI(data["properties"]);
}
Ошибка на консоли
════════ Exception caught by gesture ═══════════════════════════════════════════
The following _TypeError was thrown while handling a gesture:
type 'SearchInfo' is not a subtype of type 'String'
Как я могу редактировать свой код, не затрагивая плагин?
Ответ №1:
ошибка исходит из этой строки
dropOffTextEditingController.text =
suggestion;
Вот что нам нужно сделать :
dropOffTextEditingController.text =
(suggestion as SearchInfo)
.address
.name;
Комментарии:
1. Вот дерьмо! Не могли бы вы также объяснить причину? Я знаю, что пытаюсь получить доступ к классу напрямую в виде строки, что не имело смысла..
2. Да, действительно, вы пытаетесь присвоить значение объекта непосредственно строковому типу, следовательно, возникает ошибка, из-за которой вы говорите, что тип SearchInfo не является подтипом строкового типа ….. Что не следует упускать из виду, так это тот факт, что свойство text TextEditingController является строкой, поэтому вы не можете назначить его объекту SearchInfo.