Adding Custom Fonts in Flutter Using google_fonts
and GetX: A Step-by-Step Guide
The google_fonts
package allows you to use a wide variety of fonts from Google Fonts in your Flutter application. In this tutorial, we’ll integrate google_fonts
with GetX for easy state management, creating a responsive and flexible app layout.
Prerequisites
- Flutter SDK: Ensure you have Flutter installed.
- GetX Package: We’ll use the
get
package for state management. - google_fonts Package: Add this to your
pubspec.yaml
file.
dependencies: flutter: sdk: flutter get: ^4.6.5 google_fonts: ^3.0.1
Run flutter pub get
to install the dependencies.
Step 1: Setting up the Controller
We’ll create a FontController
to manage the font style selections using GetX.
font_controller.dart
import 'package:get/get.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:flutter/material.dart'; class FontController extends GetxController { // Set default font to Roboto var currentFont = GoogleFonts.roboto().fontFamily.obs; void changeFont(String fontName) { currentFont.value = GoogleFonts.getFont(fontName).fontFamily; } }
In this controller:
- currentFont: Tracks the selected font.
- changeFont: Changes the font style based on the provided font name.
Step 2: Setting up the View
The view will contain a dropdown menu to select a font and apply it to a text widget in real-time.
font_view.dart
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'font_controller.dart'; class FontView extends GetView { final List fonts = ['Roboto', 'Lobster', 'Oswald', 'Pacifico', 'Montserrat']; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Google Fonts Example'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Obx(() { return Text( "Flutter Google Fonts with GetX", style: TextStyle(fontFamily: controller.currentFont.value, fontSize: 24), ); }), const SizedBox(height: 20), DropdownButton( value: controller.currentFont.value, onChanged: (String? newFont) { if (newFont != null) { controller.changeFont(newFont); } }, items: fonts.map>((String font) { return DropdownMenuItem( value: GoogleFonts.getFont(font).fontFamily, child: Text(font), ); }).toList(), hint: const Text('Select a Font'), ), ], ), ), ); } }
In this view:
- Obx Widget: Displays text with the current font selected in
currentFont
. - DropdownButton: Lists font options, allowing users to change the font in real time.
Step 3: Setting up the Binding
To inject FontController
into the view, we’ll create a binding.
font_binding.dart
import 'package:get/get.dart'; import 'font_controller.dart'; class FontBinding extends Bindings { @override void dependencies() { Get.lazyPut(() => FontController()); } }
This ensures the FontController
is initialized only when needed, optimizing resources.
Step 4: Running the App
Finally, update main.dart
to configure the binding and routing.
main.dart
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'font_view.dart'; import 'font_binding.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return GetMaterialApp( initialRoute: '/', getPages: [ GetPage( name: '/', page: () => FontView(), binding: FontBinding(), ), ], title: 'Google Fonts Example', theme: ThemeData( primarySwatch: Colors.blue, ), ); } }
Wrapping Up
In this guide, we covered:
- Using
google_fonts
to style text dynamically. - GetX for state management to bind a custom font controller.
- Organized MVC structure with bindings, ensuring efficient and modular code.
Now, you have a complete example of using google_fonts
with GetX in Flutter to change and apply different fonts to text widgets.
0 Comments
Please Do Not Comments Any Span Or Span link..