我有一个ConsumerWidget
,我用它来观察供应商的状态.一切都在工作,除了TextEditingControllers
.每当我在文本字段中键入内容并单击手机键盘上的完成按钮时,文本字段又会变空.我认为这是由于该部件的状态.所以我的问题是,如何在ConsumerWidget
里面使用TextEditingController
,它没有createState
方法?
这是我的代码.提前感谢:
class MainPage extends ConsumerWidget {
const MainPage({super.key});
@override
Widget build(BuildContext context, ref) {
// provider
final roomListData = ref.watch(roomDataProvider);
final roomService = RoomService();
final roomIDController = TextEditingController();
final roomPasswordController = TextEditingController();
// UI screen size
final size = MediaQuery.of(context).size;
double deviceWidth = size.width;
double deviceHeight = size.height;
return Scaffold(
backgroundColor: bluePrimary,
body: SingleChildScrollView(
child: roomListData.when(
data: (data) {
List<RoomModelResponse> roomList =
data.map((room) => room).toList();
return SafeArea(
child: Container(
padding:
const EdgeInsets.symmetric(horizontal: 36, vertical: 16),
child: Column(
//crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
iconSize: deviceWidth * 0.09,
icon: const Icon(Icons.person_outline,
color: orangePrimary),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const DetailedProfilePage()));
},
),
IconButton(
icon: const Icon(
Icons.add,
color: orangePrimary,
),
iconSize: deviceWidth * 0.09,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const CreateRoomScreen()),
);
},
)
],
),
SizedBox(height: deviceHeight * 0.04),
Align(
alignment: Alignment.centerLeft,
child: Text("Join room",
style: TextStyle(
fontFamily: 'Chalet',
fontSize: deviceWidth * 0.05,
color: whitePrimary,
fontWeight: FontWeight.w100,
)),
),
SizedBox(height: deviceHeight * 0.008),
// room ID textField
SizedBox(
width: MediaQuery.of(context).size.width * 0.85,
child: TextField(
controller: roomIDController,
decoration: InputDecoration(
filled: true,
fillColor: whitePrimary,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide.none),
hintText: 'Enter room ID to join it',
hintStyle: const TextStyle(
color: Color.fromARGB(255, 174, 173, 173))),
),
),
SizedBox(height: deviceHeight * 0.01),
// room password textField
SizedBox(
width: MediaQuery.of(context).size.width * 0.85,
child: TextField(
obscureText: true,
controller: roomPasswordController,
decoration: InputDecoration(
filled: true,
fillColor: whitePrimary,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide.none),
hintText:
'Leave blank if the room has no password',
hintStyle: const TextStyle(
color: Color.fromARGB(255, 174, 173, 173))),
),
),
...