Flutter動画やってみよ(Foodアプリ)2/5
今回も、Youtubeで見かけた Flutter UI作成動画をなぞります。
前回は、こちら。 Flutter UI作成動画やってみよ(Foodアプリ)その1 - もっぺんプログラミング(´・ω・`)
フォントを変更する
フォントもassetsとして扱うことで、読み込むことが出来るようです。
フォントは、ここからダウンロード出来ます。 Flutter-food-delivery-app-ui/assets/fonts at master · afgprogrammer/Flutter-food-delivery-app-ui · GitHub
アセットとして利用出来るように、pubspec.yaml に fonts 以下を追加します。
flutter: fonts: - family: Roboto fonts: - asset: assets/fonts/Roboto-Regular.ttf - asset: assets/fonts/Roboto-Bold.ttf - asset: assets/fonts/Roboto-Light.ttf
アプリのテーマに、上記で定義したフォントファミリーを指定します。
void main() => runApp( MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData(fontFamily: 'Roboto'),
リロードすると、フォントが適用されます。
(稲妻マークのリロードが必要だと思います。)
アニメーションを追加する。
アニメーションの動作を加えるWidgetを作成します。
lib の下に、animations フォルダを作成し、FadeAnimation.dart ファイルを作成します。
StatelessWidget で FadeAnimation というクラス名にします。
※動画では、StatefulWidgetで作成していますが、後でStatelessWidgetに修正していました。 ですので、StatelessWidget で作成します。
アニメーションで使う外部ライブラリの追加。
pubspec.yaml に、以下のライブラリを追加
dev_dependencies: flutter_test: sdk: flutter simple_animations: ^1.3.3 page_transition: ^1.1.5
動画で設定しているバージョンと異なっています。
ライブラリのバージョンは、以下のサイトでチェックして設定しました。
simple_animations の最新ライブラリは、2.2 系でしたが
最新バージョンにすると、使用しているクラスが Duplicated になっていたので
一旦は、動画と同じバージョンで進めます。
Visual Studio Code の flutter pub get が終了しない場合は
コマンドラインから、flutter pub get を実行してみることをおすすめします。
ログから終わらない原因が分かる場合があります。
作成した FadeAnimation クラスのコードを以下のように修正します。
import 'package:flutter/material.dart'; import 'package:simple_animations/simple_animations.dart'; class FadeAnimation extends StatelessWidget { final double delay; final Widget child; const FadeAnimation(this.delay, this.child); @override Widget build(BuildContext context) { final tween = MultiTrackTween([ Track('opacity').add(Duration(milliseconds: 500), Tween(begin: 0.0, end: 1.0) ), Track('translateX').add(Duration(milliseconds: 500), Tween(begin: 120.0, end: 0.0), curve: Curves.easeOut ) ]); return ControlledAnimation( delay: Duration(milliseconds: (500 * delay).round()), duration: tween.duration, tween: tween, child: child, builderWithChild: (context, child, animation) => Opacity( opacity: animation['opacity'], child: Transform.translate( offset: Offset(animation['translateX'], 0), child: child, ), ), ); } }
次に、StarterPage を修正して組み込みます。
先程作ったWidgetツリーの間に、FadeAnimation を挟んでいっています。
FadeAnimation のコンストラクタは、1つ目の引数で遅延時間、2つ目の引数で子Widgetツリーを渡します。
child: Padding( padding: EdgeInsets.all(20.0), child: Column( ... children: <Widget>[ FadeAnimation(.5, Text('Taking Order For Delivery', style: TextStyle(color: Colors.white, fontSize: 50, fontWeight: FontWeight.bold, ))), SizedBox(height: 20, ), FadeAnimation(1, Text("See resturants nearby by \nadding location", style: TextStyle(color: Colors.white, height: 1.4, fontSize: 18))), SizedBox(height: 100, ), FadeAnimation(1.2, Container( ...
ここまで実装して、リロードを押すと
FadeAnimationで装飾したWidgetが、右側からスライドして入ってきます。
アニメーションを簡単に組み込むことが出来ました。 すごい。
つづきます。