У меня проблема с флаттером текстового поля. Мне нужно получить город или почтовый индекс, чтобы перенаправить пользователя на другую страницу. Но похоже, что я сохраняю старое значение, даже если текст внутри текстового поля изменяется. Я пытался очистить его, поставить условия, но не понимаю, почему текст не сохраняет текущее значение. Вот код:
Проверить, если это Париж, для района
@override
void initState() {
editingController.addListener((){
setState(() {
if(editingController.text.isEmpty) {
editingController.clear();
isParis = false;
}
});
});
super.initState();
}
Кнопка, которая перенаправляет, метод getPcFromQuery (это метод asyn c) извлекает данные, относящиеся к названию города .
RaisedButton(
onPressed: (){
print(editingController.text);
getPCFromQuery(editingController.text)
.then((town) {city = town.featureName; postalCode = town.postalCode;});
setState(() {
if(city.toString().toLowerCase() == "paris")
isParis = true;
else
isParis = false;
});
print("postalCode : $postalCode");
postalCode != null && city.toString().toLowerCase() != "paris"?
Navigator.of(context).push(MaterialPageRoute(builder: (context) => PreferencesPage(postalCode: postalCode))) :
Container(child: Text(""));
})
Но когда я нажимаю следующую кнопку (мне нужно щелкнуть по ней два раза, чтобы она заработала) и когда я изменяю значение в текстовом поле, оно сохраняет ранее введенное значение.
Вы знаете, откуда это может появиться?
Это построено TextField:
class SearchBar extends StatelessWidget {
const SearchBar({
Key key,
@required this.editingController,
}) : super(key: key) ;
final TextEditingController editingController;
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.grey.withOpacity(0.1),
borderRadius: BorderRadius.circular(10.0)),
child: TextField(
controller: editingController,
decoration: InputDecoration(
hintText: AppStrings.searchTown,
hintStyle: GoogleFonts.notoSans(fontSize: 14.0),
border: InputBorder.none,
fillColor: Colors.grey.withOpacity(0.5),
prefixIcon: Icon(Icons.search, color: Colors.grey)
),
)
);
}
}
И метод _getPcFromQuery:
_getPCFromQuery(String city) async {
var addresses = await Geocoder.local.findAddressesFromQuery(city);
var first = addresses.first;
print(first.featureName);
print(first.addressLine);
return first;
}
Странная вещь когда я пробую первый раз, печать внутри метода _getPcFromQuery получает текст, но печать "print (" postalCode: $ postalCode ");" на кнопке метода onPressed имеет значение null.