gpt4 book ai didi

flutter - 如何在文本字段上制作干净的非均匀侧边框

转载 作者:行者123 更新时间:2023-12-03 07:50:13 25 4
gpt4 key购买 nike

我想重现这种效果

Non uniform border on left side of the textfield

我尝试了多种解决方案:

borderRadius只能在具有统一颜色和样式的边框上给出。

链接代码:

decoration: const BoxDecoration(
border: Border(
left: BorderSide(width: 6, color: Colors.red),
),
// borderRadius: BorderRadius.all(Radius.circular(4)),
),
child: pfTextField,
  • 我尝试创建自定义 OutlineInputBorder,以便绘制我想要的内容,但每次重建 View 时它都会闪烁(如果您有解决方案,它会适合我)

这是我为此自定义 OutlineInputBorder 所做的代码:

import 'package:flutter/material.dart';


class CustomInputBorder extends OutlineInputBorder {

final Color? leftBorderSideColor;

/// Constructeur
const CustomInputBorder ({
this.leftBorderSideColor,
super.borderRadius,
super.borderSide,
super.gapPadding,
});

@override
void paint(
Canvas canvas,
Rect rect, {
double? gapStart,
double gapExtent = 0.0,
double gapPercentage = 0.0,
TextDirection? textDirection,
}) {

RRect newRect = RRect.fromLTRBAndCorners(
rect.left,
rect.top,


rect.left + 4,
rect.bottom,

topLeft: const Radius.circular(4),
bottomLeft: const Radius.circular(4),
);
canvas.drawRRect(
newRect,
borderSide.toPaint()
..color = leftBorderSideColor ?? Colors.transparent
..style = PaintingStyle.fill,
);
super.paint(
canvas,
rect,
gapStart: gapStart,
gapExtent: gapExtent,
gapPercentage: gapPercentage,
textDirection: textDirection,
);
}
}

我觉得我错过了一些东西,这一定是一种简单的方法。您知道我如何实现这一目标,或者我对最后一个解决方案的错误是什么?

最佳答案

我为这个自定义文本字段编写了一段工艺代码片段。希望它适合您。您可以通过 DartPad 进行测试

enter image description here

class CustomTextFieldWidget extends StatelessWidget {
const CustomTextFieldWidget({super.key});

@override
Widget build(BuildContext context) {
return TextField(
decoration: InputDecoration(
fillColor: Colors.white,
filled: true,
prefixIcon: Container(
margin: const EdgeInsets.symmetric(horizontal: 1),
color: Colors.transparent,
child: Align(
alignment: Alignment.centerLeft,
child: Container(
margin: const EdgeInsets.symmetric(vertical: 0.5),
width: 4,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(6),
bottomLeft: Radius.circular(6),
),
color: Colors.red,
),
),
),
),
prefixIconConstraints: const BoxConstraints(
maxWidth: 24,
maxHeight: 58,
),
hintText: "This is hint",
hintStyle: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.w400,
color: Colors.grey
),
enabledBorder: getInputBorder(),
focusedBorder: getInputBorder(),
disabledBorder: getInputBorder(),
errorBorder: getInputBorder(),
),
);
}
}
InputBorder getInputBorder() {
return OutlineInputBorder(
borderSide: const BorderSide(color: Colors.black, width: 1,),
borderRadius: BorderRadius.circular(4)
);
}

关于flutter - 如何在文本字段上制作干净的非均匀侧边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77368150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com