gpt4 book ai didi

dart - Flutter Dart 构造函数

转载 作者:IT老高 更新时间:2023-10-28 12:32:15 24 4
gpt4 key购买 nike

在flutter示例页面中,有一个名为“Sending Data to a new screen”的项目。我对第 65 行的构造函数有疑问。

Sending Data to a new screen

  // In the constructor, require a Todo
DetailScreen({Key key, @required this.todo}) : super(key: key);

什么是 super (键:键)?请我解释一下整行。代码在这里....

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class Todo {
final String title;
final String description;

Todo(this.title, this.description);
}

void main() {
runApp(MaterialApp(
title: 'Passing Data',
home: TodosScreen(
todos: List.generate(
20,
(i) => Todo(
'Todo $i',
'A description of what needs to be done for Todo $i',
),
),
),
));
}

class TodosScreen extends StatelessWidget {
final List<Todo> todos;

TodosScreen({Key key, @required this.todos}) : super(key: key);

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Todos'),
),
body: ListView.builder(
itemCount: todos.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(todos[index].title),
// When a user taps on the ListTile, navigate to the DetailScreen.
// Notice that we're not only creating a DetailScreen, we're
// also passing the current todo through to it!
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailScreen(todo: todos[index]),
),
);
},
);
},
),
);
}
}

class DetailScreen extends StatelessWidget {
// Declare a field that holds the Todo
final Todo todo;

// In the constructor, require a Todo
DetailScreen({Key key, @required this.todo}) : super(key: key);

@override
Widget build(BuildContext context) {
// Use the Todo to create our UI
return Scaffold(
appBar: AppBar(
title: Text("${todo.title}"),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Text('${todo.description}'),
),
);
}
}

最佳答案

构造函数有两个命名参数。
命名参数默认是可选的。
@required 是 Dart 分析器识别的注解,如果在构建时调用时未传递,则会产生警告(在运行时不起作用)。

: 启动“初始化列表”,这是一个逗号分隔的表达式列表,在父类(super class)的构造函数之前执行,因此也在构造函数主体之前执行。
它通常用于使用断言检查参数值并使用计算值初始化最终字段。
一个限制是,表达式无法读取访问 this.(隐式或显式),因为在执行 super 构造函数之前未完成对象初始化。

如果省略,初始化器中的最后一个元素是对父类(super class)的默认构造函数的隐式调用,或者如果给定,则是对当前类或父类(super class)的特定构造函数的调用。

在您问题的示例中,传递给构造函数的 key 参数被转发到父类(super class)的未命名构造函数的命名参数 key

关于dart - Flutter Dart 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com