PR

[Flutter]Flutter Widget of the Week「#115 path_provider」、「#116 get_it」、「#117 Baseline」

Flutter

はじめに

前回はFlutter Widget of the Weekの「#112 cached_network_image」、「#113 GestureDetector」、「#114 freezed」を紹介しました。

今回はその続きで「#115 path_provider」、「#116 get_it」、「#117 Baseline」の3つです。

前回の記事はこちら

またGitHubにも公開しています。

GitHub - nobushiueshi/flutter_widget_of_the_week
Contribute to nobushiueshi/flutter_widget_of_the_week development by creating an account on GitHub.

Flutter Widget of the Week

環境

  • Flutter 3.3.9

記事にした時点でのバージョンです。GitHubに公開しているのは常に最新の安定版(stable)を使う予定です。

#115 path_provider

path_providerとは

デバイスのファイルシステムにアクセスができるパッケージです。

サンプルコード

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

class SamplePage115 extends StatefulWidget {
  const SamplePage115({
    super.key,
  });

  @override
  State<SamplePage115> createState() => _SamplePage115State();
}

class _SamplePage115State extends State<SamplePage115> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('path_provider'),
        centerTitle: true,
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            const Text('getApplicationDocumentsDirectory'),
            FutureBuilder(
              future: getApplicationDocumentsDirectory(),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return const CircularProgressIndicator();
                }
                if (snapshot.hasError) {
                  return const Icon(
                    Icons.error,
                    color: Colors.red,
                  );
                }
                return Text(snapshot.data!.path);
              },
            ),
            const SizedBox(height: 20),
            const Text('getApplicationSupportDirectory'),
            FutureBuilder(
              future: getApplicationSupportDirectory(),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return const CircularProgressIndicator();
                }
                if (snapshot.hasError) {
                  return const Icon(
                    Icons.error,
                    color: Colors.red,
                  );
                }
                return Text(snapshot.data!.path);
              },
            ),
          ],
        ),
      ),
    );
  }
}

結果

動画


公式リファレンス

path_provider | Flutter Package
Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data director...

#116 get_it

get_itとは

サービスロケーターのパッケージです。

これを使うことで依存性の注入等が簡単にできます。

サンプルコード

import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

class SamplePage116 extends StatefulWidget {
  const SamplePage116({
    super.key,
  });

  @override
  State<SamplePage116> createState() => _SamplePage116State();
}

class _SamplePage116State extends State<SamplePage116> {
  @override
  void initState() {
    super.initState();

    GetIt.I.registerSingleton<SamplePage116Repository>(
      SamplePage116RepositoryImpl(),
    );
  }

  @override
  void dispose() {
    GetIt.I.unregister<SamplePage116Repository>();

    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final message = GetIt.I.get<SamplePage116Repository>().getMessage();
    return Scaffold(
      appBar: AppBar(
        title: const Text('get_it'),
        centerTitle: true,
      ),
      body: Center(
        child: Text(message),
      ),
    );
  }
}

abstract class SamplePage116Repository {
  String getMessage() {
    throw UnimplementedError();
  }
}

class SamplePage116RepositoryImpl extends SamplePage116Repository {
  @override
  String getMessage() {
    return 'SamplePage116RepositoryImpl.getMessage';
  }
}

結果

動画

公式リファレンス

get_it | Dart Package
Simple direct Service Locator that allows to decouple the interface from a concrete implementation and to access the con...

#117 Baseline

Baselineとは

その名の通りテキストのベースラインを設定できるウィジェットです。

サンプルコード

import 'package:flutter/material.dart';

class SamplePage117 extends StatelessWidget {
  const SamplePage117({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Baseline'),
        centerTitle: true,
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: const [
            ColoredBox(
              color: Colors.grey,
              child: Text('Hello World!'),
            ),
            SizedBox(height: 20),
            ColoredBox(
              color: Colors.grey,
              child: Baseline(
                baseline: 100,
                baselineType: TextBaseline.alphabetic,
                child: Text('Hello World!'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

結果

動画

公式リファレンス

Baseline class - widgets library - Dart API
API docs for the Baseline class from the widgets library, for the Dart programming language.

さいごに

このシリーズ、終りが見えない。。。

そして追いつく前にYouTubeのFlutter Widget of the Weekが終わってしまい、悲しみ。。。と思ったら再開された?

おすすめ参考書

リンク

GitHub - nobushiueshi/flutter_widget_of_the_week
Contribute to nobushiueshi/flutter_widget_of_the_week development by creating an account on GitHub.

コメント

タイトルとURLをコピーしました