TextFormFieldのonChangedにクラス引数としてメソッドを渡す方法
コード
class _TextForm extends StatelessWidget {
const _TextForm({
required this.textEditingController,
required this.onChanged,
});
final TextEditingController textEditingController;
final void Function(String text) onChanged; //👈ここ
@override
Widget build(BuildContext context) {
return TextFormField(
controller: textEditingController,
onChanged: onChanged, //👈ここ
);
}
}
呼び出し側
_TextForm(
textEditingController: textEditingController,
onChanged: (text) =>
ref.read(_textProvider.notifier).state = text, //👈ここ
),
コード全文
final _textProvider = StateProvider.autoDispose((ref) => '');
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
appBar: MyAppBar(title: 'Home'),
body: _Body(),
);
}
}
class _Body extends HookConsumerWidget {
const _Body();
@override
Widget build(BuildContext context, WidgetRef ref) {
final textEditingController = useTextEditingController();
return Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_TextForm(
textEditingController: textEditingController,
onChanged: (text) =>
ref.read(_textProvider.notifier).state = text,
),
],
),
),
);
}
}
class _TextForm extends StatelessWidget {
const _TextForm({
required this.textEditingController,
required this.onChanged,
});
final TextEditingController textEditingController;
final void Function(String text) onChanged;
@override
Widget build(BuildContext context) {
return TextFormField(
controller: textEditingController,
onChanged: onChanged,
);
}
}
関連記事
この記事が気に入ったらサポートをしてみませんか?