Flutter 颤振将列表排序到TreeNode的嵌套小部件中

Flutter 颤振将列表排序到TreeNode的嵌套小部件中,flutter,Flutter,我有一个由api返回的json数组,如下所示: "data": [ { "id": "7", "parent": "1", }, { "id": "8", "parent": "7&qu

我有一个由api返回的json数组,如下所示:

"data": [
        {
            "id": "7",
            "parent": "1",
        },
        {
            "id": "8",
            "parent": "7",
        },
        {
            "id": "9",
            "parent": "8",
        },
        {
            "id": "10",
            "parent": "7",
        },

    ]
是否有一种方法可以将这些数据排序到树状视图中,如中所示,使其如下所示?我尝试过使用MapToList,但似乎无法找到算法

1
 -7
   -8
     -9
 -10
这项工作:

import 'package:flutter/material.dart';
import 'package:flutter_simple_treeview/flutter_simple_treeview.dart';

final Color darkBlue = Color.fromARGB(255, 18, 32, 47);

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  final data = <Map<String, dynamic>>[
    {
      "id": "7",
      "parent": "1",
    },
    {
      "id": "8",
      "parent": "7",
    },
    {
      "id": "9",
      "parent": "8",
    },
    {
      "id": "10",
      "parent": "7",
    },
  ];

  String rootNode() {
    var r = data.firstWhere((e) => !data.any((ee) => ee["id"] == e["parent"]));
    return r["parent"];
  }

  TreeNode buildNode(String e) {
    return TreeNode(
        content: Text(e),
        children: data.where((element) => element["parent"] == e).map((element) => buildNode(element["id"])).toList());
  }

  @override
  Widget build(BuildContext context) {
    return TreeView(nodes: [buildNode(rootNode())]);
  }
}

导入“包装:颤振/材料.省道”;
导入“包:颤振_简单_树视图/颤振_简单_树视图.dart”;
最终颜色深蓝色=颜色。来自argb(255,18,32,47);
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:脚手架(
正文:中(
子项:MyWidget(),
),
),
);
}
}
类MyWidget扩展了无状态Widget{
最终数据=[
{
“id”:“7”,
“家长”:“1”,
},
{
“id”:“8”,
“家长”:“7”,
},
{
“id”:“9”,
“家长”:“8”,
},
{
“id”:“10”,
“家长”:“7”,
},
];
字符串rootNode(){
var r=data.firstWhere((e)=>!data.any((ee)=>ee[“id”]==e[“父”]);
返回r[“父项”];
}
TreeNode构建节点(字符串e){
返回树节点(
内容:文本(e),
子元素:data.where((element)=>element[“parent”]==e).map((element)=>buildNode(element[“id”]).toList();
}
@凌驾
小部件构建(构建上下文){
返回树视图(节点:[buildNode(rootNode())]);
}
}