こんにちは、ぎもちんです。 こちらは Flutter Advent Calendar 2023 20日の記事です。 今回は Dart の FFI 周りを調べる中で気になった Native Assets という機能について紹介したいと思います。 FFI について Native Assets に入る前に、まず FFI について軽く触れておきます。 FFI とはざっくり説明すると、 Dart から他言語で記述された機能を使用するための仕組みです。 これを使うと、 Dart から C 言語等で記述されたネイティブの関数を呼び出すことができます。 FFI で起きる問題 FFI を使った実装は便利な反面、 パッケージとして公開しづらいという問題があります。 ネイティブの機能を FFI で使うためには、ネイティブライブラリをリンクするケースが多いです。 ただ、この設定を自動で行える仕組みは Dart 自
FlutterKaigi2023 先月10日、FlutterKaigi2023が開催されました。 当日、私は運営メンバーとして当日参加していた為、あまりセッションを聞く時間がありませんでした。 しかし!嬉しいことに、その後Youtubeにて見逃し配信が公開されておりましたので、その内容をご紹介したいと思います! 登壇資料については、いせりゅーさんがまとめてくだすってたので併せて御覧くださいませ https://qiita.com/isekiryu/items/f1ebf59715507fafc120 Session内容 セッション内容としては、下記のとおりです。 1. Congratulatory Speech and 基調講演(Flutter's 8 years journey) なんと、Flutter開発者のAndrew Brogdonさんが海外からのビデオレター! 背景がちょっと気に
この記事はカバー株式会社 Advent Calendar 2023 15日目の記事になります。 カバー株式会社エンジニアのSです。よろしくお願いいたします。 前回の記事は @ys-cover による「カバー株式会社におけるAWS Control Towerの導入」でした。AWS Control Tower の導入を検討されている方にとって、とても興味深い内容となっておりますので、こちらの記事もぜひご覧ください。 はじめに 先日弊チームメンバーが作成した記事が公開されました。記事に対する反応で多かったのが API クライアントの自動生成の箇所でした。 API クライアントの自動生成には openapi-generator の dart モジュールを利用しています。早期に API クライアント自動生成の仕組みを整えることで、クライアントチームは本質的な機能実装に注力可能になりました。 また A
Androidの通知でアニメーションを表示できるのでしょうか? できるとすればアイコンですよね。 AndroidのNotificationでは SmallIcon と LargeIcon の2種類のアイコンを設定できます。 val notification = NotificationCompat.Builder(this, channel.id) .setSmallIcon(R.drawable.ic_android) .setLargeIcon(Icon.createWithResource(this, R.drawable.ic_android)) .setContentTitle("Title") .setContentText("Text") .build() notificationManager.notify(1, notification) ステータスバーに表示されるのが
Flutter ではたくさんのチャート描画ライブラリが揃っており、基本的なものであればサクッと実装できてしまいます。 しかしながら、ちょっと凝ったデザインにしようと思ったり、機能的にちょっと痒いところに手が届かないなと思うケースもしばしばあります。 今回はライブラリに手を加えるのではなく、Flutter に標準で用意されている CustomPaintを利用して独自のチャートを作ってみようと思います。 作成したもの この画面は、例えばレンタルスペースの期間ごとの空き状況を可視化するといった目的で利用されます。横長のバーの一つ一つが予約データに対応していて、利用開始〜終了までを表現しています。また、予約者名をバーの上に表示したり、ステータスによって色を変えたり、クリックしたときに予約詳細画面に遷移したり、、、と、ちょっと凝った機能が必要でした。 これらの機能についてどのように実装したのか、ポイ
はじめに アプリケーション開発において、APIテスト大切なものであり、テストを行うことで、アプリケーションが外部のデータソースやサービスと正しく通信できることを保証できます。 http_mock_adapterは、FlutterのDioライブラリ用のテストツールで、実際のAPIサーバーにリクエストを送ることなく、APIレスポンスを模倣(モック)してテストを行うことが可能です。これにより、実際のサーバーがなくても、APIの動作を効率的にテストできます。 この記事では、http_mock_adapter を使用してAPIのモックを作成し、基本的なテストコードの書き方について解説します。 環境 ・Flutter 3.16.4 ・パッケージは以下を使用(本記事で使用するもののみ書いています。) dependencies: freezed_annotation: ^2.4.1 dio: ^5.4.0
環境 M2 Mac mini macOS 13.5 Android Studio Giraffe Xcode 15.0.1 Flutter 3.13.9 はじめに 最近Mac miniを購入して、Flutterで新しいアプリを作成しました。環境依存部は--dart-define-from-fileで実装したのですが、Firebase Test Labで動かすのに色々と苦労したので記事にします。 尚、ここでは Integration Test を作成してローカル環境での実行まではできているものとします。 Android インストルメンテーションテスト Flutter との統合テストの「Androidの設定」を行います。リンク先のページにgradlewで--dart-defineを使用する場合の説明も書かれており、key=valueをbase64エンコードした値をカンマ区切りで-Pdart-d
環境 M2 Mac mini macOS 13.5 Xcode 15.0.1 Flutter 3.13.9 はじめに --dart-define-from-fileでFirebase Test Labに続き、Xcode CloudでCI/CD環境を構築する時にも--dart-define-from-fileを適用するのに苦労したので、記事に残しておきたいと思います。 尚、--dart-define-from-file以外の部分についてはContinuous delivery with Flutterに従ってCI/CD環境が構築できているものとします。 定義ファイルの配置方法 --dart-define-from-fileを使用する場合、定義ファイルには通常秘匿情報が含まれるので、git管理対象外にしていると思います。そのため、Xcode Cloudで--dart-define-from-f
目的 Flutterで端末にファイルを保存したら、読み取りしたり、削除したりしたいするのが目的です。 下記のSDKを使うことで実現できます。 SDK導入
IntrinsicHeight、IntrinsicWidthとは IntrinsicHeight、IntrinsicWidthを使う際、下記の4つのメソッドが呼び出されて、UIを描画している。IntrinsicHeightの応用の場面としては、子たちの高さやサイズを揃えたい時です。 @override double computeMinIntrinsicWidth(double height) { if (child != null) return child!.getMinIntrinsicWidth(height); return 0.0; } @override double computeMaxIntrinsicWidth(double height) { if (child != null) return child!.getMaxIntrinsicWidth(height);
要件 アプリからOSの設定画面へ遷移したい SDK 既存のSDKで実現できるかを調べてみました。 下記のSDKでOSのアプリ設定画面が開けます。 permission_handler app_settings permission_handlerについて、iOSとAndroidともOSのアプリを開けます。 サンプルソースは下記です。 import 'package:permission_handler/permission_handler.dart'; TextButton( onPressed: () async { openAppSettings(); }, style: TextButton.styleFrom( primary: Colors.blue, ), child: Text('設定を開く'), ), app_settingsについて、下記の遷移画面が用意されていますが、A
Flutterレイアウトシリーズのその他の記事 Stackの使い方 FlutterレイアウトのOverlayの使用 FlutterレイアウトのFlex、Row、Column、Wrap、Stack FlutterレイアウトのExpanded、Flexible、Spacer FlutterのBoxConstraintsを理解する Flutterのレイアウトウェジェットって、複数子を持つ親と一人子しか持たない親ウェジェットがあります。複数個子ウェジェットを持つ親について、Flex、Row、Column、Wrap、Stackがあり、その説明は前の記事に詳しく記載しました。この記事は一人子を持つレイアウトウェジェットを理解するため書いたものです。 ※本記事は下記のZenn本にまとめました。 https://zenn.dev/cxj/books/07def04506182d ConstrainedBo
はじめ ご存知の通り、FloatingActionButtonの位置はFloatingActionButtonLocationで定義するが、static変数何個かしか用意されてなく、好きな位置調整が簡単にできない。 ここでカスタマイズ方法&ソースを簡単にまとめます。 floatingActionButtonLocation:FloatingActionButtonLocation.centerDocked, import 'package:flutter/material.dart'; class CustomizeFloatingLocation extends FloatingActionButtonLocation { FloatingActionButtonLocation location; double offsetX; double offsetY; CustomizeFlo
Flutterの描画 Flutterには、Canvas, Paint, Pathを用いてカスタマイズ描画できる(円形、多角形、直線、破線など) Paint編 Canvas編 Path編 ※本記事は下記のZenn本にまとめました。 描画の属性 Canvas(キャンバス) Paint(筆) Path(パス) Canvas関数のまとめ ---->[キャンバスの状態]---- void save() void saveLayer(Rect bounds, Paint paint) void restore() int getSaveCount() ---->[キャンバス変換]---- void skew(double sx, double sy) void rotate(double radians) void scale(double sx, [double sy]) void translat
目的 FlutterのCustomPaint を用いて単振動のアニメーションを描くことです。 前提知識 単振動とは 単振動とは、最も基本的な振動のことで等速円運動を、その円の直径上に投影したのと同じように動く、物体の往復運動のこと。 このとき、往復に要する時間を周期、振動半径を振幅という。 方程式 $$ {\displaystyle x=A\cos(\omega t+\phi )} $$ 等速円運動の周期を T [s] 角速度を ω [rad/s] 回転数を f [Hz] 円の半径を A [m] 単振動は、正弦波と密接な関係がある運動です。等速円運動と単振動と正弦波は密接な関係があります。これらにおいては以下の式が一般的に成り立ちます。 $$ {\displaystyle f={\frac 1T}} $$ $$ {\displaystyle ω = 2πf = {\frac {2π}T}}
カスタマイズ描画について 前編 Paint編 Canvas ※本記事は下記のZenn本にまとめました。 ちょっと複雑な絵の場合、Pathを使うと便利になります。ポリゴンや各種曲線など複雑な図形の描画はpathの利用をお勧めます。 pathの移動 Pathの移動について、下記の関数があります。 moveTo(移動) relativeMoveTo(移動) lineTo(直線) relativeLineTo(直線) arcTo(アーク) arcToPoint(アーク) relativeArcToPoint(アーク) conicTo(円錐) relativeConicTo(円錐) quadraticBezierTo(ベジェ曲線) relativeQuadraticBezierTo(ベジェ曲線) cubicTo(3次ベジェ曲線) relativeCubicTo(3次ベジェ曲線) moveToとlin
カスタマイズ描画について 前編 Paint編 Path編 ※本記事は下記のZenn本にまとめました。 キャンバス変換 キャンバス変換関数は下記5つある。 void skew(double sx, double sy) void rotate(double radians) void scale(double sx, [double sy]) void translate(double dx, double dy) void transform(Float64List matrix4) translate(double dx, double dy) 並行移動 scale(double sx, [double sy]) スケール rotate(double radians) 回転する skew(double sx, double sy) 斜め切り替え transform(Float64List
isAntiAlias効果 isAntiAliasのデフォルト値はtrue, 下記の例でisAntiAliasの効果を確認しましょう。 Paint paint = Paint(); canvas.drawCircle( const Offset(100, 100), 90, paint ..color = Colors.blue ..strokeWidth = 5); canvas.drawCircle( const Offset(100 + 190.0, 100), 90, paint ..isAntiAlias = false ..color = Colors.red); 上記の例で、よく見ないとわからないが、微妙に差異がある。青色の円が滑らかであり、赤色の方は若干鋸歯状である。 style 筆の塡充方式は2つがある。PaintingStyle.fillは塡充、PaintingStyl
前に記事ではFlutterのカスタマイズ描画の使い方を詳しく書きましたが、それ詳細の運用はまだ書いてなく、今回の記事では、CustomPaintのPathを使って破線を描きます。 本記事のサンプルソースはGithubにご参考ください。 破線 破線を描く考え方というのは、空白部分を飛ばして、実線部分を書くことです。 まずは直線1本からスタートします。 @override void paint(Canvas canvas, Size size) { canvas.translate(size.width / 2, size.height / 2); Paint paint = Paint()..style = PaintingStyle.stroke ..color=Colors.green..strokeWidth = 2; Path path = Path(); path.moveTo(-
※本記事は下記のZenn本にまとめました。 目標 下記のような映画チケットを描くことです。 カスタマイズ描画基本はCustomPaintの継承して描画しますが、今回はShapeBorderを継承してdecorationのshapeで装飾したいと思います。 ShapeBorder継承 5つの抽象メソッドがあります。 import 'package:flutter/material.dart'; class TicketBorder extends ShapeBorder{ @override // TODO: implement dimensions EdgeInsetsGeometry get dimensions => throw UnimplementedError(); @override Path getInnerPath(Rect rect, {TextDirection? te
Create native settings for Flutter app in minutes. Use single interfaces to build More... Settings UI for Flutter # Overview: # Build the beautiful settings screen UI in one moment with Settings UI for Flutter Installing: # Add the dependency in your pubspec.yaml file. dependencies: settings_ui: <latest version> Import the settings_ui package. import 'package:settings_ui/settings_ui.dart'; Basic U
この記事は、【 可茂IT塾 Advent Calendar 2023 】の14日目の記事です。 TDD(テスト駆動開発)を行う時に、FirebaseAuth の認証系のテストについて 色々と調べたので、基本的な部分を記事にしました。誰かのお役に立てれば、幸いです。 この記事では、Flutterのテストについては詳しく説明していないので、 知りたい方は下の記事などが参考になると思われます。 この記事では、Widgetテストにおける FirebaseAuth のテストについて書いてあります。 実機やエミュレーターを使用しないWidgetテストでは、FirebaseAuth のテストは、モックを使用して行います。 モック用のパッケージが用意されており、こちらを使用します。 ちなみに、状態管理は riverpod です。 ドキュメントにもテストの項目が用意されているので、こちらも参考になります。
Flutter で仕事したい人のための Widget 入門 で説明した通り、Flutter では基本的に StatelessWidget や StatefulWidget を継承したクラスで build() をオーバーライドし、そこに UI を構築する処理を書いていきます。 (厳密には、 StatefulWidget の場合は State クラスの build()) 例↓ class LoginPage extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(32), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAx
この記事は Flutter #3 アドベントカレンダー 2020 - Qiita 8 日目の記事です。 Flutter でアプリ開発をする上で StatefulWidget の setState() を使ったことが無い、という方はおそらくいないでしょう。StatefulWidget の「状態」を管理する State に対して、その状態が変化したことを教えて画面の再描画を依頼するアレです。 Flutter のチュートリアルでも真っ先に出てくる、誰もが知っているこの State.setState ですが、この記事では Flutter のソースコードを読みながら具体的に Element ツリー上で何が起きて画面が更新されているのかを見ていきたいと思います。 これが何の役に立つのかと言われると微妙なところですが、例えば「setState() って細かく何度も呼んじゃって良いの?」のような疑問がもし
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く