【发布时间】:2019-01-02 05:44:05
【问题描述】:
我在我的应用程序中使用全屏对话框将用户输入值输入到文本字段中。其中一些值是字符串,一些是整数。所以我想相应地更改键盘以使不必要的键消失。这是我的实现:
import 'package:flutter/material.dart';
import 'package:meal_tracker/model/food_model.dart';
class AddFoodDialog extends StatelessWidget {
TextEditingController nameController = TextEditingController(),
carbsController = TextEditingController(),
fatController = TextEditingController(),
proteinController = TextEditingController(),
amountController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Add Food"),
actions: <Widget>[
FlatButton(
child: Text(
"SAVE",
style: TextStyle(color: Colors.white),
),
onPressed: () {
_handleSave(context);
},
)
],
),
body: Form(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: "Name"),
controller: nameController,
),
TextFormField(
decoration: InputDecoration(labelText: "Carbs per 100g"),
controller: carbsController,
keyboardType: TextInputType.number,
),
TextFormField(
decoration: InputDecoration(labelText: "Fat per 100g"),
controller: fatController,
keyboardType: TextInputType.number,
),
TextFormField(
decoration: InputDecoration(labelText: "Protein per 100g"),
controller: proteinController,
keyboardType: TextInputType.number,
),
TextFormField(
decoration: InputDecoration(labelText: "Amount in g"),
controller: amountController,
keyboardType: TextInputType.number,
),
],
),
)),
);
}
void _handleSave(BuildContext context) {
print("Dialog text: " + nameController.text);
Navigator.of(context).pop(Food(
name: nameController.text,
carbsPer100g: double.parse(carbsController.text),
fatPer100g: double.parse(fatController.text),
proteinPer100g: double.parse(proteinController.text),
amount: double.parse(amountController.text)));
}
}
问题是,当我在“名称”文本字段中输入一些内容时,该文本字段具有 TextInputType.text,然后点击另一个文本字段,其中具有 TextInputType.number,“名称”字段会无缘无故地清除.反过来也一样。
【问题讨论】:
-
您需要创建一个 StatefulWidget 并将您的控制器放在 State 上。将可变字段添加到 StatelessWidget 将不起作用
-
你有什么方法可以避免大量的 TextEditingControllers 吗?