Managing Style and Adding Fonts
11:23
Summary
In this lesson we'll cover: how to style text using TextTheme, custom fonts and basic Material Design theming with TextStyle. We'll also cover code organization when working with style.
The Code for This Lesson
Check out the tourismandco repo's step/step04 branch for the code we'll cover in this lesson.
Styling text using TextTheme, fonts assets and TextStyle
- In order to style our text, let's use a custom font.
- Create a new directory called
assets/fonts. - Copy the font files located at
assets/fontsin thestep/step03branch of this repo and copy it to our new directory. - Update our
pubspec.yamlfile so we can use our fonts.
Adding fonts to pubspec.yaml
# pubspec.yaml
flutter:
# ...
fonts:
- family: Montserrat
fonts:
- asset: assets/fonts/Montserrat-Regular.ttf
weight: 300
- asset: assets/fonts/Montserrat-Bold.ttf
weight: 600
# ...
Again, be careful of the indentation here.
Note: this screen isn't currently scrollable, so if the content for this screen overflows, we'll see some weird rendering issues. Later, we'll take care of this issue.
Using an App-Wide TextTheme
- We can define app-wide style using the
themeparameter of ourMaterialAppwidget, located inapp.dart. - Update our
app.dartto the following:
// app.dart
import 'package:flutter/material.dart';
import 'screens/location_detail/location_detail.dart';
import 'style.dart';
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: LocationDetail(),
theme: ThemeData(textTheme: TextTheme(body1: Body1Style)),
);
}
}
// ...
- Here, we can style all text using the
textThemeparam ofThemeData. - Warning: note that we'll importing a new file here,
style.dart. - Next, let's create a
style.dartfile so we can cleanly keep all our app styles in one place.
Adding style.dart
// style.dart
import 'package:flutter/material.dart';
const String FontNameDefault = 'Montserrat';
const Body1Style = TextStyle(
fontFamily: FontNameDefault,
fontWeight: FontWeight.w300,
fontSize: 26.0,
color: Colors.black,
);
- Note that we're using
consthere (a "constant"), which ensures that the value of this constant is assigned at compile-time rather than runtime. A small optimization. TextStyleallows to style an individualTextwidget using itsstyleparam.- Yet we won't do this, as we using
ThemeData, no code changes will be needed. Pretty cool. - Stop and re-start the app to see the changes.
- Note that if we add new files or make changes to any
constvariables, we'll need to restart our app, as these changes aren't supported by Flutter's Hot Reload feature.
Summary
In this lesson, we covered the basics of layout, imagesand text. Our "Tourism & Co." app is taking shape.