尝试显示项目列表时,'List <dynamic>'不是'List <Widget>'类型的子类型

时间:2019-09-16 19:12:37

标签: flutter dart

我创建了一个日期列表。我想将其呈现在小部件列表中,但出现错误:类型“列表”不是类型“列表”的子类型。有没有更好的方法来显示日期列表?

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();
}

1 个答案:

答案 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();
}

您会注意到两件事:

  1. 我将DateTime对象映射到Text对象,并且将Text is a widget映射为文本String

  2. 在某些地方,语法更加有些习惯,成为更加惯用的Dart代码。我相信您会直观地理解这种语法。