【问题标题】:Updating data on the page in flutter在颤动中更新页面上的数据
【发布时间】:2021-01-24 09:54:15
【问题描述】:

我刚开始学习 Dart 和 Flutter。我的 main.dart 文件中的列表视图小部件中有数据。我正在向其中添加一个数据,并且我有一个 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);
  }
}

【问题讨论】:

  • onSaved: (String value) { setState(){ student.grade = int.parse(value); } },

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


【解决方案1】:

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

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

【讨论】:

  • 我试过了,但还是不行。这个删除按钮,这工作正常... onPressed: () { setState(() { students.remove(selectedStudent); });这个添加按钮: onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context)=>StudentAdd(students))); },
猜你喜欢
  • 2022-01-08
  • 2020-11-23
  • 2021-04-05
  • 2019-11-21
  • 1970-01-01
  • 2023-02-05
  • 2021-08-07
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多