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

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

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

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

Dart

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

Q&A

解決済

1回答

16469閲覧

LateInitializatioinErrorの対処法を教えてください。

Melon-cream

総合スコア1

Flutter

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

Dart

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

0グッド

0クリップ

投稿2021/06/05 14:38

前提・実現したいこと

現在、UdacityのBuild Native Mobile Apps with Flutterを進めています。
この講座のLesson2-11でエラーが出てしまい、先に進めません。
解決方法を教えていただきたく存じます。

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

LateInitializationError: Field '_currentCategory@24037776' has not been initialized.

該当のソースコード

import 'package:flutter/material.dart'; import 'backdrop.dart'; import 'category.dart'; import 'category_tile.dart'; import 'unit.dart'; import 'unit_converter.dart'; class CategoryRoute extends StatefulWidget { const CategoryRoute(); @override _CategoryRouteState createState() => _CategoryRouteState(); } class _CategoryRouteState extends State<CategoryRoute> { late Category _defaultCategory; late Category _currentCategory; final _categories = <Category>[]; static const _categoryNames = <String>[ 'Length', 'Area', 'Volume', 'Mass', 'Time', 'Digital Storage', 'Energy', 'Currency', ]; static const _baseColors = <ColorSwatch>[ Colors.teal, Colors.orange, Colors.pinkAccent, Colors.blueAccent, Colors.yellow, Colors.greenAccent, Colors.purpleAccent, Colors.red, ]; static const _categoryIcon = <IconData> [ Icons.thumb_up, Icons.thumb_down, Icons.accessibility, Icons.accessible, Icons.accessible_outlined, Icons.account_box, Icons.adb, Icons.add_a_photo, Icons.add_alarm, ]; @override void initState() { super.initState(); for (var i = 0; i < _categoryNames.length; i++) { var category = Category( name: _categoryNames[i], color: _baseColors[i], icon: _categoryIcon[i], units: _retrieveUnitList(_categoryNames[i]), ); if (i == 0) { _defaultCategory = category; } _categories.add(category); } } void _onCategoryTap(Category category) { setState(() { _currentCategory = category; }); } Widget _buildCategoryWidgets() { return ListView.builder( itemBuilder: (BuildContext context, int index) { return CategoryTile( category: _categories[index], onTap: _onCategoryTap, ); }, itemCount: _categories.length, ); } List<Unit> _retrieveUnitList(String categoryName) { return List.generate(10, (int i) { i += 1; return Unit( name: '$categoryName Unit $i', conversion: i.toDouble(), ); }); } @override Widget build(BuildContext context) { final listView = Padding( padding: EdgeInsets.only( left: 8.0, right: 8.0, bottom: 48.0, ), child: _buildCategoryWidgets(), ); return Backdrop( currentCategory: _currentCategory == null ? _defaultCategory : _currentCategory, frontPanel: _currentCategory == null ? UnitConverter(category: _defaultCategory) : UnitConverter(category: _currentCategory), backPanel: listView, frontTitle: Text('Unit Converter'), backTitle: Text('Select a Category'), ); } }

試したこと

試した解決方法(リンク先はstackoverflowです)

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

Flutter 2.20
Dart 2.13.0
VSCode 1.56.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

この場合だと _currentCategory が onTap されずに初期化されないケースがあるのでこのエラー(late で後の初期化を約束しているのに初期化されていない)が出ていると思われます。

buildメソッドのところでnullを想定した処理をされているようなので

dart

1Category? _currentCategory;

と nullable にしてみてください。

投稿2021/06/05 17:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問