質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

4081閲覧

Flutterで共通のスタイルを関数で定義しておくには?

Yariii

総合スコア61

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2020/09/10 13:27

こんにちは。
今回、Flutterでの共通スタイルの管理方法の質問です。
例えば、アプリ全体に、同じスタイルのテキストスタイルを当てて、それらを1つのファイルで一括管理したい場合、どのようにするのが設計上自然なのでしょうか?

今回はテストで
fontSize: 16,
fontWeight: FontWeight.bold,
を適用させたいです。

普段、自分はWEB開発ではSCSSを触っていて、このような場合はmixinを使うもので、直感的にはこのようにしてみたのですが、

class Mixin { void fontTitle() { Text( style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, )); } } class FreshCasts extends StatefulWidget with Mixin { @override _FreshCastsState createState() => _FreshCastsState(); } class _FreshCastsState extends State<FreshCasts> { @override Widget build(BuildContext context) { return Text( 'テスト', fontTitle(), textAlign: TextAlign.left, ), }

これだとエラーとなってしまい。。
ただやりたいことのイメージとしては↑のような感じです。
関数でまとめて、複数のプロパティを一括で指定したい、といった感じです。

この場合どのようにすれば良いのでしょうか?
ご教授よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

グローバルCSSのように、アプリ全体に適用するようなものは、なるべくThemeを使って管理します。

dart

1ThemeData get theme => ThemeData( 2 textTheme: TextTheme( 3 headline1: TextStyle( 4 fontSize: 20, 5 fontWeight: FontWeight.bold, 6 ), 7 headline2: TextStyle( 8 fontSize: 18, 9 fontWeight: FontWeight.bold, 10 ), 11 ), 12 ); 13 14 15class App extends StatelessWidget { 16 17 Widget build(BuildContext context) { 18 return MaterialApp( 19 theme: theme, 20 home: Home(), 21 ); 22 } 23} 24

また、局所的に使われるようなスタイルを1箇所でまとめて管理したいという場合は、以下のようにStylesのようなクラスを作ってstaticなプロパティとして持たせておくのがよくある実装です。

dart

1class Styles { 2 static const fontTitleStyle = TextStyle( 3 fontSize: 16, 4 fontWeight: FontWeight.bold, 5 ); 6 7 static const subTitleStyle = TextStyle( 8 fontSize: 14, 9 ); 10}

以下のように使うことができます。staticで宣言しているので、withを使ってmixinする必要はありません。

dart

1Text( 2 "あああ", 3 style: Styles.fontTitleStyle, 4 textAlign: TextAlign.center, 5)

あと、もしかしたら質問の意図とはズレるかもしれませんが、以下のようにfontSize: 16fontWeight: FontWeight.boldで文字を表示する専用のウィジェットを作るというのも自然です。

dart

1class FontTitle extends StatelessWidget { 2 final String text; 3 final TextAlign textAlign; 4 5 const FontTitle(this.text, {this.textAlign}); 6 7 8 Widget build(BuildContext context) { 9 return Text( 10 text, 11 style: TextStyle( 12 fontSize: 16, 13 fontWeight: FontWeight.bold, 14 ), 15 textAlign: this.textAlign ?? TextAlign.left, 16 ); 17 } 18}

以下のように使うことができます。

dart

1FontTitle( 2 "あああ", 3 textAlign: TextAlign.center, 4),

投稿2020/09/10 14:36

nskhei

総合スコア704

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yariii

2020/09/11 03:28

なるほど、いろいろ使い分けできるんですね、勉強になります。今回の場合はクラスを作ってまとめておくのが良さそうだったので、そちらを採用しようかと思います! ご回答ありがとうございました。m_ _m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問