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

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

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

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Dart

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

Q&A

解決済

2回答

2466閲覧

【flutter 】shared_preferencesを使用した際のNull check operator used on a null valueエラーを解決できずに困っています

the_invincible

総合スコア6

Flutter

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Dart

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

0グッド

0クリップ

投稿2021/07/18 03:44

編集2021/07/18 04:44

前提・実現したいこと

flutterでアプリを作っております。
shared_preferencesを使用してインストール直後かどうかを取得するコードを作りたく『該当のソースコード』を参考に作成しております。

Unhandled Exception: Null check operator used on a null valueのエラーが発生しており解決方法をご教示いただければ幸いです。

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

 下記のソースコードを実行するとエラーメッセージが出ます Launching lib\main.dart on sdk gphone x86 arm in debug mode... Running Gradle task 'assembleDebug'... √ Built build\app\outputs\flutter-apk\app-debug.apk. Installing build\app\outputs\flutter-apk\app.apk... Debug service listening on ws://127.0.0.1:54829/2hF72wWVD40=/ws Syncing files to device sdk gphone x86 arm... I/flutter (15366): Instance of 'Future<bool>' E/flutter (15366): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value E/flutter (15366): #0 MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:142:86) E/flutter (15366): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:36) E/flutter (15366): #2 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:350:12) E/flutter (15366): #3 MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:377:49) E/flutter (15366): #4 MethodChannelSharedPreferencesStore.getAll (package:shared_preferences_platform_interface/method_channel_shared_preferences.dart:44:25) E/flutter (15366): #5 SharedPreferences._getSharedPreferencesMap (package:shared_preferences/shared_preferences.dart:180:57) E/flutter (15366): #6 SharedPreferences.getInstance (package:shared_preferences/shared_preferences.dart:56:19) E/flutter (15366): #7 firstRun (package:flutter_sample/main.dart:10:53) E/flutter (15366): #8 main (package:flutter_sample/main.dart:6:9) E/flutter (15366): #9 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:142:25) E/flutter (15366): #10 _rootRun (dart:async/zone.dart:1428:13) E/flutter (15366): #11 _CustomZone.run (dart:async/zone.dart:1328:19) E/flutter (15366): #12 _runZoned (dart:async/zone.dart:1863:10) E/flutter (15366): #13 runZonedGuarded (dart:async/zone.dart:1851:12) E/flutter (15366): #14 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:138:5) E/flutter (15366): #15 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19) E/flutter (15366): #16 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)

該当のソースコード

ファイル名:main.dart import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { const _key = "FirstRun"; print(firstRun(_key)); } Future<bool> firstRun(_key) async { SharedPreferences prefs = await SharedPreferences.getInstance(); var firstRun = prefs.get(_key); if (firstRun == null) { return prefs.setBool(_key, true);; }else{ return Future.value(false); }; }

試したこと

下記サイトを参考に調べてみたのですが解決に至っておりません。
https://pub.dev/packages/shared_preferences

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

・OS:Windows 10 Pro
・IDE:Android Studio:4.2.2
・flutter:2.3.0-12.1
・Dart:2.14.0
・pubspec.yaml
dependencies:
shared_preferences: ^2.0.6

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

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

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

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

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

guest

回答2

0

WidgetsFlutterBinding.ensureInitialized();を追加したら解決しました。
WidgetsFlutterBinding.ensureInitialized()は、runApp()を呼び出す前にFlutter Engineの機能を利用したい場合に使用するそうです。
いったん解決しましたので本件はクローズしたいと思います。

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

void main() async { WidgetsFlutterBinding.ensureInitialized(); const _key = "FirstRun"; print(firstRun(_key)); } Future<bool> firstRun(_key) async { SharedPreferences prefs = await SharedPreferences.getInstance(); var firstRun = prefs.get(_key); if (firstRun == null) { return prefs.setBool(_key, true);; }else{ return Future.value(false); }; }

投稿2021/07/21 23:48

the_invincible

総合スコア6

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

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

0

ベストアンサー

dart

1 if (firstRun != null) { 2 return Future.value(false); 3 }else{ 4 5 return prefs.setBool(_key, true); 6 };

== → !=

間違ってたら申し訳ない

投稿2021/07/18 11:14

endiv

総合スコア161

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

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

the_invincible

2021/07/21 23:50

ご回答いただきましてありがとうございました。 != に変えて試しましたが結果は変わりませんでした。 WidgetsFlutterBinding.ensureInitialized();を追加したところ自己解決できました。 ご回答いただきましたのでベストアンサーとさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問