font_scaler 1.0.1
font_scaler: ^1.0.1 copied to clipboard
FontScaler is a lightweight Flutter package that allows you to dynamically adjust the text scale across your entire app. It supports predefined scale levels (like small, medium, large) and a custom mo [...]
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:font_scaler/font_scaler.dart';
void main() {
// Need to Wrap MyApp with FontScaler
runApp(FontScaler(child: MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
// Need to Add FontScalerProvider.of(context).builder to reflect the changes
builder: FontScalerProvider.of(context).builder,
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
final textTheme = Theme.of(context).textTheme;
final primaryColor = Colors.deepPurpleAccent;
// This will return the currentFontScale whenEver the fontScale Changes
final currentFontScale =FontScalerProvider.of(context).currentFontScale;
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
backgroundColor: Colors.white,
title: Text("Description"),
actions: [
Row(
children: [
GestureDetector(
onTap: () {
// updateFontScale will update font by given Enum
FontScalerProvider.of(context).updateFontScale(FontScale.micro);
},
child: Container(
height: 30,
width: 30,
decoration: BoxDecoration(
color:currentFontScale==FontScale.micro?primaryColor: Colors.white,
border: Border.all(color: primaryColor),
),
child: Icon(
Icons.text_fields_outlined,
size: 14,
color:currentFontScale==FontScale.micro?Colors.white: Colors.black,
),
),
),
GestureDetector(
onTap: () {
FontScalerProvider.of(context).updateFontScale(FontScale.fDefault);
},
child: Container(
height: 30,
width: 30,
decoration: BoxDecoration(
color:currentFontScale==FontScale.fDefault?primaryColor: Colors.white,
border: Border.all(color: primaryColor),
),
child: Icon(
Icons.text_fields_outlined,
size: 20,
color: currentFontScale==FontScale.fDefault? Colors.white:Colors.black,
),
),
),
GestureDetector(
onTap: () {
// updateFontScale will update font by given custom double value
FontScalerProvider.of(context).updateFontScale(FontScale.custom,customValue: 2.2);
},
child: Container(
height: 30,
width: 30,
decoration: BoxDecoration(
color:currentFontScale==FontScale.custom?primaryColor: Colors.white,
border: Border.all(color: primaryColor),
),
child: Icon(
Icons.text_fields_outlined,
size: 28,
color:currentFontScale==FontScale.custom?Colors.white: Colors.black,
),
),
),
],
),
SizedBox(width: 10),
],
),
body: SingleChildScrollView(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(child: Text("Size: 38 US", style: textTheme.titleLarge)),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
for (int i = 0; i < sizeList.length; i++) ...[
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: primaryColor),
shape: BoxShape.circle,
color: i == 0 ? primaryColor : Colors.white,
),
child: Text(
sizeList[i].toString(),
style: textTheme.labelLarge?.copyWith(
color: i == 0 ? Colors.white : primaryColor,
),
),
),
],
],
),
SizedBox(height: 20),
Text("Product details", style: textTheme.titleLarge),
SizedBox(height: 15),
Text("* Feature 1", style: textTheme.titleSmall),
SizedBox(height: 5),
Text("* Feature 2", style: textTheme.titleSmall),
SizedBox(height: 5),
Text("* Feature 3", style: textTheme.titleSmall),
SizedBox(height: 5),
Text("* Feature 4", style: textTheme.titleSmall),
SizedBox(height: 5),
Text("* Feature 5", style: textTheme.titleSmall),
SizedBox(height: 20),
Text("Composition", style: textTheme.titleLarge),
SizedBox(height: 15),
Text(
"Outer Material : Cotton 100% Calf:Leather 100% Lining: Polyester 100%",
style: textTheme.titleSmall,
),
SizedBox(height: 20),
Text("Size and fit", style: textTheme.titleLarge),
SizedBox(height: 15),
Text(
"- Fits true to size. Take your normal Size",
style: textTheme.titleSmall,
),
Text(
"- Mid weight, Slightly strechy fabric",
style: textTheme.titleSmall,
),
Text(
"- The model is weariing its size larger",
style: textTheme.titleSmall,
),
SizedBox(height: 20),
Row(
children: [
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: primaryColor),
shape: BoxShape.circle,
color: Colors.white,
),
child: Icon(Icons.favorite, color: primaryColor),
),
SizedBox(width: 30),
Expanded(
child: GestureDetector(
onTap: (){
// This Will Clear the change and remove from local storage and set back to default fontScale
FontScalerProvider.of(context).clear();
},
child: Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: primaryColor),
borderRadius: BorderRadius.circular(10),
color: primaryColor,
),
alignment: Alignment.center,
child: Text(
"ADD TO CART",
style: textTheme.labelLarge?.copyWith(
color: Colors.white,
),
),
),
),
),
],
),
],
),
),
);
}
}
List<int> sizeList = [38, 40, 42, 44];