首页 > 解决方案 > 带有 HTTP 数据库的 Flutter 下拉菜单

问题描述

我正在尝试从我的数据库中检索 JSON 代码映射,并尝试将该映射的一部分放入下拉菜单中。我对这一切都很陌生,感谢任何帮助。我在这个网站上找到了不同的解决方案,但无法开始工作。我得到不同的错误,我现在得到的错误如下。先感谢您!

I/flutter (30929): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (30929): The following NoSuchMethodError was thrown building AddSubCategory(dirty, dependencies:
I/flutter (30929): [_ModalScopeStatus], state: _AddSubCategoryState#a24b3):
I/flutter (30929): The method 'map' was called on null.
I/flutter (30929): Receiver: null
I/flutter (30929): Tried calling: map<DropdownMenuItem<String>>(Closure: (dynamic) => DropdownMenuItem<String>)
I/flutter (30929):
I/flutter (30929): The relevant error-causing widget was:
I/flutter (30929):   AddSubCategory file:///D:/apps/reboo/lib/main.dart:45:46
I/flutter (30929): 
I/flutter (30929): When the exception was thrown, this was the stack:
I/flutter (30929): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
I/flutter (30929): #1      _AddSubCategoryState.build (package:reboo/screens/admin_screens/add_subcategory_screen.dart:272:37)
I/flutter (30929): #2      StatefulElement.build (package:flutter/src/widgets/framework.dart:4744:28)
I/flutter (30929): #3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
I/flutter (30929): #4      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
I/flutter (30929): #5      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)      
I/flutter (30929): #6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
I/flutter (30929): #7      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4791:11)
I/flutter (30929): #8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
I/flutter (30929): ...     Normal element mounting (132 frames)
I/flutter (30929): #140    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
I/flutter (30929): #141    Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18) 
I/flutter (30929): #142    RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5705:32)
I/flutter (30929): #143    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6246:17)
I/flutter (30929): #144    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #145    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
I/flutter (30929): #146    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
I/flutter (30929): #147    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)      
I/flutter (30929): #148    StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
I/flutter (30929): #149    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #150    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
I/flutter (30929): #151    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)      
I/flutter (30929): #152    ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)  
I/flutter (30929): #153    _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:183:11)
I/flutter (30929): #154    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #155    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
I/flutter (30929): #156    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #157    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
I/flutter (30929): #158    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
I/flutter (30929): #159    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)      
I/flutter (30929): #160    StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
I/flutter (30929): #161    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
I/flutter (30929): #162    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
I/flutter (30929): #163    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #164    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
I/flutter (30929): #165    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #166    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
I/flutter (30929): #167    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter (30929): #168    StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
I/flutter (30929): #169    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #170    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
I/flutter (30929): #171    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)      
I/flutter (30929): #172    ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)  
I/flutter (30929): #173    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) 
I/flutter (30929): #174    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
I/flutter (30929): #175    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
I/flutter (30929): #176    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter (30929): #177    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:33)
I/flutter (30929): #178    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913:20)
I/flutter (30929): #179    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
I/flutter (30929): #180    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
I/flutter (30929): #181    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
I/flutter (30929): #182    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
I/flutter (30929): #186    _invoke (dart:ui/hooks.dart:251:10)
I/flutter (30929): #187    _drawFrame (dart:ui/hooks.dart:209:3)
I/flutter (30929): (elided 3 frames from dart:async)
I/flutter (30929):
I/flutter (30929): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (30929): {-MJld0iwmyBsLs3wwp17: {icon: https://some link, title: Beauty}, -MK9sJCCMTbvdzzUQZFl: {icon: https://https://some link, title: Fun & Adventure}}
I/flutter (30929): {-MJld0iwmyBsLs3wwp17: {icon: https://, title: Beauty}, -MK9sJCCMTbvdzzUQZFl: {icon: https://some link, title: Fun & Adventure}}
I/flutter (30929): Another exception was thrown: NoSuchMethodError: The method 'map' was called on null.

打印(resBody);

I/flutter (30929): {-MJld0iwmyBsLs3wwp17: {icon: somelink.png, title: Beauty}}

我来自数据库的 JSON 代码

{
  "category" : {
    "-MJld0iwmyBsLs3wwp17" : {
      "icon" : "https:https://Some link",
      "title" : "Beauty"
    },
    "-MK9sJCCMTbvdzzUQZFl" : {
      "icon" : "https://Some link",
      "title" : "Fun & Adventure"
    }
  }
}

第一部分:

class AddSubCategory extends StatefulWidget {
  static const routeName = '/addsubcategory';

  @override
  _AddSubCategoryState createState() => _AddSubCategoryState();
}

class _AddSubCategoryState extends State<AddSubCategory> {

final _form = GlobalKey<FormState>();

  String _mySelection;

  Map<String, dynamic> map;
  List<dynamic> data;

  Future<String> getSWData() async {
    final url = "some link";
    var response = await http.get(url);
    var resBody = json.decode(response.body) as Map<String, dynamic>;
    print(resBody);
    setState(() {
      map = resBody;
      data = map["id"];
      
    });

    print(map);
    return "Sucess";
  }

  @override
  void initState() {
    this.getSWData();
    super.initState();
  }

下拉部分

DropdownButton(
 isDense: true,
      hint: new Text("Select Category"),
      items: data.map((item) {
      return new DropdownMenuItem(
       child: new Text(item['title']),
       value: item['id'].toString(),
     );
   }).toList(),
   onChanged: (newVal) {
    setState(() {
      _mySelection = newVal;
    });
  },
  value: _mySelection,
),

标签: jsonflutterdrop-down-menu

解决方案


data变量不包含 的条目'id'

这就是为什么data设置为null,这会导致错误。


推荐阅读