User interface 我如何制作TextField';s后缀/后缀是否可以调整高度大小?
如何强制check_circle图标自动调整大小以匹配实际文本字段的高度,即wrt其光标高度?请改用User interface 我如何制作TextField';s后缀/后缀是否可以调整高度大小?,user-interface,flutter,textfield,flutter-layout,User Interface,Flutter,Textfield,Flutter Layout,如何强制check_circle图标自动调整大小以匹配实际文本字段的高度,即wrt其光标高度?请改用sufficicon import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp(
sufficicon
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SafeArea(
child: Scaffold(
body: Column(
children: [
Container(
color: Colors.orange,
child: TextField(
decoration: InputDecoration(
suffix: IconButton(
icon: Icon(Icons.check_circle),
onPressed: () {
print('222');
}),
),
),
),
],
),
),
),
);
}
}
改为使用
subfixicon
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SafeArea(
child: Scaffold(
body: Column(
children: [
Container(
color: Colors.orange,
child: TextField(
decoration: InputDecoration(
suffix: IconButton(
icon: Icon(Icons.check_circle),
onPressed: () {
print('222');
}),
),
),
),
],
),
),
),
);
}
}
很好的问题
最基本的是重置文本字段中的所有填充,而不是使用图标按钮(因为所有材质组件都有预定义的填充和内部填充,您无法修改)
似乎后缀将基线与文本对齐,从而阻止材质墨水交互,而后缀将在文本区域中正确居中,但会将墨水传播到文本字段。
所以,到目前为止,我还没有找到一个正确的方法,也许我缺少一个小部件/逻辑
检查底部的屏幕截图,该截图显示了后缀无法与文本对齐的原因,因为它位于基线内,插入符号生成的高度更大
在前两个文本字段中,灰色框为后缀,黄色框为后缀(正确居中)
解决方案1:(在屏幕快照中,M是带2个复选框的红色背景)
如果可以(按设计),请排成一行,并放置文本字段和图标:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SafeArea(
child: Scaffold(
body: Column(
children: [
Container(
color: Colors.orange,
child: TextField(
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.check_circle),
onPressed: () {
print('222');
}),
),
),
),
],
),
),
),
);
}
}
解决方案3:
用你自己制作的装饰品
问得好
最基本的是重置文本字段中的所有填充,而不是使用图标按钮(因为所有材质组件都有预定义的填充和内部填充,您无法修改)
似乎后缀将基线与文本对齐,从而阻止材质墨水交互,而后缀将在文本区域中正确居中,但会将墨水传播到文本字段。
所以,到目前为止,我还没有找到一个正确的方法,也许我缺少一个小部件/逻辑
检查底部的屏幕截图,该截图显示了后缀无法与文本对齐的原因,因为它位于基线内,插入符号生成的高度更大
在前两个文本字段中,灰色框为后缀,黄色框为后缀(正确居中)
解决方案1:(在屏幕快照中,M是带2个复选框的红色背景)
如果可以(按设计),请排成一行,并放置文本字段和图标:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SafeArea(
child: Scaffold(
body: Column(
children: [
Container(
color: Colors.orange,
child: TextField(
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.check_circle),
onPressed: () {
print('222');
}),
),
),
),
],
),
),
),
);
}
}
解决方案3:
用你自己制作的装饰品
使用的
堆栈
var inputBorderDecoration = OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide: BorderSide(width: 1, color: Colors.black));
double fontSize = 24;
return GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(FocusNode());
},
child: Container(
color: Colors.green.shade50,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 300,
height: fontSize,
color: Colors.orange,
child: TextField(
style: TextStyle(fontSize: fontSize, color: Colors.white),
decoration: InputDecoration(
fillColor: Colors.purple.withOpacity(.5),
filled: true,
border: inputBorderDecoration,
focusedBorder: inputBorderDecoration,
enabledBorder: inputBorderDecoration,
contentPadding: EdgeInsets.zero,
suffixIcon: GestureDetector(
onTap: () => print('on tap'),
child: Container(
color: Colors.green,
child: FittedBox(
alignment: Alignment.center,
fit: BoxFit.fitHeight,
child: IconTheme(
data: IconThemeData(),
child: Icon(
Icons.check_circle,
color: Colors.white,
),
),
),
),
),
),
),
),
],
),
),
),
);
已使用
堆栈
var inputBorderDecoration = OutlineInputBorder(
borderRadius: BorderRadius.zero,
borderSide: BorderSide(width: 1, color: Colors.black));
double fontSize = 24;
return GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(FocusNode());
},
child: Container(
color: Colors.green.shade50,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 300,
height: fontSize,
color: Colors.orange,
child: TextField(
style: TextStyle(fontSize: fontSize, color: Colors.white),
decoration: InputDecoration(
fillColor: Colors.purple.withOpacity(.5),
filled: true,
border: inputBorderDecoration,
focusedBorder: inputBorderDecoration,
enabledBorder: inputBorderDecoration,
contentPadding: EdgeInsets.zero,
suffixIcon: GestureDetector(
onTap: () => print('on tap'),
child: Container(
color: Colors.green,
child: FittedBox(
alignment: Alignment.center,
fit: BoxFit.fitHeight,
child: IconTheme(
data: IconThemeData(),
child: Icon(
Icons.check_circle,
color: Colors.white,
),
),
),
),
),
),
),
),
],
),
),
),
);
那是行不通的;图标大小保持不变,与“手机辅助功能设置”中指定的字体大小无关。这不起作用;图标大小保持不变,与“手机辅助功能设置”中指定的字体大小无关。感谢您提供了如此详尽的答案,但当我将textScaleFactor调到2.0时,文本从容器中出来。感谢您提供了如此详尽的答案,但当我将textScaleFactor调到2.0时,文本从容器中出来。