0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ApplicationSupportDirectoryで読み書き

Posted at

前回の記事の続きです。

途中でcsvからJSONの読み書きに変更しています。

JSONの保存先をローカルパスからApplicationSupportDirectoryに変更

Windowsパス読み取りパッケージのインストール

今まではローカルパスD:/app.jsonにJSONを保存して読み書きしていましたが、Windowsの流儀に従ってApplicationSupportDirectoryに保存するように修正します。flutter.devのリポジトリには共通パッケージ版の https://pub.dev/packages/path_provider がありますが、今回はこちらのwindows専用パッケージを導入します。

パスの設定例

dart
final _provider = PathProviderWindows();
late File _appSetting;
late File _appPosition;

Future<void> initDirectories() async {
  final basePath = await _provider.getApplicationSupportPath();
  _appSetting = File("$basePath\\AppSetting.json");
  _appPosition = File("$basePath\\AppPosition.json");
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await initDirectories();

FutureクラスでinitDirectories()メソッドを作成し、エントリーポイントのmain()で呼び出してグローバル変数に値をセットします。
※私はFlutterの流儀がまだ把握できていないので、ご自身のやり方で設定してみてください。

WindowsにおいてgetApplicationSupportPath()を参照すると以下のパスが取得されます。
C:\Users\{youre-accountname}\AppData\Roaming\{company-name}\{app-name}

{youre-accountname} = yoyo(Windowsのアカウント名)
{company-name} = com.yoyo(会社名)
{app-name} = flutter_sticky(アプリ名)

置きかえるとこうなるはずですが、規定値ではcom.exapmleに出力されます。
C:\Users\yoyo\AppData\Roaming\com.yoyo\flutter_sticky

規定値ではCompanyNameはcom.exapmleのままなのでcom.exapmle/app-nameとして格納されます。CompanyNameを変更することで上記のパスにて読み書きされるようになります、

Windowsでcom.exampleを変更する

AndroidやiOSはみなさん慣れたものだと思いますが、Windowはどこで指定しているか調べてみたらRunner.rcに記述されていました。

{applicationName}\windows\runner\Runner.rc
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904e4"
        BEGIN
            VALUE "CompanyName", "com.yoyo" "\0"
            VALUE "FileDescription", "flutter_sticky" "\0"
            VALUE "FileVersion", VERSION_AS_STRING "\0"
            VALUE "InternalName", "flutter_sticky" "\0"
            VALUE "LegalCopyright", "Copyright (C) 2024 com.yoyo. All rights reserved." "\0"

com.exampleとなっているところを修正していきます。

変更した箇所
CompanyName: com.example => com.yoyo
LegalCopyRight: com.example => com.yoyo

出力結果

image.png

C:\Users\yoyo\AppData\Roaming\com.yoyo\flutter_sticky

期待通りのパスに出力されました。

おまけ:付箋アプリを作りました

編集画面

edit.PNG

編集画面ではアプリケーションウィンドウのタイトルバーを表示し、掴んでウィンドウを移動できるようにしています。

タスクトレイに格納(常駐)

hide.PNG

ウィンドウのバツボタンをクリックするとタスクトレイに格納されます。アプリケーションを終了するにはタスクトレイアイコンを右クリックしExitボタンを押します。

付箋として表示

fix.PNG

付箋として固定表示させるにはFloating ButtonでFixします。Fixするとウィンドウタイトルが非表示となり移動ができなくなります。再び移動する場合は付箋の文字にカーソルをあてるとアクティブ(編集画面)になります。

困った点

onWindowBlur()await windowManager.setTitleBarStyle(TitleBarStyle.normal)を実行すると、ウィンドウから離れたさいにイベントが実行されますが、タスクトレイで右クリックをするとonWindowBlur()を通過してしまうため処理がループしてしまいExitすることが出来なくなります。これを回避するために付箋内にFloating Buttonを配置してFix処理をするようにしています。

FixボタンはでMouseRegionクラスのonHoveronExitでボタンの透過率を可変にしています。マウスを当てていない場合は透過率を0.3にしているため邪魔に感じません。

おわり

これでおしまいではなく、まだ機能を追加したいと思っています。

  • 付箋を前面に表示
  • アラーム機能の追加
  • Croud Firestore(Database)と連携
  • Androidアプリ(このアプリflutter_sticky)と連携

続く(かもしれまません)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?