`我正在使用 Riverpod 制作一个 flutter 应用程序。我在注册页面中使用country_state_city_pro.dart。
TextEditingController countryCont = TextEditingController();
TextEditingController stateCont = TextEditingController();
TextEditingController cityCont = TextEditingController();
// Define CountryStateCityPicker widget
CountryStateCityPicker(
country: countryCont,
state: stateCont,
city: cityCont,
dialogColor: const Color.fromARGB(255, 255, 255, 255),
textFieldDecoration: InputDecoration(
fillColor: Color.fromARGB(255, 255, 255, 255),
filled: true,
suffixIcon: const Icon(Icons.arrow_downward_rounded),
border: OutlineInputBorder(borderSide: BorderSide.none),
),
onChanged: (country, state, city) {
// Accept the value entered by the user and debug print it
print('Country: $country, State: $state, City: $city');
// Set the state of the UI and rebuild the widget
setState(() {
countryCont.text = country ?? '';
stateCont.text = state ?? '';
cityCont.text = city ?? '';
});
},
),
问题: 我想根据用户的选择存储小部件的状态并重建小部件以反映用户的选择
我尝试使用 onChanged() 函数,但它给出了一个错误: 未定义名称“onChanged”。 尝试将名称更正为已定义的名称,或定义名称。`您的文本``
CountryStateCityPicker
小部件不提供onChanged
参数,但您可以将自己的侦听器添加到控制器:
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
TextEditingController countryCont = TextEditingController();
TextEditingController stateCont = TextEditingController();
TextEditingController cityCont = TextEditingController();
// Define your own `onChanged` method
void onChanged() {
final country = countryCont.text;
final state = stateCont.text;
final city = cityCont.text;
// Do something with the values
}
@override
void initState() {
super.initState();
// Register `onChanged` as the listener for every controller
countryCont.addListener(onChanged);
stateCont.addListener(onChanged);
cityCont.addListener(onChanged);
}
@override
void dispose() {
// Don't forget to remove the listeners and dispose of the controllers
countryCont
..removeListener(onChanged)
..dispose();
stateCont
..removeListener(onChanged)
..dispose();
cityCont
..removeListener(onChanged)
..dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return CountryStateCityPicker(
// ...
);
}
}
通过这种方法,您还可以灵活地让每个控制器都有自己的侦听器,例如
onCountryChanged
等。