flutter - Flutter 将列表排序到 TreeNode 的嵌套小部件中
问题描述
我有一个由 api 返回的 json 数组,如下所示:
"data": [
{
"id": "7",
"parent": "1",
},
{
"id": "8",
"parent": "7",
},
{
"id": "9",
"parent": "8",
},
{
"id": "10",
"parent": "7",
},
]
有没有一种方法可以像在flutter_simple_treeview中那样将这些数据排序到树视图中,使其如下所示?我曾尝试使用 map toList 但似乎无法弄清楚算法。
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())]);
}
}
推荐阅读
- javascript - Firebase将项目添加到数组
- cout - 刚从 C++ 开始,不注册命令
- vim - 从每行中的每个文件路径中提取文件名并添加到它旁边
- django - Django模板标签左/右
- google-apps-script - Google Sheet Script:通过最后一行唯一值查找另一个工作表范围内单元格的行号,然后更新目标行的列
- python - 打字界面
- python - 腌制一个对于 RAM 来说太大的文件
- unity3d - IBM Watson Unity SDK IAM 身份验证
- python - 创建函数时有没有办法在列表中编辑字符串?
- python - 是什么阻止计算机向我的程序输出解决方案?