我创建了一个日期列表。我想将其呈现在小部件列表中,但出现错误:类型“列表”不是类型“列表”的子类型。有没有更好的方法来显示日期列表?
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = 'Basic List';
var start = DateTime.now();
var end = DateTime(2021, 12, 31);
var list = [];
while (start.isBefore(end)) {
list.add(start);
start = start.add(Duration(days: 1));
}
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: getDaysInWeek(),
),
),
),
);
}
}
List<Widget> getDaysInWeek() {
var start = DateTime.now();
var end = DateTime(2021, 12, 31);
var list = [];
while (start.isBefore(end)) {
list.add(start);
start = start.add(Duration(days: 1));
}
return list.toList();
}
答案 0 :(得分:0)
您需要将List<DateTime
映射到List<Widget
。直观上讲这是必需的,因为您不能在Flutter中显示DateTime
,而只能显示Widget
s !
这可能看起来像这样:
List<Widget> get daysInWeek {
final end = DateTime(2021, 12, 31), list = <DateTime>[];
DateTime start = DateTime.now();
while (start.isBefore(end)) {
list.add(start);
start = start.add(const Duration(days: 1));
}
return list.map((DateTime time) {
return Text(time.toString());
}).toList();
}
您会注意到两件事:
我将DateTime
对象映射到Text
对象,并且将Text
is a widget映射为文本String
。
在某些地方,语法更加有些习惯,成为更加惯用的Dart代码。我相信您会直观地理解这种语法。