J'ai 2 écrans dans mon application Flutter: liste des enregistrements et écran pour créer et éditer des enregistrements.
Si je passe l'objet au deuxième écran, cela signifie que je vais le modifier et si je passe null, cela signifie que je crée un nouvel élément. L'écran d'édition est un widget avec état et je ne sais pas comment utiliser cette approche https://flutter.io/cookbook/navigation/passing-data/ pour mon cas.
class RecordPage extends StatefulWidget {
final Record recordObject;
RecordPage({Key key, @required this.recordObject}) : super(key: key);
@override
_RecordPageState createState() => new _RecordPageState();
}
class _RecordPageState extends State<RecordPage> {
@override
Widget build(BuildContext context) {
//.....
}
}
Comment puis-je accéder à recordObject dans _RecordPageState ?
Réponses:
Pour utiliser recordObject dans _RecordPageState, vous devez simplement écrire widget.objectname comme ci-dessous
la source
recordObject
pas faire partie de laState
classe? Logiquement, l'avoir dansStatefulWidget
est incorrect (en termes de cohésion). De plus, tous les champs deStatefulWidget
doivent être immuables - que faire si vous souhaitez modifier larecordObject
référence?Text(widget.recordObject)
, ça dit que mon var est nulla source
recordObject
champ à la fois dansState
et dans lesStatefulWidget
classes soit une si bonne idée (même si j'ai vu des tutoriels faire exactement cela). L'approche d'accès aux champsStatefulWidget
en utilisant lewidget
champ deState
classe semble être une approche plus correcte (même si elle a ses propres problèmes)Exemple complet
Vous n'avez pas besoin de passer de paramètres à State en utilisant son constructeur. Vous pouvez facilement y accéder en utilisant widget.myField .
Transmettez vos données lorsque vous naviguez sur l'écran:
la source