dart - 如何制作新数组嵌套排序映射

我想要做的是将这个 List 转换为输出这个的东西:

var transformedList = [

{ ‘Week 1’: [

{ id: ‘1’, title: ‘thing1’, day: 1, week: 1 },

{ id: ‘2’, title: ‘thing2’, day: 1, week: 1 },

{ id: ‘3’, title: ‘thing3’, day: 2, week: 1 },

{ id: ‘4’, title: ‘thing4’, day: 2, week: 1 },

{ id: ‘5’, title: ‘thing5’, day: 3, week: 1 },

{ id: ‘6’, title: ‘thing6’, day: 3, week: 1 },

],

‘Week 2’: [

{ id: ‘7’, title: ‘thing7’, day: 4, week: 2 },

{ id: ‘8’, title: ‘thing8’, day: 5, week: 3 },

]

}

]

到目前为止我尝试过的是:

var programMap = Map.fromIterable(userProgramSteps, key: (k) => k.getWeek(), value: (v) => v);

// handles the week port just fine, but very stuck on the list of days.

我对flutter和 Dart 很陌生,所以我有点迷茫…有人可以帮忙吗?

最佳答案

尊重您之前(已删除)的问题,这里的代码:

data_weeks.dart

const week_data = [

{ ‘id’: ‘1’, ‘week’: 1, ‘day’: 1, ‘title’: ‘thing1’ },

{ ‘id’: ‘2’, ‘week’: 1, ‘day’: 1, ‘title’: ‘thing2’ },

{ ‘id’: ‘3’, ‘week’: 1, ‘day’: 1, ‘title’: ‘thing3’ },

{ ‘id’: ‘4’, ‘week’: 1, ‘day’: 2, ‘title’: ‘thing4’ },

{ ‘id’: ‘5’, ‘week’: 1, ‘day’: 2, ‘title’: ‘thing5’ },

{ ‘id’: ‘6’, ‘week’: 2, ‘day’: 3, ‘title’: ‘thing6’ },

{ ‘id’: ‘7’, ‘week’: 2, ‘day’: 4, ‘title’: ‘thing7’ },

];

home_page.dart

import ‘package:flutter/material.dart’;

import ‘package:list_cards/src/shared/data_weeks.dart’;

class HomePage extends StatelessWidget {

/* ---------------------------------------------------------------------------- */

const HomePage({Key key}) : super(key: key);

/* ---------------------------------------------------------------------------- */

@override

Widget build(BuildContext context) {

final data = getNewData();

return Scaffold(

appBar: AppBar(

title: Text(‘Hi!’),

centerTitle: true,

),

body: Padding(

padding: const EdgeInsets.all(10.0),

child: ListView.builder(

itemCount: data.length,

itemBuilder: (context, index) => ListTile(

title: Text(

‘Week ${data.keys.toList()[index]}’,

style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),

),

subtitle: getSubtitles1(data[data.keys.toList()[index]], context),

),

),

),

);

}

Widget getSubtitles1(List<Map<int, Object>> data, BuildContext context) {

return Column(

children: List.generate(data.length, (index) => ListTile(

title: Text(

‘DAY ${data[index].keys.toList()[0]}’,

style: TextStyle(

fontSize: 18, fontWeight: FontWeight.bold, color: Colors.black.withOpacity(0.4)

),

),

subtitle: getSubtitles2(data[index][data[index].keys.toList()[0]], context),

)),

);

}

Widget getSubtitles2(List data, BuildContext context) {

final size = MediaQuery.of(context).size;

return Column(

children: List.generate(data.length, (index) => Card(

elevation: 0,

margin: EdgeInsets.all(0),

child: Padding(

padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 2),

child: Row(

children: [

Container(

width: (size.width + 80) / 2,

child: Text(data[index]),

),

IconButton(icon: Icon(Icons.check_box_outline_blank), onPressed: () {}),

],

),

),

)),

);

}

Map<int, Object> getNewData() {

var weeks = week_data.map((m) => m[‘week’]).toSet().toList();

var newData = Map<int, Object>();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值