Я новичок в программировании, работаю с командой, в которой я помогаю с небольшими проблемами. Я столкнулся с проблемой, когда текст моей метки перебирает текст плоской кнопки, которая находится в конце поля формы текста. Вот скриншот рассматриваемой проблемы
Я попытался поместить TextOverflow.ellipsis, но он работает только с виджетом Текст. Другая вещь, которую я попробовал, - это создать метод добавления разрывов строк для каждого слова, но если все не в левой части, и пользователь не увидит, что он печатает, он будет go поверх текста:
String addLineBreaks() {
String stringWithLB = "";
List<String> splitString = this.split(" ");
splitString.forEach((word) {
stringWithLB += "$word\n";
});
return stringWithLB;
}
Как сделать так, чтобы этот текст исчезал в конце или иметь точки дерева или другие идеи.
Это мой код:
class AccountDetailsPage extends StatefulWidget {
@override
_AccountDetailsPageState createState() => _AccountDetailsPageState();
}
class _AccountDetailsPageState extends State<AccountDetailsPage> {
var _emailController = TextEditingController();
var _nameController = TextEditingController();
var _passwordController = TextEditingController();
final mockPassword = '**********';
FocusNode passwordFocus;
FocusNode emailFocus;
FocusNode userNameFocus;
bool passwordUpdated = false;
File _image;
bool imagePicked;
@override
void initState() {
super.initState();
passwordFocus = FocusNode();
emailFocus = FocusNode();
userNameFocus = FocusNode();
}
@override
Widget build(BuildContext context) {
return Consumer2<IntlO, MTThemeO>(
builder: (context, intl, theme, child) => Scaffold(
backgroundColor: theme.backgroundColor,
appBar: CustomAppBar(
onBackTap: () {
if (_image != null) _image.deleteSync();
Navigator.pushNamed(context, RouteName.homePage);
},
title: intl.m("Account details"),
),
body: SingleChildScrollView(
child: SizedBox(
height: MediaQuery.of(context).size.height + 15.0,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 40.0),
child: Consumer<UserO>(builder: (context, userO, c) {
return Column(
children: <Widget>[
Spacer(),
Stack(
overflow: Overflow.visible,
children: <Widget>[
InkWell(
onTap: () {
getImage();
},
child: Container(
width: 140,
height: 140,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(100.00),
),
border: new Border.all(
color: theme.accountPhotoBorderColor,
),
),
child: ClipOval(child: profilePicture(userO)),
),
),
Positioned(
left: 135,
top: 0,
child: InkWell(
onTap: getImage,
child: Text(
intl.m("Edit"),
style: TextStyle(
fontFamily: theme.muliRegularFont,
color: theme.editTextColor,
fontSize: 11),
),
),
),
],
),
Spacer(),
AccountDetailsTextField(
focusNode: userNameFocus,
labelText: intl.m("First name"),
textController: _nameController..text = userO.name,
),
AccountDetailsTextField(
focusNode: emailFocus,
labelText: intl.m("email address").toString().addLineBreaks(),
textController: _emailController..text = userO.email, //THIS IS THE PART IN QUESTION
),
AccountDetailsTextField(
focusNode: passwordFocus,
labelText: intl.m("password"),
textController: _passwordController..text = mockPassword,
isPassword: true,
),
Spacer(
flex: 2,
),
Consumer3<UpdateUserInfoA, IsLoggedInO, SignOutA>(
builder: (context, action, loggedin, signout, c) {
return Button(
onPressed: () {
if (loggedin.loggedIn) {
action
.updateUserInfo(
email: shouldUpdateUserInfo(
userO.email, _emailController.text),
userName: shouldUpdateUserInfo(
userO.name, _nameController.text),
password: shouldUpdatePassword(
_passwordController.text),
image: _image ??
File(
'assets/profile/default-profile.png'))
.then((_) {
if (passwordUpdated)
signOut(signout, context);
else
Navigator.of(context)
.pushNamed(RouteName.accountDetails);
});
} else {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('You need to log in first!'),
));
}
},
text: intl.m("Save"),
style: ButtonStyles.filledFull,
);
}),
Spacer(
flex: 4,
),
],
);
}),
),
),
),
),
);
}