聚焦时颤动文本不会改变

时间:2021-03-27 03:10:47

标签: flutter widget state

我有这个 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(),
    );
  }
}

textfield

更多上下文的 Gif 预览:Link

0 个答案:

没有答案
相关问题