在页面上更新数据

时间:2020-10-09 10:10:06

标签: flutter dart flutter-layout flutter-test flutter-listview

我刚刚开始学习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);
  }
}

1 个答案:

答案 0 :(得分:0)

是的,因为添加数据的代码未写在setState((){})块下。请按照以下步骤重试:

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