【发布时间】:2019-11-06 08:18:54
【问题描述】:
我一直试图让涟漪效应在带有圆形边框的 TextField 中正常工作。在示例代码中,有两个文本字段,都存在问题。在顶场,涟漪效应不仅限于圆形边框;它延伸到小部件的矩形边界,如下所示(请忽略绿色圆圈):
第二个小部件试图通过用Material 和ClipRRect 包围该字段来解决此问题。这部分有效,并且通常正确地将涟漪效应限制在组件的边界。但是,当验证失败并显示验证错误时,渲染会被剪辑搞砸:
有没有办法让涟漪效应在所有情况下都正确地停留在文本字段边框内?
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(inputDecorationTheme: _theme()),
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
_textField(),
ClipRRect(
borderRadius: BorderRadius.circular(40),
child: Material(
child: _textField(),
),
),
],
),
),
),
);
}
InputDecorationTheme _theme() => ThemeData.light().inputDecorationTheme.copyWith(
errorBorder: _makeRoundedInputBorder(),
enabledBorder: _makeRoundedInputBorder(),
focusedBorder: _makeRoundedInputBorder(),
focusedErrorBorder: _makeRoundedInputBorder(),
);
OutlineInputBorder _makeRoundedInputBorder() =>
OutlineInputBorder(borderRadius: BorderRadius.all(Radius.circular(40)));
TextFormField _textField() => TextFormField(
validator: (value) => value.length > 5 ? "Can't have more than five characters" : null,
autovalidate: true,
);
}
【问题讨论】:
-
您是否尝试过使用普通文本字段,并将其封装在圆形容器中?
-
@JulienLachal 你有一个例子来说明你的想法吗?
-
尝试将
Column的子代替换为Container(decoration: BoxDecoration(borderRadius: BorderRadius.circular(40)), child: _textField()); -
@JulienLachal 唉,这与第一种情况具有相同的行为,其中涟漪效应溢出圆形边框。
标签: flutter