我有这个 flutter 应用程序,我尝试使用 ascii 代码和所有这些东西。 事实证明,我正在使用颤振,并且我尝试在文本字段聚焦时更改文本,直到我失去焦点或更改屏幕然后再次返回之前它什么都不做。
我有这个文本字段,它每次我点击这些按钮之一时都会改变(见图片和 gif 链接),但是当文本字段聚焦时,变化没有得到应用。而如果我设置或按下按钮,则没有焦点的文本会发生变化。
这里使用的状态是 Getx。
class SymbolsPage extends StatelessWidget {
final hc = Get.put(HomeController());
final TextEditingController nameController = TextEditingController();
Logger logger = Logger();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.yellow[800],
appBar: AppBar(
title: Text('name'),
backgroundColor: appThemeData.primaryColor,
),
body: GetBuilder<HomeController>(
builder: (_) => Column(
children: [
Container(
margin: EdgeInsets.only(top: 30, left: 18, right: 18),
child: CustomSearchText(
text: hc.nickName,
enable: true,
callback: () {
// HERE IS WHERE IT CHANGES when a text in gridview is pressed
nameController.text = hc.nickName;
// TODO: Fix bug when generating new nickname and does not change in textbox if focus is on
},
controller: nameController,
callback2: (text) {
TextSelection previousSelection = nameController.selection;
// HERE IS WHERE it should change(this is a callback for onchanged function
nameController.selection = previousSelection;
logger.v("${nameController.selection.start}");
_.changeNickName(text);
},
),
),
//TODO: Use svg icon
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.restore_sharp),
onPressed: () => hc.generateRandomNickName(),
),
IconButton(
icon: Icon(Icons.share_rounded),
onPressed: () => hc
.generateRandomNickName(), //TODO: Add share nickname feature
),
IconButton(
icon: Icon(Icons.copy_rounded),
onPressed: () {
Clipboard.setData(ClipboardData(text: hc.nickName));
// nameController.selection = TextSelection.fromPosition(TextPosition(offset: nameController.text.length));
}),
],
),
const SizedBox(
height: 10,
),
Expanded(
child: GridView.builder(
padding: EdgeInsets.only(left: 8, right: 8),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
childAspectRatio: 3 / 2,
crossAxisSpacing: 20,
mainAxisSpacing: 20,
crossAxisCount: 4,
),
itemCount: symbols2.length,
itemBuilder: (BuildContext ctx, index) {
return GestureDetector(
onTap: () {
hc.inputText(symbols2[index].symbol,
nameController.selection.start);
print("nameController.selection.start");
},
child: Container(
alignment: Alignment.center,
child: Text(symbols2[index].symbol),
decoration: BoxDecoration(
color: appThemeData.accentColor,
borderRadius: BorderRadius.circular(15)),
),
);
}),
)
],
),
),
bottomNavigationBar: BottomBar(),
);
}
}
更多上下文的 Gif 预览:Link