質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

解決済

Null check operator used on a null valueが発生するが原因がわからない

KentarouHayashi
KentarouHayashi

総合スコア18

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

1回答

0リアクション

0クリップ

409閲覧

投稿2022/08/21 06:10

前提

ログイン機能を実装していますが、ログイン時にNull check operator used on a null valueが発生します。
以前までは問題なくログインできておりましたが、いろいろ変更をしているうちにエラーが発生するようになりました。

実現したいこと

Null check operator used on a null valueが発生せずログインできること

発生している問題・エラーメッセージ

Null check operator used on a null value

該当のソースコード

// ignore_for_file: use_build_context_synchronously import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/services.dart'; import 'authentication_error.dart'; import 'registration.dart'; import '../home.dart'; //入力データの状態があるためStatefulWidgetを作成 class Login extends StatefulWidget { const Login({Key? key}) : super(key: key); @override // ignore: library_private_types_in_public_api _LoginPage createState() => _LoginPage(); } class _LoginPage extends State<Login> { String login_Email = ""; // 入力されたメールアドレス String login_Password = ""; // 入力されたパスワード String infoText = ""; // ログインに関する情報を表示 // Firebase Authenticationを利用するためのインスタンス final FirebaseAuth auth = FirebaseAuth.instance; late UserCredential result;//late をつけることで後から代入することを明記 late User user;//late をつけることで後から代入することを明記 // エラーメッセージを日本語化するためのクラス final auth_error = Authenticationerror(); @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: true,//キーボードが表示されたときにスクロールできるようにする appBar: AppBar( title: const Text('ログイン') ), body: Center( child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min,//Columnを画面中央に表示させる //mainAxisAlignment: MainAxisAlignment.center, //Columnを中央にするのはこれでもOK children: <Widget>[ // メールアドレスの入力フォームのウィジェット Padding( padding: const EdgeInsets.fromLTRB(25.0, 0, 25.0, 0),//左右に余白を設定 child:TextFormField( decoration: const InputDecoration( labelText: "メールアドレス" ), onChanged: (String value) { login_Email = value; }, ) ), // パスワードの入力フォーム Padding( padding: const EdgeInsets.fromLTRB(25.0, 0, 25.0, 10.0), child:TextFormField( decoration: const InputDecoration( labelText: "パスワード(8~20文字)" ), obscureText: true, // パスワードが見えないようRにする maxLength: 20, // 入力可能な文字数 maxLengthEnforcement: MaxLengthEnforcement.enforced, // 入力可能な文字数の制限を超える場合の挙動の制御 onChanged: (String value) { login_Password= value; }, ), ), // ログイン失敗時のエラーメッセージ Padding( padding: const EdgeInsets.fromLTRB(20.0, 0, 20.0, 5.0), child:Text(infoText, style: const TextStyle(color: Colors.red),), ), SizedBox(//ElevatedButtonでボタンを作成した際にSizedBoxでボタンのサイズを決めれる。 width: 250, height: 35, child: ElevatedButton( child: const Text('ログイン', style: TextStyle(fontWeight: FontWeight.bold),), onPressed: () async { try { // 入力したメール/パスワードでユーザーログイン //resultにログイン情報を格納 result = await auth.signInWithEmailAndPassword( email: login_Email, password: login_Password, ); // ログイン成功 // ログインユーザーのIDを取得 user = result.user!;//ログイン情報からユーザ情報のみを取得しuserに格納 Navigator.push( context, MaterialPageRoute( builder: (context) => Home(user_id: user.uid), ) ); }on FirebaseAuthException catch (e) {//エラーをキャッチする // ログインに失敗した場合 setState(() {//setStateで更新があったことを知らせる infoText = auth_error.login_error_msg(e.code);//キャッチしたエラーのエラーコードを日本語に変換しinfoTextに格納 }); } } ), ), Padding( padding: const EdgeInsets.all(10.0), child: SizedBox(//ElevatedButtonでボタンを作成した際にSizedBoxでボタンのサイズを決めれる。 width: 350.0, height: 35.0, child: ElevatedButton( style: ElevatedButton.styleFrom(//buttonのスタイルを決める primary: Colors.blue[50],//ボタンの色 onPrimary: Colors.blue,//ボタンを押したときの色(テキストの色を明記しないとテキストもこの色になる) shape: RoundedRectangleBorder(//ボタンの丸みを設定する borderRadius: BorderRadius.circular(30),//丸みのレベル ), ), child: Text('アカウントを作成する', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.blue), ), // ボタンクリック後にアカウント作成用の画面の遷移する。 onPressed: (){ Navigator.of(context).push( MaterialPageRoute( fullscreenDialog: true,//モーダルとして表示 builder: (BuildContext context) => Registration(), ), ); } ), ), ), ], ), ) ) ); }

試したこと

調べた結果をもとに問題が起きている箇所でnullじゃない場合に処理するようにしてみましたが、現象は変わらず。

if(user != null) { Navigator.push( context, MaterialPageRoute( builder: (context) => Home(user_id: user.uid), ) ); }

補足情報(FW/ツールのバージョンなど)

OS:Windows11
IDE:Android Studio
Flutter 3.0.4
firebase_auth: ^3.6.3
firebase_core: ^1.20.1
cloud_firestore: ^3.4.4

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。