Flutter Dart constructeur
Dans le flottement de la page d'Exemples, il y a un projet intitulé "Envoi de Données à un nouvel écran". J'ai une question concernant le constructeur sur la ligne 65.
Envoi de Données à un nouvel écran
//In the constructor, require a Todo
DetailScreen({Key key, @required this.todo}) : super(key: key);
Qu'est-ce que le super(key: la clé)? Pourrais-je obtenir une explication de l'ensemble de la ligne s'il vous plaît. Le Code est ici....
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}'),
),
);
}
}
- Double Possible de Quelles sont les Clés de la Apatrides widgets de la classe?
- Je ne pense pas que ce soit un double des Clés de la question depuis qu'il pose sur l'ensemble du constructeur, et pas seulement le paramètre clé.
Vous devez vous connecter pour publier un commentaire.
Le constructeur à deux paramètres nommés.
Les paramètres nommés sont en option par défaut.
@required
est une annotation reconnu par le Dard de l'analyseur et produit un message d'avertissement si pas passé lorsqu'il est invoqué au moment de la création (il n'a pas d'effet au moment de l'exécution).:
commence le "initialisation de la liste", une virgule séparés liste des expressions exécuté avant que le constructeur de la super-classes et, par conséquent, également avant la contructors corps.Il est souvent utilisé pour vérifier les valeurs de paramètre à l'aide d'assertions et d'initialiser final champs avec les valeurs calculées.
Une limitation est, que les expressions ne peuvent pas lire-accès
this.
(implicitement ou explicitement) parce que l'initialisation de l'objet n'est pas terminée avant le super constructeurs sont exécutées.Le dernier élément dans l'initialiseur, est un appel implicite au constructeur par défaut de la classe super si omis, ou l'appel à un constructeur de la classe en cours ou de la super-classe si donné.
À l'exemple de votre question, la
key
paramètre passé au constructeur est transmise au paramètre nommékey
de le sans nom, le constructeur de la super classe.C'est un exemple pour compléter Günter Zöchbauer de l'explication. Il est le constructeur de la Aligner widget.
Plus de notes:
this.
préfixe sont des variables de la super-classe.this.
variables sont définies dans la classe en cours.