当第一次键入空格时,Flutter TextField将为空

时间:2019-02-23 10:33:27

标签: flutter

我正在使用一些初始值的TextField。但是,当我想在该初始值之后添加更多文本(如“ append”)时,却总是第一次输入“空格”时,TextField将被清空。为什么会这样?

另一种烦人的事情是,为什么第一次点击TextField时,光标总是一直移到左侧而不是初始值之后?

var textEditingController = TextEditingController();
textEditingController.text = 'some_initial_values';

TextField(
  decoration: InputDecoration(

  ),
  controller: textEditingController,      
)

编辑: 我通过ListView.Builder从StreamBuilder获得了初始值,而不是静态文本。

1 个答案:

答案 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,
          ),
        ),
      ),
    );
  }
}