遷移元画面から文字列を受け取り、TextField(controller)の初期値にしたい

Flutterで趣味のアプリ開発をしている初心者プログラマです。

遷移元画面からModalRoute.of(context)?.settings.argumentsを使ってStringを受け取り、
これをTextFieldの初期値にしたいです。

TextFieldの値は、遷移先画面で任意に変更してその後の処理に用いるため、Controllerを使っています。

貼り付けたコードだと、
Build関数の中で受け取り・反映させているため当たり前ですが、
遷移先画面での変更を受付けなくなってしまいます(Buildが走る度に初期化されてしまう)。

そこで、この2行の処理を
String menuName = ModalRoute.of(context)?.settings.arguments as String;
menuNameController.text = menuName;

_modRecipeState(){} の中(Stateのイニシャライザ?)や、
initState(){}を用意しその中に入れてみたのですが、エラーでビルドできません。

つぎはぎの知識でここまでやってきており、
contextやstateのことはしっかり理解できていないことを自覚していますが、
どういったところの考え方が間違っているか、ご指摘いただけると幸いです。

また、やりたいこと(TextFieldに初期値を受け取り、変更可能にする)のためにはどのような方法があるでしょうか。

Dart/Flutter

import 'package:flutter/material.dart';import 'package:flutter/widgets.dart';import './main.dart'; class ModRecipe extends StatefulWidget { const ModRecipe({Key? key}) : super(key: key); State<ModRecipe> createState() => _modRecipeState();} class _modRecipeState extends State<ModRecipe> { _modRecipeState(){ } var menuNameController = TextEditingController(); String modRecipeName = ""; Widget build(BuildContext context) { String menuName = ModalRoute.of(context)?.settings.arguments as String; menuNameController.text = menuName; return Scaffold( body: Center( child: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container(width: 220,height: 60, child: TextField( controller: menuNameController, onChanged: (text){ setState(() { modRecipeName=text; }); }, ), ), ], ), ), ), ); }}

コメントを投稿

0 コメント