メインコンテンツへスキップ
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
はじめにWebReactSwiftUIJetpack ComposeFlutterReact Nativeプリセット自分のデザインシステムを作るAI エージェントと Tanrei を使うブランドデザイントークンデザインシステムとカスタマイズTheme Studioカラータイポグラフィアイコン形状エレベーションモーションインタラクション状態振る舞いレイアウトアクセシビリティ言葉カラートークンタイプスケールトークン形状トークンエレベーショントークンモーショントークン状態トークンスペースと寸法のトークンコンポーネントボタンメインアクションボタンセグメントボタンボタングループメニュー付きボタンツールバーコピーボタンチェックボックスラジオボタンスイッチチップメニュースライダースライダーフィールドカレンダーDateTimePickerフィールドグループラジオグループチェックボックスグループセレクトセレクトフィールドメニューバーファイルアップロードファイルピッカー 上級者向けドロップゾーンテキスト入力欄 上級者向けテキストフィールドチップフィールドフィールドコンボボックス 上級者向けコンボボックスフィールド数値入力欄 上級者向け数値フィールドカラー入力欄 上級者向けカラーフィールドワンタイムコード入力欄 上級者向けワンタイムコードフィールド埋め込みテキスト入力欄 上級者向けチャットコンポーザーカード区切り線モーダルレイヤー 上級者向けダイアログリストリスト行ボトムシートサイドシートカルーセルコードブロックテーブルポップオーバーステップアコーディオン説明リスト図アプリシェルページヘッダーツリービュータイムライン画像プレビューハンドルサイズ変更できる枠スクロールエリアバッジプログレスインジケーターメーターナンバーティッカーローディングインジケータースナックバーツールチップキーボードショートカットタグインラインコードコールアウトアバター空の状態タググループスケルトンファイル項目色見本マーキーテキストタブタブビューアプリバーナビゲーションバーナビゲーションドロワー検索リンクページネーション前後のリンクステッパーパンくずリスト目次リンクカードFAB メニューステータスTanrei の作り方コントリビューションライセンスと帰属
ホームはじめにFlutter

Flutter

Flutter アプリに Tanrei を追加します。

content_copyMarkdown で表示

tanrei パッケージは、Dart だけで書かれています。ウィジェット、継承される TanreiTheme、生成されたトークンの定数を提供します。MaterialApp にも CupertinoApp にも依存せず、どちらの中でも、素の WidgetsApp の中でも動作します。

まだ公開していません

tanrei はまだ pub.dev にありません。プラットフォームは現在の仕様に追従してから公開し、それまで Flutter の CI は止めてあります。下の「ソースから」は chnotchy/tanrei からパッケージを加える方法、「公開後」は公開されてからの導入方法です。

インストール

ソースから

現在はビルドできません

Flutter のパッケージは、現在の仕様とトークンに追従していません。ソースは以前の版の生成されたトークンコードに合わせて書かれていて、現在のコードではコンパイルできません。追従するまで CI は止めてあり、ステータスページではそのコンポーネントを追従待ちとしています。以下はアプリに追加する手順で、パッケージが追従すれば動きます。

リポジトリをアプリの隣にクローンし、パスでパッケージに依存します。

flutter pub add "tanrei:{path: ../tanrei/packages/flutter}"

ローカルのクローンではなくリポジトリを追うには、flutter pub add "tanrei:{git: {url: https://github.com/chnotchy/tanrei, path: packages/flutter}}" を使います。

公開後

flutter pub add tanrei

使い方

import 'package:flutter/widgets.dart';
import 'package:tanrei/tanrei.dart';

class DeployButton extends StatelessWidget {
  const DeployButton({super.key, required this.isDeploying, required this.onDeploy});

  final bool isDeploying;
  final VoidCallback onDeploy;

  @override
  Widget build(BuildContext context) {
    return TanreiTheme(
      data: TanreiThemeData.platform(context),
      child: TanreiButton(
        variant: TanreiButtonVariant.filled,
        onPressed: isDeploying ? null : onDeploy,
        child: const Text('デプロイ'),
      ),
    );
  }
}

disabled というフラグはありません。Flutter 自身のボタンと同じく、onPressed に null を渡すとボタンが無効になります。

テーマとコントラスト

TanreiThemeData.platform(context) は、明るさと高コントラストのフラグを MediaQuery から読み取ります。固定するには、定数から始めてコピーします。

TanreiTheme(
  data: TanreiThemeData.dark.copyWith(contrast: TanreiContrast.high),
  child: const App(),
)

TanreiTheme はナビゲーターより上に置き、すべてのルートから見えるようにしてください。

テキストスタイル

TanreiTheme.of(context).system.typescale は、階層で名付けた 16 のテキストスタイルを TanreiTextStyle のトークンとして持っています。セクションのタイトルには heading2、本文には body、コントロールには label です。theme.textStyle(system.typescale.heading2)(または token.toTextStyle())で、Flutter の TextStyle に変換できます。theme.textStyle(token, emphasized: true) は、同じスタイルを、その太さにファミリーの強調のステップ(typescale.emphasis)を足した太さにしたものです。手で書くなら token.emphasized(system.typescale.emphasis) です。強調は太さであって、別のロールではありません。ロールと要素との対応は、タイポグラフィを参照してください。