SelectableText('text',
cursorColor: Colors.red,
showCursor: true,
style: const TextStyle(
fontSize: 14,
fontWeight:
FontWeight.w500,
color: Colors.black))
I initially used toolbar options in the code, but now it has been deprecated and I'm trying to implement customMenuBuilder into the code so as to copy the text that would appear in the text field.
Related
I have the following code:
AutoSizeText.rich(
TextSpan(children: [
const TextSpan(
text: "\$",
style: TextStyle(
color: Colors.white,
fontSize: 45,
height: 1.0,
letterSpacing: .0,
fontWeight: FontWeight.w600,
),
),
TextSpan(
text: widget.budget.truncate().toString(),
style: const TextStyle(
color: Colors.white,
fontSize: 90,
),
),
TextSpan(
text: ".${widget.budget.toStringAsFixed(2).split(".")[1]}",
style: const TextStyle(
color: Colors.white,
fontSize: 45,
),
),
]),
style: GoogleFonts.manrope(
fontSize: 45,
letterSpacing: -4.5,
height: 1.0,
fontWeight: FontWeight.w600,
textStyle: const TextStyle(
leadingDistribution: TextLeadingDistribution.even,
)),
textAlign: TextAlign.center,
maxLines: 1,
);
The code results in this (I also tried with Text.rich instead of AutoSizeText but the result is the same):
In the image, I have wrapped the text in a red container to check its bounding box.
I am implementing this element following a design I made in Figma:
Similatly, in this image the red frame has an autolayout applied with all padding set to 0, in a way that simulates wrapping the text in a Container.
The text looks the same in both the design and the Flutter implementation, but the Flutter one is shifted upwards, which on big text sizes is really noticeable. I figured it might have something to do with the vertical alignment of the text but I could not find any way to fix it.
Is this an expected behaviour or am I doing something wrong?
I search to internationalize my app. I have lot of text, I search a simple and fast way to add english trad to my all text.
Here is the structure of all my text
Text('Mytext',
textAlign:TextAlign.center, style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w400,
fontSize: SizeConfig.safeBlockHorizontal! * 4),
),
I don't know if there is a package of methode to add internationalization like an extention
Text('Mytext.internationalization',
textAlign:TextAlign.center, style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w400,
fontSize: SizeConfig.safeBlockHorizontal! * 4),
),
If I can avoid to copy paste all my test to a JSON file and trad all, and change all my text structure it will be cool :)
In my app, I made custom TextStyles for different purposes. I made variables for their respective sizes and initialized them like this -
double fontSize1=24;
double fontSize2=20;
double fontSize3=18;
double bodyText1Size=16;
double bodyText2Size=14;
double bodyText3Size=12;
double buttonTextStyleSize=16;
double linkStyleSize=12;
var headingStyle1 = TextStyle(
fontSize: fontSize1,
fontWeight: FontWeight.bold,
color: Colors.black,
);
var headingStyle2 = TextStyle(
fontSize: fontSize2,
fontWeight: FontWeight.bold,
color: Colors.black,
);
var headingStyle3 = TextStyle(
fontSize: fontSize2,
fontWeight: FontWeight.w600,
color: Colors.black,
);
var headingStyle4 = TextStyle(
fontSize: fontSize3,
fontWeight: FontWeight.w600,
color: Colors.black,
);
var bodyText1 = TextStyle(
fontSize: bodyText1Size,
fontWeight: FontWeight.w400,
color: Colors.black,
);
var bodyText2 = TextStyle(
fontSize: bodyText2Size,
fontWeight: FontWeight.w400,
color: Colors.black,
);
var bodyText3 = TextStyle(
fontSize: bodyText3Size,
fontWeight: FontWeight.w400,
color: tertiaryTextColor,
);
var buttonTextStyle = TextStyle(
fontSize: buttonTextStyleSize,
fontWeight: FontWeight.bold,
color: Colors.black,
);
var linkStyle = TextStyle(
fontSize: linkStyleSize,
fontWeight: FontWeight.w600,
color: Colors.black,
);
And then, used them in my main.dart in my Material App's TextTheme like this -
textTheme: TextTheme(
headline1: headingStyle1,
headline2: headingStyle2,
headline3: headingStyle3,
headline4: headingStyle4,
headline6: bodyText3,
bodyText1: bodyText1,
bodyText2: bodyText2,
button: buttonTextStyle,
caption: linkStyle,
),
Now, I am using this everywhere in my app, for eg -
Text(
"These settings will be applied all across the app",
style: Theme.of(context)
.textTheme
.bodyText2!
.apply(color: tertiaryTextColor),
),
Now, I want to change their sizes from my UI, and for that I created two Buttons and in them, just for now I increased/decreased their sizes. I used setState to change their sizes like this -
InkWell(
onTap: () {
setState(() {
fontSize1--;
fontSize2--;
fontSize3--;
});
print("Font Sizes increased by 1");
print("Font Sizes 1 = $fontSize1");
print("Font Sizes 2 = $fontSize2");
print("Font Sizes 3 = $fontSize3");
},
child: Text(
"-",
style: Theme.of(context)
.textTheme
.headline2!
.apply(color: secondaryTextColor),
),
),
Now, in my logs, as i printed, their sizes are changing but UI is not. Why? Can you please tell me a solution for this?
You can call textTheme with .copy and change what you want for example color or size or .... etc
Text(
"These settings will be applied all across the app",
style: Theme.of(context)
.textTheme
.bodyText2!
// .apply(color: tertiaryTextColor), comment this
.copyWith(color: tertiaryTextColor), // add this line for color attribute or any else
),
I think that you have to change the headingStyle variable and not the fontSize. Because the headingStyle variable has been set with the current fontSize, even though you change the fontSize, the headingStyle does not change because it is a variable. You can change the headingStyle from variable to method like this:
TextStyle get headingStyle1 => TextStyle(
fontSize: fontSize1,
fontWeight: FontWeight.bold,
color: Colors.black,
);
with this code, everytime you will define a textStyle, it will create and return the textStyle, so while you update the state, It will get the new fontSize.
Also, instead of changing the fontSize, you can change the headingStyle like this:
onTap() {
setState(() {
headingStyle1 = TextStyle(
fontSize: --fontSize1,
fontWeight: FontWeight.bold,
color: Colors.black,
);
headingStyle2 = TextStyle(
fontSize: --fontSize2,
fontWeight: FontWeight.bold,
color: Colors.black,
);
headingStyle3 = TextStyle(
fontSize: --fontSize2,
fontWeight: FontWeight.w600,
color: Colors.black,
);
headingStyle4 = TextStyle(
fontSize: --fontSize3,
fontWeight: FontWeight.w600,
color: Colors.black,
);
});
print("Font Sizes increased by 1");
print("Font Sizes 1 = $fontSize1");
print("Font Sizes 2 = $fontSize2");
print("Font Sizes 3 = $fontSize3");
}
TextTheme _basicTextTheme(TextTheme base) {
return base.copyWith(
headline1: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold),
headline6: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic),
bodyText1: GoogleFonts.lato(
fontSize: 20, color: Colors.orange),
bodyText2: GoogleFonts.lato(
fontSize: 15.0,
));
}
I have succeed to apply this to my themeData. Is there anyway that I can create a custom field to it? Like
linkText: GoogleFonts.lato(fontSize: 20)
So far, I have distinguished using headline and bodyText 1 2 3 but then it is a bit confusing right now. I want to create a custom name that I can use.
You can use extension on TextTheme
extension CustomTextStyles on TextTheme {
TextStyle get linkText {
return TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.w600,
);
}
TextStyle get buttonText{
return TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w400,
);
}
}
Hi i need text style for example bodyText3,like this
bodyText3: TextStyle(
fontSize: 16,
height: 1.5,
fontWeight: FontWeight.w600,
color: MyColors.black)
but in flutter we have only this styles.
headline1,
headline2,
headline3,
headline4,
headline5,
headline6,
subtitle1,
subtitle2,
bodyText1,
bodyText2,
caption,
What should i do to add my new style ?
Create a Constant to define the style
const TextStyle bodyText3 = TextStyle(
fontSize: 14,
color: darkGrey,
fontWeight: FontWeight.w700,
);
Use this constant in your Text's style property
Text(
'No',
style: bodyText3,
),