Menu
CoddyTech

命名参数和必需参数

本课属于 Coddy Flutter 学习旅程的“列表和屏幕”单元。第 13 课,共 33 课。

有三个或四个字段时,Book('Dune', 'Frank Herbert', 412) 很难读,而且很容易不小心把两个字符串的位置弄反。命名参数会在每次调用时标出字段名称:

class Book {
  final String title;
  final int pages;

  Book({required this.title, required this.pages});
}

Book(title: 'Dune', pages: 412)

构造函数中的花括号会让参数成为命名参数。你可以按任意顺序将每个参数写成 name: value。

你用过的组件也接受命名参数,例如 Text(style: ...) 或 ListTile(title: ...)。

required 表示必须提供该参数:如果省略 pages:,编辑器会在应用运行前显示错误。

challenge icon

挑战

中等

显示每本书的页数:

  • 向 Book 添加一个 final int pages; 字段
  • 将构造函数改为使用命名必需参数,并按以下方式编写图书:Book(title: 'Dune', author: 'Frank Herbert', pages: 412)。Emma 有 474 页,Ulysses 有 730 页
  • 在每行末尾显示 412 pages,作为列表项的 trailing:

亲手试试

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final List<Book> books = [
      Book('Dune', 'Frank Herbert'),
      Book('Emma', 'Jane Austen'),
      Book('Ulysses', 'James Joyce'),
    ];
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(title: const Text('Books')),
        body: ListView(
          children: [
            for (Book book in books)
              ListTile(
                title: Text(book.title),
                subtitle: Text(book.author),
              ),
          ],
        ),
      ),
    );
  }
}

class Book {
  final String title;
  final String author;

  Book(this.title, this.author);
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

列表和屏幕中的所有课

自己练习: Flutter 在线编译器