无法排序“此表达式的类型为“void”,因此无法使用其值。”

gee*_*ake 4 dart flutter

我是 flutter 新手,无法对 List 进行排序并获取“此表达式的类型为“void”,因此无法使用其值。” 错误

List getSnack = [];
  var sortSnack = [];

  Future _getSnacks() async {
    var response = await http.get(Uri.parse(url));
    List decode = jsonDecode(response.body);
    setState(() {
      getSnack = decode
          .where((snack) => snack["snack_type"]
              .toLowerCase()
              .contains(defaultType.toLowerCase()))
          .toList();
    });

    sortSnack = getSnack.sort((a, b) => a["snack"].compareTo(b["snack"]));
  }
Run Code Online (Sandbox Code Playgroud)

我想对包含来自 az 的零食名称的“零食”进行排序,反之亦然

我已经尝试过了,但仍然不起作用

List getSnack = [];
  var sortSnack =  getSnack.sort((a, b) => a["snack"].compareTo(b["snack"]));;

  Future _getSnacks() async {
    var response = await http.get(Uri.parse(url));
    List decode = jsonDecode(response.body);
    // List filter = decode;
    setState(() {
      getSnack = decode
          .where((snack) => snack["snack_type"]
              .toLowerCase()
              .contains(defaultType.toLowerCase()))
          .toList();
    });
  }
Run Code Online (Sandbox Code Playgroud)

该错误显示“无法在初始化程序中访问实例成员“getSnack”。”

Man*_*H68 8

Sort()将其排序应用于列表,它不返回任何值(void)。你应该写的是:

getSnack.sort((a, b) => a["snack"].compareTo(b["snack"]));
var sortSnack = getSnack; 
Run Code Online (Sandbox Code Playgroud)

或者如果你想在一行上使用级联运算符:

var sortSnack = getSnack..sort((a, b) => a["snack"].compareTo(b["snack"]));
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,sortSnack 都将是 getSnack 的浅表副本。SortSnack 中的任何更改都会反映在 getSnack 中。