Open10
Flutterの逆引き大全
ImagePickerで選択した画像がキャッシュに残り続けてストレージを圧迫するのでどうにかしたい
キャッシュを削除する手段を構築
画像を選択したらすぐ削除する
コード
Future<void> onPickImage() async {
final xFile = await ImagePicker().pickImage(source: ImageSource.gallery);
if (xFile == null) {
return;
}
final bytes = await xFile.readAsBytes(); // 👈 画像バイナリを取得
setState(() {
_imageBytes = bytes; // 👈 画像バイナリをセット
});
File(xFile.path).deleteSync(); // 👈 キャッシュを削除
}
キャッシュ削除機能作って実行
コード
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:path_provider/path_provider.dart';
class TmpCacheDirectory {
TmpCacheDirectory._();
static late final Directory _dir;
static Future<void> configure() async {
if (Platform.isIOS) {
_dir = Directory.systemTemp;
} else {
_dir = await getTemporaryDirectory();
}
}
static Future<void> deleteFiles() async {
await compute<Directory, void>(
(dir) {
final list = dir
.listSync(recursive: true, followLinks: false)
.whereType<File>()
.toList();
for (final file in list) {
file.deleteSync();
debugPrint('delete: ${file.path}');
}
},
_dir,
);
}
}
アプリ起動時に削除する
void main() {
...
/// Delete Cache
Future(() async {
await TmpCacheDirectory.configure();
await TmpCacheDirectory.deleteFiles();
});
runApp(const App());
}
参考記事
Pull To RefreshやPagination操作を簡単に実装できる便利なパッケージ
SwiftUIのPreviewのように画面毎に確認できる機能は?
Flutterでオーディオを扱うならこのパッケージ
- オーディオ設定 audio_session
- 効果音 soundpool
- ミュージック just_audio
JSONデータを手軽にキャッシュしたい
-
json_cache
- httpクライアントと一緒に使えばResponseのキャッシュ管理ができるので、オフライン対応(取得のみで)もできそう。
iOS Widget Extension / Android Widgetを実装したい
Xとかで長押しすると出てくるコンテキストメニューを実装したい
flutter_linkifyのSelectableLinkifyを長押ししてもメニューが出ない時の対応
ワークアラウンド
PRがマージされ次第このスクラップを削除する。
import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
extension SelectableLinkifyExtension on SelectableLinkify {
static Widget defaultContextMenuBuilder(
BuildContext context, EditableTextState editableTextState) {
return AdaptiveTextSelectionToolbar.editableText(
editableTextState: editableTextState,
);
}
}
SelectableLinkify(
onOpen: (link) {
...
},
text: 'コメント',
contextMenuBuilder: SelectableLinkifyExtension.defaultContextMenuBuilder, // 👈 追加
),
アプリがバックグラウンド状態でも処理する方法
処理の終わりが決まっていない
- 歩数を常に監視してローカル通知を出したい
説明
-
background_task
- iOS / Android 共に位置情報取得をバックグラウンドでも動くようにして位置情報変更時に発火するリスナー内でやりたいことを実装する。
- 解説記事
処理の終わりが決まっている
- 写真や動画アップロードなど重たい処理を継続させたい
説明
-
workmanager
- 多分できると思う(震声)
Flutterのバージョン管理
使い方
fvmのインストール
# fvmをインストール
dart pub global activate fvm
# または flutter pub global activate fvm
# fvmのバージョン確認
fvm --version
PATHを通す
~/.zshrc
または ~/.bashrc
等の環境設定ファイルにfvmのpathを設定する。
export PATH="$PATH:$HOME/.pub-cache/bin"
fvmで利用できるSDKをインストールする
# 利用できるflutterのバージョン確認
fvm releases
# flutter sdkをインストール
fvm install 3.16.5
Android Studio で fvm のFlutter SDKを利用するよう設定する
該当するプロジェクトに移動して、利用したいsdkを選択する。
fvm use 3.16.5
Preferences (又は Settings) > Language & Frameworks > Flutter
のSDK内 Flutter SDK path をfvmのパスを設定する。
/{プロジェクトまでのパス}/.fvm/flutter_sdk
使い方
asdfのインストール
# Homebrewでインストール
brew install asdf
# ターミナル実行時にasdfを有効にする
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
asdf経由でflutterをインストール
# インストールできるFlutterのバージョン確認
asdf list all flutter
# stableの最新バージョンをインストール
asdf install flutter latest
# バージョン指定してインストール
asdf install flutter 3.16.5-stable
# プロジェクトのディレクトリに移動していない場合は移動
cd アプリプロジェクトのディレクトリ
# アプリプロジェクトで使用したいバージョンを指定、.tool-version作成され、gitで管理する
asdf local flutter 3.16.5-stable
# flutterのバージョンを確認して指定されたバージョンが表示されていればOK
flutter --version
# アンインストールする場合
asdf uninstall flutter 3.16.5-stable