命名参数和必需参数
本课属于 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:,编辑器会在应用运行前显示错误。
挑战
中等显示每本书的页数:
- 向
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);
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
列表和屏幕中的所有课
自己练习: Flutter 在线编译器