如何在Textfield边框和滚动栏之间添加填充?

发布于 2025-01-29 06:47:49 字数 2189 浏览 2 评论 0原文

这是我当前的代码:

  Widget _buildContent(TextStyle _textStyle6) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Focus(
          onFocusChange: (hasFocus) => setState(() => focused = hasFocus),
          child: widget.scrollController != null 
            ? Scrollbar(
              controller: widget.scrollController,
              thickness: 10,
              trackVisibility: true,
              thumbVisibility: true,
              radius: Radius.circular(8),
              child: _buildTextField(_textStyle6),
            ) 
            : _buildTextField(_textStyle6),
        ),
        if (widget.outerHintText != null) Padding(
          padding: const EdgeInsets.only(left: 18, top: 6),
          child: Text(widget.outerHintText!, style: widget.outerHintStyle),
        ),
      ],
    );
  }

  Widget _buildTextField(TextStyle _textStyle6) {
    return TextFormField(
      style: _textStyle6,
      maxLength: widget.maxLength,
      minLines: widget.minLines,
      maxLines: widget.maxLines,
      keyboardType: widget.keyboardType,
      scrollController: widget.scrollController,
      // scrollPadding: EdgeInsets.all(30),
      decoration: InputDecoration(
        alignLabelWithHint: widget.alignLabelWithHint,
        border: OutlineInputBorder(),
        enabledBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Colors.grey.shade300, width: 0.8),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0xff1a73e8), width: 2),
        ),
        labelText: widget.label,
        labelStyle: TextStyle(color: focused ? Color(0xff1a73e8) : Colors.black),
        contentPadding: EdgeInsets.symmetric(horizontal: 18, vertical: 20),
        prefixIcon: widget.prefixIcon,
        prefixIconColor: widget.prefixIconColor,
        constraints: widget.constraints,
      ),
    );
  }

窗口小部件返回:

”“在此处输入图像说明”

我想在Textfield和Scrollbar的正确边界之间添加一些填充。如何获得它?

This is my current code:

  Widget _buildContent(TextStyle _textStyle6) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Focus(
          onFocusChange: (hasFocus) => setState(() => focused = hasFocus),
          child: widget.scrollController != null 
            ? Scrollbar(
              controller: widget.scrollController,
              thickness: 10,
              trackVisibility: true,
              thumbVisibility: true,
              radius: Radius.circular(8),
              child: _buildTextField(_textStyle6),
            ) 
            : _buildTextField(_textStyle6),
        ),
        if (widget.outerHintText != null) Padding(
          padding: const EdgeInsets.only(left: 18, top: 6),
          child: Text(widget.outerHintText!, style: widget.outerHintStyle),
        ),
      ],
    );
  }

  Widget _buildTextField(TextStyle _textStyle6) {
    return TextFormField(
      style: _textStyle6,
      maxLength: widget.maxLength,
      minLines: widget.minLines,
      maxLines: widget.maxLines,
      keyboardType: widget.keyboardType,
      scrollController: widget.scrollController,
      // scrollPadding: EdgeInsets.all(30),
      decoration: InputDecoration(
        alignLabelWithHint: widget.alignLabelWithHint,
        border: OutlineInputBorder(),
        enabledBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Colors.grey.shade300, width: 0.8),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0xff1a73e8), width: 2),
        ),
        labelText: widget.label,
        labelStyle: TextStyle(color: focused ? Color(0xff1a73e8) : Colors.black),
        contentPadding: EdgeInsets.symmetric(horizontal: 18, vertical: 20),
        prefixIcon: widget.prefixIcon,
        prefixIconColor: widget.prefixIconColor,
        constraints: widget.constraints,
      ),
    );
  }

Widget returned like this:

enter image description here

I wanna add some padding between the right border of TextField and the scrollbar. How to get it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尤怨 2025-02-05 06:47:49

您可以用scrollbartheme包装并设置Crossaxismargin:

const ScrollbarTheme(
  data: ScrollbarThemeData(crossAxisMargin: 10),
  child: Scrollbar(
    thickness: 10,
    trackVisibility: true,
    thumbVisibility: true,
    child: TextField(),
  ),
);

另外,您可以使用RAWSCROLLBAR并设置Crossaxismargin:

const RawScrollbar(
  thickness: 10,
  trackVisibility: true,
  thumbVisibility: true,
  crossAxisMargin: 5,
  child: TextField(),
);

You may wrap it with ScrollbarTheme and set crossAxisMargin:

const ScrollbarTheme(
  data: ScrollbarThemeData(crossAxisMargin: 10),
  child: Scrollbar(
    thickness: 10,
    trackVisibility: true,
    thumbVisibility: true,
    child: TextField(),
  ),
);

Alternatively, you may use RawScrollbar and set crossAxisMargin:

const RawScrollbar(
  thickness: 10,
  trackVisibility: true,
  thumbVisibility: true,
  crossAxisMargin: 5,
  child: TextField(),
);
梦纸 2025-02-05 06:47:49
Container(
    padding: const EdgeInsets.only(
      right: 10.0,
    ),
    decoration: BoxDecoration(
      color: Color(),
      border: Border.all(
        color: Color(),
      ),
    ),
    child: Scrollbar(
      thickness: 5.0,
      controller: _scrollController,
      trackVisibility: true,
      thumbVisibility: true,
      child: TextFormField(
        maxLines: 8,
        textCapitalization: TextCapitalization.words,
        scrollController: _scrollController,
        decoration: const InputDecoration(
          hintText: '....',
          hintStyle: TextStyles.bodyTextLight,
          isDense: true,
          border: InputBorder.none,
          filled: true,
          fillColor: Color(),
        ),
      ),
    ),
  ),

您可以做类似的事情,将您的文本场和滚动栏包裹到容器中,并将该容器与您提供给TextField的相同边框和背景样式。并在容器的右侧给予填充。

https://i.sstatic.net/b2xig.png

Container(
    padding: const EdgeInsets.only(
      right: 10.0,
    ),
    decoration: BoxDecoration(
      color: Color(),
      border: Border.all(
        color: Color(),
      ),
    ),
    child: Scrollbar(
      thickness: 5.0,
      controller: _scrollController,
      trackVisibility: true,
      thumbVisibility: true,
      child: TextFormField(
        maxLines: 8,
        textCapitalization: TextCapitalization.words,
        scrollController: _scrollController,
        decoration: const InputDecoration(
          hintText: '....',
          hintStyle: TextStyles.bodyTextLight,
          isDense: true,
          border: InputBorder.none,
          filled: true,
          fillColor: Color(),
        ),
      ),
    ),
  ),

You can do something like this, wrap your textfield and scrollbar to a container and give that container the same border and background style to it which you are giving to the textfield. And give it padding on the right side of the container.

https://i.sstatic.net/B2XIg.png

埖埖迣鎅 2025-02-05 06:47:49

对我有用的代码是:

RawScrollbar(
controller:  _textFieldScrollController,
thumbColor: Colors.red,
thumbVisibility: true,
shape: StadiumBorder( side: BorderSide(color: Colors.amber, width: 1.0)),
padding: EdgeInsets.only(right: 8,top: 20),
child: TextFormField(
scrollController: _textFieldScrollController,
controller: commentBoxController,
...
))

The code that worked for me was:

RawScrollbar(
controller:  _textFieldScrollController,
thumbColor: Colors.red,
thumbVisibility: true,
shape: StadiumBorder( side: BorderSide(color: Colors.amber, width: 1.0)),
padding: EdgeInsets.only(right: 8,top: 20),
child: TextFormField(
scrollController: _textFieldScrollController,
controller: commentBoxController,
...
))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文