前提・実現したいこと
Flutterで辞書アプリを作っています。
別ページをみてから検索ページに入ると、そのページに切り替わった瞬間だけAppBarにエラーの文字が出ます。
ちゃんと動作はするので、問題ではないかもしれませんが、使用時に少しでもエラーメッセージが表示されてしまうなら厄介だなと思い、解決したいです。
発生している問題・エラーメッセージ
Dart
1The getter 'iterator' was called on null. 2Receiver: null 3Tried calling: iterator 4User-created ancestor of the error-causing widget was: 5 AppBar file:///dictionary_hands_on_hinagata-master%202/lib/MainTabs/Search/search.dart:63:17
該当のソースコード
Dart
1import 'package:flutter/material.dart'; 2import 'package:provider/provider.dart'; 3 4import 'package:dictionary/Services/database.dart'; 5import 'package:dictionary/Models/verbs_data.dart'; 6 7import 'words_list.dart'; 8import 'package:dictionary/MainTabs/Search/search_appbar_button.dart'; 9 10class Search extends StatefulWidget { 11 Search({Key key}) : super(key: key); 12 13 14 _Search createState() => new _Search(); 15} 16 17class _Search extends State<Search> { 18 TextEditingController editingController = TextEditingController(); 19 20 final duplicateItems = List<VerbsData>(); 21 final items = List<VerbsData>(); 22 final VerbsData verbsData; 23 24 _Search({this.verbsData}); 25 26 27 void initState() { 28 items.addAll(duplicateItems); 29 super.initState(); 30 } 31 32 void filterSearchResults(String query) { 33 List<VerbsData> dummySearchList = List<VerbsData>(); 34 dummySearchList.addAll(duplicateItems); 35 if (query.isNotEmpty) { 36 List<VerbsData> dummyListData = List<VerbsData>(); 37 dummySearchList.forEach((verbsData) { 38 if (verbsData.romaji.contains(query)) { 39 dummyListData.add(verbsData); 40 } 41 }); 42 setState(() { 43 items.clear(); 44 items.addAll(dummyListData); 45 }); 46 return; 47 } else { 48 setState(() { 49 items.clear(); 50 items.addAll(duplicateItems); 51 }); 52 } 53 } 54 55 56 Widget build(BuildContext context) { 57 return StreamProvider<List<VerbsData>>.value( 58 value: DatabaseService().verbs, 59 child: Scaffold( 60 appBar: AppBar( 61 leading: ButtonOnAppBar(), 62 title: Builder(builder: (context) { 63 final verbs = Provider.of<List<VerbsData>>(context); 64 duplicateItems.addAll(verbs); 65 items.addAll(verbs); 66 67 return Padding( 68 padding: const EdgeInsets.symmetric(vertical: 4.0), 69 child: TextField( 70 onChanged: (value) { 71 filterSearchResults(value); 72 }, 73 controller: editingController, 74 decoration: InputDecoration( 75 labelText: "Search", 76 fillColor: Colors.white, 77 filled: true, 78 prefixIcon: Icon(Icons.search), 79 border: OutlineInputBorder( 80 borderRadius: BorderRadius.all(Radius.circular(25.0)))), 81 ), 82 ); 83 }), 84 ), 85 body: SingleChildScrollView( 86 child: Column( 87 crossAxisAlignment: CrossAxisAlignment.start, 88 children: <Widget>[DropdownForSorts(), WordsList(verbs: items)], 89 ), 90 ), 91 ), 92 ); 93 } 94} 95 96class DropdownForSorts extends StatefulWidget { 97 98 _DropdownForSorts createState() { 99 return _DropdownForSorts(); 100 } 101} 102 103class _DropdownForSorts extends State<DropdownForSorts> { 104 String _value; 105 106 107 Widget build(BuildContext context) { 108 return Padding( 109 padding: EdgeInsets.all(10.0), 110 child: DropdownButton<String>( 111 items: [ 112 DropdownMenuItem<String>( 113 child: Text('Japanese Alphabetical'), 114 value: 'one', 115 ), 116 DropdownMenuItem<String>( 117 child: Text('Easier'), 118 value: 'two', 119 ), 120 DropdownMenuItem<String>( 121 child: Text('Difficult'), 122 value: 'three', 123 ), 124 DropdownMenuItem<String>( 125 child: Text('Often Used'), 126 value: 'four', 127 ), 128 DropdownMenuItem<String>( 129 child: Text('Rarely Used'), 130 value: 'five', 131 ), 132 ], 133 onChanged: (String value) { 134 setState(() { 135 _value = value; 136 }); 137 }, 138 hint: Text('Sorted by'), 139 value: _value, 140 )); 141 } 142} 143
試したこと
iteratorをコード上に書いていないので、どこがエラーなのかわかりません。
TextFieldの検索もちゃんと機能します。
補足情報(FW/ツールのバージョンなど)
Android Studio
MacOS Mojave 10.14.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/28 06:11
2020/08/28 07:12
2020/08/28 07:41
2020/08/28 08:01