简单的添加地点小部件
我认为将一个控制器连接到TextField会自动保存输入值的状态。但是,从我的示例中,如果我输入文本时未单击“完成”,然后立即单击“拍摄照片”按钮。从摄像机操作返回后,将清除TextField输入值。
如何重现问题:
示例代码:
AddPlacePage StatefulWidget
Column(
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: _titleController,
),
ImageInput(),
],
),
ImageInput StatefulWidget
class _ImageInputState extends State<ImageInput> {
File _storedImage;
Future<void> _takePicture() async {
final imageFile = await ImagePicker.pickImage(
source: ImageSource.camera,
maxWidth: 600,
);
setState(() {
_storedImage = imageFile;
});
...
}
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
...
child: _storedImage != null
? Image.file(
_storedImage,
fit: BoxFit.cover,
width: double.infinity,
)
: Text(
'No Image Taken',
textAlign: TextAlign.center,
),
alignment: Alignment.center,
),
Expanded(
child: FlatButton.icon(
icon: Icon(Icons.camera),
label: Text('Take Picture'),
textColor: Theme.of(context).primaryColor,
onPressed: () => _takePicture(),
),
),
],
);
}
}
问题:
即使退出应用程序访问设备摄像头后,如何修改TextField的控制器以保留输入值?
TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: _titleController,
),
我确实尝试创建一个局部变量并尝试使用onChange:
String _inputValue
build(BuildContext context){
...
TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: _titleController,
onChange: (value) => _inputValue = value;
),
但是,从Flutter重新调出页面后,从相机返回的效果是相同的,_inputValue
和_titleController.text均被清除。
答案 0 :(得分:0)
您可以使用share preferences将字符串保存到设备,然后在返回文本字段时调用它。这就是我的实现方式:
class LocalStorage {
static SharedPreferences instance;
static Future init() async {
instance = await SharedPreferences.getInstance();
}
static dynamic getValue(String key, dynamic emptyValue) {
if (LocalStorage.instance.containsKey(key)) {
return LocalStorage.instance.get(key);
}
return emptyValue;
}
}
将其设置为文本字段:
TextEditingController _usernameController =
new TextEditingController(text: LocalStorage.getValue('UserName', ''));