PR

[Flutter]Flutter Widget of the Week「#151 firebase_auth」、「#152 fl_chart」、「#153 gap」

Flutter

はじめに

前回はFlutter Widget of the Weekの「#148 cloud_firestore」、「#149 firebase_analytics」、「#150 home_widget」を紹介しました。

今回はその続きで「#151 firebase_auth」、「#152 fl_chart」、「#153 gap」の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.19.6

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

#151 firebase_auth

firebase_authとは?

Firebase認証機能が提供されているサービスのFirebase Authenticationを扱えるようになるパッケージです。

メール・パスワード電話番号OAuthプロバイダを使った認証が簡単に実装できます。

また匿名認証も扱えるのでセキュリティールールによりデータを保護できます。

サンプルコード

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // Firebase.
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  runApp(const MyApp());
}
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

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

  @override
  State<SamplePage151> createState() => _SamplePage151State();
}

class _SamplePage151State extends State<SamplePage151> {
  final emailAddress = TextEditingController(text: '');
  final password = TextEditingController(text: '');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('firebase_auth'),
        centerTitle: true,
      ),
      body: SafeArea(
        child: Center(
          child: Form(
            child: Padding(
              padding: const EdgeInsets.symmetric(horizontal: 20),
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  TextField(
                    controller: emailAddress,
                    decoration: const InputDecoration(
                      icon: Icon(Icons.mail_outlined),
                      label: Text('メールアドレス'),
                    ),
                  ),
                  TextField(
                    controller: password,
                    obscureText: true,
                    decoration: const InputDecoration(
                      icon: Icon(Icons.password_outlined),
                      label: Text('パスワード'),
                    ),
                  ),
                  const SizedBox(height: 120),
                  FilledButton(
                    onPressed: () async {
                      try {
                        await FirebaseAuth.instance
                            .createUserWithEmailAndPassword(
                          email: emailAddress.text,
                          password: password.text,
                        );
                      } on FirebaseAuthException catch (e) {
                        if (e.code == 'weak-password') {
                          // ignore: avoid_print
                          print('The password provided is too weak.');
                        } else if (e.code == 'email-already-in-use') {
                          // ignore: avoid_print
                          print('The account already exists for that email.');
                        }
                      } catch (e) {
                        // ignore: avoid_print
                        print(e);
                      }
                    },
                    child: const Text('ユーザー登録'),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

結果

メールアドレスとパスワードを入力し、ユーザー登録ボタンを押すと。。。

Firebase Authenticationでユーザーが無事登録されました。

動画

公式リファレンス

firebase_auth | Flutter package
Flutter plugin for Firebase Auth, enabling authentication using passwords, phone numbers and identity providers like Goo...

#152 fl_chart

fl_chartとは?

様々なグラフを表示できるパッケージです。

折れ線グラフ、棒グラフ、円グラフ、散布図、レーダーチャート等に対応しています。

サンプルコード

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

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

  @override
  State<SamplePage152> createState() => _SamplePage152State();
}

class _SamplePage152State extends State<SamplePage152> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('fl_chart'),
        centerTitle: true,
      ),
      body: SafeArea(
        child: Center(
          child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 20),
            child: PieChart(
              PieChartData(
                sections: [
                  PieChartSectionData(
                    value: 500,
                    title: r'Investments: $500',
                    showTitle: true,
                    radius: 70,
                    color: Colors.green,
                  ),
                  PieChartSectionData(
                    value: 1200,
                    title: r'Housing: $1200',
                    showTitle: true,
                    radius: 70,
                    color: Colors.blue,
                  ),
                  PieChartSectionData(
                    value: 400,
                    title: r'Food: $400',
                    showTitle: true,
                    radius: 70,
                    color: Colors.pink,
                  ),
                  PieChartSectionData(
                    value: 400,
                    title: r'Fun: $400',
                    showTitle: true,
                    radius: 70,
                    color: Colors.yellow,
                  ),
                  PieChartSectionData(
                    value: 80,
                    title: r'Internet: $80',
                    showTitle: true,
                    radius: 70,
                    color: Colors.purple,
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

結果

簡単に円グラフが実装できちゃいました。

動画

公式リファレンス

fl_chart | Flutter package
A highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Cha...

#153 gap

gapとは?

ColumnやListView等で間隔を空けられるウィジェットを提供するパッケージです。

SizedBoxやPadding等でも可能ですが、隙間を空ける方向が指定する必要があります。

しかしこのgapには不要です。

サンプルコード

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

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

  @override
  State<SamplePage153> createState() => _SamplePage153State();
}

class _SamplePage153State extends State<SamplePage153> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('gap'),
        centerTitle: true,
      ),
      body: SafeArea(
        child: ListView(
          children: [
            Container(
              height: 200,
              color: Colors.red,
            ),
            const Gap(20),
            Container(
              height: 200,
              color: Colors.blue,
            ),
            const Gap(20),
            Container(
              height: 200,
              color: Colors.yellow,
            ),
            const Gap(20),
            Container(
              height: 200,
              color: Colors.green,
            ),
            const Gap(20),
            Container(
              height: 200,
              color: Colors.purple,
            ),
          ],
        ),
      ),
    );
  }
}

結果

Gapのほうが楽ですね。。。

動画

公式リファレンス

gap | Flutter package
Flutter widgets for easily adding gaps inside Flex widgets such as Columns and Rows or scrolling views.

さいごに

サボってしまった。。。

おすすめ参考書

リンク

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

コメント

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