首页 > 解决方案 > 在颤动中更新页面上的数据

问题描述

我刚开始学习 Dart 和 Flutter。我的 main.dart 文件的 listview 小部件中有数据。我正在向其中添加一个数据,并且我有一个 StudentAdd 类。这是我的代码,但是如果不单击屏幕,我的页面上的数据不会自动更新。当我运行代码时,我的新数据不会显示在列表视图中。我的错误是什么?

提前感谢您的回答。

import 'package:flutter/material.dart';
import 'package:temel_widget/models/student.dart';
import 'package:temel_widget/validation/student_validator.dart';

class StudentAdd extends StatefulWidget {
  List<Student> students;
  StudentAdd(List<Student> students) {
    this.students = students;
  }
  @override
  State<StatefulWidget> createState() {
    return _StudentAddState(students);
  }
}

class _StudentAddState extends State with StudentValidationMixin {
  List<Student> students;
  var student = Student.withoutInfo();
  var formKey = GlobalKey<
      FormState>(); 

  _StudentAddState(List<Student> students) {
    this.students = students;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Yeni Öğrenci Ekle"),
        ),
        body: Container(
          margin: EdgeInsets.all(20.0),
          child: Form(
              key: formKey, 
              child: Column(
                children: <Widget>[
                  buildFirstNameField(),
                  buildLastNameField(),
                  buildGradeField(),
                  buildSubmitButton(),
                ],
              )),
        ));
  }

  Widget buildFirstNameField() {
    return TextFormField(
      decoration:
          InputDecoration(labelText: "Öğrenci Adı:", hintText: "isim girin"),
      validator: validateFirstName,
      onSaved: (String value) {
        student.firstName = value;
      },
    );
  }

  Widget buildLastNameField() {
    return TextFormField(
      decoration:
          InputDecoration(labelText: "Öğrenci Soyadı:", hintText: "soyisim girin"),
      validator: validateLastName,
      onSaved: (String value) {
        student.lastName = value;
      },
    );
  }

  Widget buildGradeField() {
    return TextFormField(
      decoration: InputDecoration(labelText: "Aldığı Not:", hintText: "0"),
      validator: validateGrade,
      onSaved: (String value) {
        student.grade = int.parse(value);
      },
    );
  }

  Widget buildSubmitButton() {
    return RaisedButton(
      child: Text("KAYDET"),
      onPressed: () {
        if (formKey.currentState.validate()) {
          formKey.currentState.save(); 
          saveStudent();
          students.add(student);
          Navigator.pop(context);
        }
      },
    );
  }

  void saveStudent() {
    print(student.firstName);
    print(student.lastName);
    print(student.grade);
  }
}

标签: flutterdartflutter-layoutflutter-testflutter-listview

解决方案


是的,这是因为添加数据的代码没有写在setState((){})块下。通过执行以下操作重试:

setState((){
    formKey.currentState.save(); 
    saveStudent();
    students.add(student);
});

推荐阅读