我正在使用一些初始值的TextField。但是,当我想在该初始值之后添加更多文本(如“ append”)时,却总是第一次输入“空格”时,TextField将被清空。为什么会这样?
另一种烦人的事情是,为什么第一次点击TextField时,光标总是一直移到左侧而不是初始值之后?
var textEditingController = TextEditingController();
textEditingController.text = 'some_initial_values';
TextField(
decoration: InputDecoration(
),
controller: textEditingController,
)
编辑: 我通过ListView.Builder从StreamBuilder获得了初始值,而不是静态文本。
答案 0 :(得分:0)
查看TextField
的源代码,可能会最好地回答这个问题。
if (widget.decoration != null) {
child = AnimatedBuilder(
animation: Listenable.merge(<Listenable>[ focusNode, controller ]),
builder: (BuildContext context, Widget child) {
return InputDecorator(
decoration: _getEffectiveDecoration(),
baseStyle: widget.style,
textAlign: widget.textAlign,
isFocused: focusNode.hasFocus,
isEmpty: controller.value.text.isEmpty,
child: child,
);
},
child: child,
);
}
InputDecorator
类具有一个textAlign
和一个isEmpty
属性,我认为这会导致您所引用的行为。省略装饰:默认行为是您想要的行为。
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
var textEditingController = TextEditingController();
textEditingController.text = 'some_initial_values';
return new MaterialApp(
title: 'Transition Animation Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: Center(
child: TextField(
controller: textEditingController,
),
),
),
);
}
}