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