Sorting 颤振型'_内部链接dhashmap<;字符串,动态>';不是类型为';可比<;动态>';

Sorting 颤振型'_内部链接dhashmap<;字符串,动态>';不是类型为';可比<;动态>';,sorting,flutter,dart,Sorting,Flutter,Dart,我得到以下错误: 生成FutureBuilder时引发了以下类型错误(脏,状态:_FutureBuilderState#0e8bb): 类型“\u InternalLinkedHashMap”不是“Compariable”类型的子类型 当我尝试使用FutureBuilder从本地Json构建一个Listview时,如果用户点击菜单进行排序,则对项目进行排序: class _ResultScreenState extends State<ResultScreen> { List s

我得到以下错误:

生成FutureBuilder时引发了以下类型错误(脏,状态:_FutureBuilderState#0e8bb): 类型“\u InternalLinkedHashMap”不是“Compariable”类型的子类型

当我尝试使用FutureBuilder从本地Json构建一个Listview时,如果用户点击菜单进行排序,则对项目进行排序:

class _ResultScreenState extends State<ResultScreen> {
  List showData;
  var sortedData;
  bool byName = false;
  bool byRating = false;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        ConstrainedBox(
          constraints: const BoxConstraints.expand(),
          child: Image(
            fit: BoxFit.cover,
            image: AssetImage('assets/scuba.jpg'),
          ),
        ),
        Scaffold(
          appBar: AppBar(
            title: Text("Scuba Dive"),
            actions: <Widget>[
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Center(child: Text("Sort By")),
              ),
              PopupMenuButton<String>(
                icon: Icon(
                  Icons.sort,
                  size: 32,
                ),
                onSelected: choiceAction,
                itemBuilder: (BuildContext context) {
                  return Constants.choices.map((String choice) {
                    return PopupMenuItem<String>(
                      value: choice,
                      child: Text(choice),
                    );
                  }).toList();
                },
              )
            ],
          ),
          body: Container(
            constraints: BoxConstraints.expand(),
            decoration: BoxDecoration(
                image: DecorationImage(
                    image: AssetImage('assets/scuba.jpg'),
                    colorFilter:
                        ColorFilter.mode(Colors.black26, BlendMode.darken),
                    fit: BoxFit.cover)),
            child: FutureBuilder(
              builder: (context, snapshot) {
                showData = json.decode(snapshot.data.toString());

                if (byName) {
                  showData.sort();
                }

                return ListView.builder(
                  itemBuilder: (BuildContext context, int index) {
                    return Container(
                      padding: EdgeInsets.all(8),
                      margin: EdgeInsets.all(12),
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(8),
                        color: Colors.white70,
                      ),
                      child: Column(
                        children: <Widget>[
                          Row(
                            children: <Widget>[
                              ConstrainedBox(
                                constraints: BoxConstraints(
                                  maxWidth: 150,
                                  maxHeight: 80,
                                ),
                                child: Image(
                                  image: AssetImage(showData[index]["image"]),
                                ),
                              ),
                              Flexible(
                                child: Padding(
                                  padding: const EdgeInsets.all(8.0),
                                  child: Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: <Widget>[
                                      Text(
                                        showData[index]["name"].toString(),
                                        style: TextStyle(
                                            fontSize: 18,
                                            fontWeight: FontWeight.bold),
                                      ),
                                      Text("Rating : " +
                                          showData[index]["rating"]),
                                    ],
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ],
                      ),
                    );
                  },
                  itemCount: showData == null ? 0 : showData.length,
                );
              },
              future:
                  DefaultAssetBundle.of(context).loadString("assets/data.json"),
            ),
          ),
        )
      ],
    );
  }

  void choiceAction(String choice) {
    if (choice == Constants.FirstItem) {
      setState(() {
        byName = true;
      });
    } else if (choice == Constants.SecondItem) {
      print("Second");
    }
  }
}
class\u结果筛选状态扩展状态{
列出显示数据;
var Sortedata;
bool byName=false;
布尔·拜拉廷=假;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回堆栈(
儿童:[
约束盒(
约束:const-BoxConstraints.expand(),
孩子:图像(
适合:BoxFit.cover,
图片:AssetImage('assets/scuba.jpg'),
),
),
脚手架(
appBar:appBar(
标题:文本(“潜水”),
行动:[
填充物(
填充:常数边集全部(8.0),
子:居中(子:文本(“排序依据”),
),
弹出菜单按钮(
图标:图标(
图标。排序,
尺码:32,
),
当选:选秀活动,
itemBuilder:(构建上下文){
返回常量.choices.map((字符串选项){
返回PopupMenuItem(
价值:选择,
儿童:文本(选择),
);
}).toList();
},
)
],
),
主体:容器(
约束:BoxConstraints.expand(),
装饰:盒子装饰(
图像:装饰图像(
图片:AssetImage('assets/scuba.jpg'),
颜色过滤器:
颜色过滤器模式(Colors.black26,BlendMode.darken),
安装:BoxFit.盖),
孩子:未来建设者(
生成器:(上下文,快照){
showData=json.decode(snapshot.data.toString());
如果(按名称){
showData.sort();
}
返回ListView.builder(
itemBuilder:(构建上下文,int索引){
返回容器(
填充:边缘设置。全部(8),
保证金:所有(12),
装饰:盒子装饰(
边界半径:边界半径。圆形(8),
颜色:颜色。白色70,
),
子:列(
儿童:[
划船(
儿童:[
约束盒(
约束:BoxConstraints(
最大宽度:150,
最大高度:80,
),
孩子:图像(
图像:AssetImage(showData[索引][“图像”]),
),
),
灵活的(
孩子:填充(
填充:常数边集全部(8.0),
子:列(
横轴对齐:
CrossAxisAlignment.start,
儿童:[
正文(
showData[index][“name”].toString(),
样式:TextStyle(
尺码:18,
fontWeight:fontWeight.bold),
),
文本(“评级:”+
showData[索引][“评级”]),
],
),
),
),
],
),
],
),
);
},
itemCount:showData==null?0:showData.length,
);
},
未来:
DefaultAssetBundle.of(context.loadString(“assets/data.json”),
),
),
)
],
);
}
void choiceAction(字符串选择){
if(选项==常量.FirstItem){
设置状态(){
byName=true;
});
}else if(选项==常量.SecondItem){
印刷品(“第二份”);
}
}
}

原因可能是什么?我如何修复它?

错误来自以下行:

showData.sort();
因为
json.decode
不会返回一个
可比的
。您应该考虑给出一个类型:<代码>显示数据< /代码>(这可以是一个局部变量):

List showData=List.from(json.decode(snapshot.data.toString());

您能提供一个您使用的json示例吗?非主题:
itemCount:showData==null?0:showData.length,
可以写入
itemCount:showData?.length??0,
以获得一致性。jsonData示例:{“名称”:“蜥蜴岛”,“图像”:“资产/Lizard岛.jpg”,“评级”:“8.7”},很抱歉,我不太理解此解决方案。所以我必须创建一个新类,json数据将是该类的一部分,对吗?@user3748198是的,请参阅或。