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

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

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

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

プログラミング言語

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

Dart

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

Q&A

解決済

1回答

1749閲覧

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

KentarouHayashi

総合スコア23

Flutter

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

プログラミング言語

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

Dart

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

0グッド

0クリップ

投稿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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

引数の数が遷移先の画面で指定している数と異なっていたため発生していたようです。
本件自己解決したためクローズします。

投稿2022/08/21 08:38

KentarouHayashi

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問