Android
 Computer >> コンピューター >  >> システム >> Android

Flutter を使用してチップ計算機を作成する方法

Flutter モバイルアプリ開発フレームワークの人気が高まるにつれて、多くの企業が Flutter をプロジェクトに使用することを選択しています。

多くの開発者は、ウィジェットのシンプルな構造を使用してピクセル パーフェクトな UI を備えたアプリを開発できることを高く評価しています。 Flutter は、UI の開発がシンプルで、Dart プログラミング言語を使用して機能ロジックを強化できるため、モバイルアプリ開発の未来だと思います。

このチュートリアルでは、主に、シンプルな Tip Calculator アプリを作成して、Flutter フレームワークの基本を説明することに焦点を当てています。ステートフル ウィジェット クラスとステートレス ウィジェット クラスを含む標準的なコーディング パターンと、Flutter アプリの開発中に最もよく使用するいくつかのウィジェットについて説明します。

ここでのアイデアは、スターター Flutter プロジェクトをセットアップすることから始めることです。次に、全体的な UI と基本機能の実装に進みます。

それでは、始めましょう!

Flutter プロジェクトの設定方法

新しい Flutter プロジェクトを作成するには、システムに Flutter SDK がインストールされている必要があります。シンプルで迅速なインストール プロセスについては、フラッターの公式ドキュメントに従うことができます。

Android プラットフォーム用のアプリを開発する場合は、Android Studio と Android SDK も必要になることに注意してください。

ドキュメントに従ってすべてが正常にセットアップされたら、ターミナルで次の Flutter コマンドを実行できます。

flutter create tipCalculator

このコマンドは、スターター Flutter プロジェクトを自動的にダウンロードしてセットアップします。これで、Visual Studio Code IDE でプロジェクトを開くことができます。

デバイス シミュレーターまたは実際のスマートフォン デバイスが接続されている場合は、次のコマンドを実行するだけでアプリを起動できます。

flutter run

または、キーボードで「F5」を押して、VSCode のメニュー オプションをトリガーすることもできます。そのメニューから、アプリを起動するデバイスを選択できます。

拡張子が .dart のファイル内にいる必要があることに注意してください このコマンドを正常に実行するには.

上記のコマンドまたは F5 を使用してビルドして実行します エミュレータ/実際のデバイスで次のスターター テンプレートを取得するには:

Flutter を使用してチップ計算機を作成する方法

これで、Flutter アプリが稼働しているはずです。

メイン プロジェクト ファイル ma​​in.dart で何が行われているかについて、もう少し詳しく見ていきましょう。 .

ma​​in.dart で ファイルには、2 つのクラス オブジェクトがあります。 1 つはステートフル ウィジェットに拡張され、もう 1 つはステートレス ウィジェットに拡張されます。では、それはどういう意味ですか?

  • ステートフル ウィジェット:アプリの状態を格納するクラス。状態が変化し、このステートフル ウィジェット クラスのウィジェットのレンダリングをトリガーすることができます。動的な状態の変化に貢献します。
  • ステートレス ウィジェット:このクラスにはステートがありません。変更されないウィジェット ビューを表します。動的な状態の変化には寄与しません。

main.dart ファイルには main() も含まれています MyApp を呼び出す関数 runApp 内のクラス デバイスで Flutter アプリの起動をトリガーするメソッド。

チップ計算機の UI を構築する方法

UI の実装を開始するには、MyHomePageState 内にあるものをすべてクリアする必要があります。 クラスです。

それをクリアした後、単純な Scaffold を返します ビルド関数内からのウィジェット。

Scaffold ウィジェットは appBar を追加するためのプロパティを提供します body と同様に .ここでは、シンプルなアプリ バーを追加します。以下のコード スニペットで全体的な実装を確認できます:

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title:Text('Tip Calculator', style: TextStyle(color: Colors.black87),),
      ),
      body: Container()
    );
  }
}

appBar を追加した後、ビルドして実行します AppBar を使用して title のウィジェット 財産。エミュレータ画面に次の結果が表示されます:

Flutter を使用してチップ計算機を作成する方法
Flutter にはホット リロードがあることに注意してください Dartファイルの保存中。したがって、プロジェクトの Dart ファイルに変更を保存すると、その変更はエミュレーターに自動的に反映されます。

ステップ 1:アプリ バーをデザインする

ここでは、AppBar を変更します。 提供するさまざまなプロパティを使用するウィジェット。以下のスニペットで変更されたコードを確認できます:

appBar: AppBar(
  title: Text('Tip Calculator', style: TextStyle(color: Colors.black87),),
  centerTitle: true,
  elevation: 0.0,
  backgroundColor: Colors.white70,
),

ビルドして実行すると、エミュレータ画面に次の結果が表示されます:

Flutter を使用してチップ計算機を作成する方法

ここでは、基本的な AppBar のいくつかを使用しました

などのウィジェット プロパティ
  • elevation これにより、z-index と同様に、アプリ バーで影の効果を制御できます。
  • centerTitle タイトルを一元化するため、
  • 背景色も白に変更しました。

ステップ 2:足場本体を設計する

この時点まで、空の Container しかありませんでした body のウィジェット 財産。ここで、いくつかのプロパティと子ウィジェットを Container に追加します。 以下のコード スニペットで指示されているウィジェット:

body: Container(
  color: Colors.white70,
  padding: const EdgeInsets.all(16.0),
  child: Center(
    child: Form(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
        ],
      ),
    ),
  ),

ビルドして実行すると、エミュレータ画面に次の結果が表示されます:

Flutter を使用してチップ計算機を作成する方法

上のスクリーンショットでわかるように、ボディの背景色を白に変更しました。また、いくつかの padding を追加しました Center とともに UI 全体を本体に集中させる子ウィジェットとしてのウィジェット。

Center ウィジェットには Form があります ウィジェット (その子の 1 つ) に、テキスト フィールドを持つ単純なフォームを作成します。

そして最も重要なのは、Column があることです。 Form の子ウィジェットとしてのウィジェット . Column ウィジェットは children を提供します 画面に垂直に表示される任意の数のウィジェットを統合できるウィジェット配列プロパティ。

ステップ 3:定数と変数を定義する

フォーム要素 (テキスト フィールドを含む) を実装する前に、入力フィールドからの入力を処理するためにいくつかの定数を定義する必要があります。

以下のコード スニペットで、必要な定数と変数を確認できます。

// This is the default bill amount
  static const defaultBillAmount = 0.0;

  // This is the default tip percentage
  static const defaultTipPercentage = 15;

  // This is the TextEditingController which is used to keep track of the change in bill amount
  final _billAmountController =
      TextEditingController(text: defaultBillAmount.toString());

  // This is the TextEditingController which is used to keep track of the change in tip percentage
  final _tipPercentageController =
      TextEditingController(text: defaultTipPercentage.toString());

  // This stores the latest value of bill amount calculated
  double _billAmount = defaultBillAmount;

  // This stores the latest value of tip percentage calculated
  int _tipPercentage = defaultTipPercentage;

上記のコード スニペットでは、TextEditingController を使用していることがわかります。 方法。このコントローラ メソッドにより、TextFormField でテキスト入力を処理できます。 ウィジェットは後でデフォルト値に初期化されます。

ステップ 4:入力フォーム フィールドを追加する

ここで、TextFormField を使用して 2 つの入力フォーム フィールドを追加します。 ウィジェット。

このウィジェットを使用している間、以前に定義したコントローラー変数をコントローラー プロパティに強制的に割り当てる必要があります。以下のコード スニペットで、ウィジェットの全体的なコーディング実装を確認できます。

body: Container(
        color: Colors.white70,
        padding: const EdgeInsets.all(16.0),
        child: Center(
          child: Form(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                TextFormField(
                  key: Key("billAmount"),
                  controller: _billAmountController,
                  keyboardType: TextInputType.numberWithOptions(decimal: true),
                  decoration: InputDecoration(
                      hintText: 'Enter the Bill Amount',
                      labelText: 'Bill Amount',
                      labelStyle: TextStyle(
                        fontSize: 25,
                        letterSpacing: 1,
                        fontWeight: FontWeight.bold
                      ),
                      fillColor: Colors.white,
                      border: new OutlineInputBorder(
                        borderRadius: new BorderRadius.circular(20.0),
                      ),
                    ),
                ),
                SizedBox(height: 25,),
                TextFormField(
                  key: Key("tipPercentage"),
                  controller: _tipPercentageController,
                  keyboardType: TextInputType.number,
                  decoration: InputDecoration(
                    hintText: 'Enter the Tip Percentage',
                    labelText: 'Tip Percentage',
                    labelStyle: TextStyle(
                      fontSize: 25,
                      letterSpacing: 1,
                      fontWeight: FontWeight.bold
                    ),
                    fillColor: Colors.white,
                    border: new OutlineInputBorder(
                      borderRadius: new BorderRadius.circular(20.0),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),

ここでは、keyboardType を割り当てています。 ユーザーが入力フィールドをタップしたときに、必要なタイプのキーボードを表示できるようにするプロパティ。

InputDecoration を使用して入力フィールドのスタイルを設定できる装飾プロパティもあります。 ウィジェット。

InputDecoration で ウィジェットには、プレースホルダー テキストと入力の上のラベルを表示するのに役立ついくつかのプロパティがあります。 border も適用しました 曲線の輪郭線を表示するプロパティ

ビルドして実行すると、エミュレータ画面に次の結果が表示されます:

Flutter を使用してチップ計算機を作成する方法

ステップ 5:イベント リスナーと関数を追加する

ユーザーが請求額またはパーセンテージを入力するとすぐにチップ額を計算するため、テキスト入力フィールドの変更をリッスンする必要があります。

そのためには、addListener を使用してイベント リスナーをコントローラーに追加する必要があります。 方法。

ここで、入力フィールドで変更が発生するとすぐに、特定の関数をトリガーして、請求額とチップの割合を更新したいと考えています。

そのために、setState で必要な関数を使用します。 何らかの変更が発生するとすぐに UI 全体をレンダリングするのに役立つメソッド。

setState メソッドは build の再実行をトリガーします メソッド。

以下のコード スニペットで、全体的なコーディングの実装を確認できます。

@override
void initState() {
  super.initState();
  _billAmountController.addListener(_onBillAmountChanged);
  _tipPercentageController.addListener(_onTipAmountChanged);
}

_onBillAmountChanged() {
  setState(() {
    _billAmount = double.tryParse(_billAmountController.text) ?? 0.0;
  });
}

_onTipAmountChanged() {
  setState(() {
    _tipPercentage = int.tryParse(_tipPercentageController.text) ?? 0;
  });
}

ここに initState があります メソッドも。このメソッドは、アプリのこの画面に入るとすぐに実行されます。そのため、画面に入るとすぐにイベント リスナーを追加します。

ステップ 6:金額セクションを追加する

UI ウィジェットに戻ります。列ウィジェット内の入力フィールドのすぐ下に金額セクションを追加します。

ここでは、SizedBox も使用します。 これにより、ウィジェット間に必要なスペースを確保できます。以下のコード スニペットで、Amounts セクションのコーディング実装を確認できます。

),
SizedBox(height: 20,),
Container(
  margin: EdgeInsets.all(15),
  padding: EdgeInsets.all(15),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.all(
      Radius.circular(15),
    ),
    border: Border.all(color: Colors.white),
    boxShadow: [
      BoxShadow(
        color: Colors.black12,
        offset: Offset(2, 2),
        spreadRadius: 2,
        blurRadius: 1,
      ),
    ],
  ),
  child: Column(
    children: [
      Text("Tip Amount"),
      Text("Total Amount")
    ],
  ),
),

ここに Container があります 必要なスタイルの装飾がいくつかあります。 child プロパティには別の Column があります 2 つの Text を持つウィジェット 垂直に配置されたウィジェット。

ビルドして実行すると、エミュレータ画面に次の結果が表示されます:

Flutter を使用してチップ計算機を作成する方法

ステップ 7:金額を表示する別のステートレス ウィジェットを作成する

チップの金額と合計金額を少しスタイリングして表示したいので。状態は含まれませんが、Stateful ウィジェットから渡された値に依存します。

AmountText の全体的なコーディング実装を見ることができます 以下のコード スニペットのステートレス ウィジェット クラス:

class AmountText extends StatelessWidget {
  final String text;

  const AmountText(
    this.text, {
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(8),
      child: Text(text.toUpperCase(),
          style: TextStyle(fontWeight: FontWeight.bold, color: Colors.blueAccent, fontSize: 20)),
    );
  }
}

ここでは、コンストラクター クラスを使用して、表示される実際のテキストの値を取得しました。このクラスのビルド メソッドは Container を返します シンプルな padding のウィジェット そして Text 子ウィジェットとしてのウィジェット。

AmountText以来 ウィジェットの準備ができたので、ステートフル ウィジェットでウィジェットを呼び出すことができます。

Column 内にウィジェットを追加します 以前に単純な Text で定義したウィジェット ウィジェット。 Text ウィジェットを AmountText に置き換えるだけです。 ウィジェットを開き、必要なテキスト値を渡します。

以下のコード スニペットでコーディングの実装を確認できます:

Container(
  margin: EdgeInsets.all(15),
  padding: EdgeInsets.all(15),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.all(
      Radius.circular(15),
    ),
    border: Border.all(color: Colors.white),
    boxShadow: [
      BoxShadow(
        color: Colors.black12,
        offset: Offset(2, 2),
        spreadRadius: 2,
        blurRadius: 1,
      ),
    ],
  ),
  child: Column(
    children: [
      AmountText(
        'Tip Amount: ${_getTipAmount()}',
        key: Key('tipAmount'),
      ),
      AmountText(
        'Total Amount: ${_getTotalAmount()}',
        key: Key('totalAmount'),
      ),
    ],
  ),
),

ここでは、AmountText 内で関数を渡しています。 ウィジェット。以下のコード スニペットに示すように、この関数はそれぞれのチップの金額と合計金額の値を返します。

  _getTipAmount() => _billAmount * _tipPercentage / 100;

  _getTotalAmount() => _billAmount + _getTipAmount();

最後に、ビューを終了するときにコントローラーを終了する必要があります。そのためには、組み込みの dispose を使用する必要があります 関数。この関数は、現在の画面を終了するときに実行されます。

このメソッド内で、dispose でコントローラーを呼び出す必要があります 入力テキスト コントローラーを終了するためのメソッド。これにより、コントローラーは入力フィールドの変更をリッスンしなくなります。

以下のコード スニペットで dispose 関数を確認できます。

@override
void dispose() {
  // To make sure we are not leaking anything, dispose any used TextEditingController
  // when this widget is cleared from memory.
  _billAmountController.dispose();
  _tipPercentageController.dispose();
  super.dispose();
}

ビルドして実行すると、Tip Calculator の実装の最終結果が得られます。これは、以下のデモで確認できます。

Flutter を使用してチップ計算機を作成する方法

入力フィールドの入力を変更すると、両方の金額の値が変化することに気付くでしょう。

これで、このチュートリアルは終了です。 Flutter フレームワークと Dart を使用して、簡単なチップ計算機を実装しました。

ここからどこへ行く?

このチュートリアルの主な目的は、単純な Tip Calculator を作成することで、Flutter アプリ開発フレームワークの基本的なプログラミング パターンを説明することでした。

探索できる興味深いウィジェットや追加機能が他にもたくさんあります。機能コンポーネントを同じに保ちながら、アプリの UI を変更できます。

全体として、Flutter はウィジェット パターンを使用して複雑な UI デザインをよりシンプルにします。子プロパティを使用してウィジェットを積み重ねるだけで、優れた UI を簡単に作成できます。

次のステップは、Flutter のナビゲーション メカニズムを使用して別の画面に移動することです。 Flutter は、カスタム ドロワー メニューと下部タブの追加も簡素化します。

これは、Flutter 開発の出発点にすぎません。目に見える以上のものがあります。探求とコーディングを続ける必要があります。

プロジェクト全体のデモは Codepen で利用できます。

Flutter アプリのインスピレーションは、既に公開されている他のアプリから得ることができます。

ハッピー コーディング!


  1. Windows PC で Grammarly を使用する方法

    日常業務になんらかの形式のライティングが含まれる場合、文法、スペル、明瞭度などをチェックするタイピング アシスタント アプリは不可欠ではありません。実際、この時点で、それはほとんど必要です。 Grammarly は、そのような広く知られているライティング アシスタントの 1 つです。さらに、Grammarly は Windows 用のブラウザー拡張機能および Windows アプリとして利用できます。それでは、両方の方法で Windows で Grammarly を使用する方法を見てみましょう。 Windows で Grammarly を使用する方法 Windows ユーザーの場合、Gr

  2. PC で Telegram を使用する方法

    Telegram は、プライベート メッセージングの世界で気密性の高いセキュリティを備えた数少ないアプリの 1 つとして有名になりました。電話番号ではなく、新しい人とつながるためのユーザー名に依存しているため、自分の人生をプライベートに保ちたい人に人気の選択肢になっています.すべてが安全なプライベート通信で終わるわけではありませんが、ユーザーが物事を目立たなくするのに役立ちます. ユーザーベースが着実に増加しているため、一部のユーザーがデスクトップからテレグラムにアクセスしたいと考えていることは驚くことではありません.ありがたいことに、すべての一般的なメッセージング プラットフォームと同様に