dart 如何在Flutter的文本输入字段中配置自动大写行为?

2mbi3lxu  于 2023-10-13  发布在  Flutter
关注(0)|答案(3)|浏览(129)

我正在尝试在Windows上开发Flutter。我有一个简单的测试应用程序与一个InputField。我希望第一个键盘输入是一个大写字母,但看不到实现这一点的方法(例如。按下Shift键启动键盘)。有什么想法吗?
代码(稍微简化)是:

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(
      theme: new ThemeData.dark(),
      home: new MainScreen()
  ));
}

class MainScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
            leading: new IconButton(
                icon: new Icon(Icons.menu),
                tooltip: 'Navigation menu',
                onPressed: null,
            ),
            title: new Text('Test'),
        ),
        body: new NewTest(),
    );
  }
}

/// Widget
class NewTest extends StatefulWidget {
  @override
  _NewTestInputState createState() => new _NewTestInputState();
}
/// State
class _NewTestInputState extends State<NewTest> {
  InputValue _currentInput;

  void _handleInputChange(InputValue input) {
    if (input != _currentInput){
      setState(() {
        _currentInput = input;
      });
    }
  }

  void _handleInputSubmitted(InputValue input) {
    setState(() {
      _currentInput = const InputValue();
    });
  }

  @override
  Widget build(BuildContext context) {
    InputField _widget = new InputField(
        value: _currentInput,
        hintText: 'Enter text',
        keyboardType: TextInputType.text,
        autofocus: true,
        onChanged: _handleInputChange,
        onSubmitted: _handleInputSubmitted,
        style: new TextStyle(fontSize: 20.0),
    );
    Container _container = new Container(
        child: _widget,
        decoration: new BoxDecoration(
            border: new Border.all(
                color: Colors.green[300],
                width: 2.0,
            ),
        ),
        padding: new EdgeInsets.all(16.0),
    );
    return _container;
  }
}
6ioyuze2

6ioyuze21#

Flutter为文本字段提供了一个textCapitalization属性。将此属性设置为TextCapitalization.sentences或任何可用值,例如**.characters或.words**如下所示:

TextField(
   keyboardType: TextInputType.text,
   **textCapitalization: TextCapitalization.sentences,**
   style: TextStyle(
      fontSize: 30.0,
      color: Colors.black,
      fontWeight: FontWeight.bold
   ),
)
btqmn9zl

btqmn9zl2#

启动错误是Flutter的键盘 Package 器的iOS实现中的一个错误,该错误已于今天修复!
我在这里提交了一个可配置的bug(这样你就可以禁用自动大写的句子行为):https://github.com/flutter/flutter/issues/9363
如果这不能解决您的问题,请不要犹豫,与我们联系。

67up9zun

67up9zun3#

最常见的问题是,由于某种原因:
keyboardType: TextInputType.name不大写第一个字母,尽管你会认为一个“名字”应该大写。
所以一个典型的用户会添加:

textCapitalization: TextCapitalization.words,

但这并不起作用,除非你删除keyboardType: TextInputType.name,然后它的工作如预期。这种令人沮丧的行为还有其他组合。
删除键盘类型,但保留文本大写:TextCapitalization.words

相关问题