sqlite 如何在flutter中显示将数据插入到列表视图生成器中而无需重载应用程序

fd3cxomn  于 2022-12-19  发布在  SQLite
关注(0)|答案(1)|浏览(122)

我已经从flutter创建了一个sqlite crud应用程序。我的应用程序数据插入到表中成功。但当我显示从列表视图插入的日期需要重新加载app.in我的应用程序数据插入从一个单独的屏幕。数据已显示在主屏幕上。我想显示数据而不重新加载应用程序在列表视图中我怎么能解决我的问题?
这是我的应用程序代码。这是我的主屏幕。这个屏幕显示来自listview的数据。

FutureBuilder<List<Student>>(
                    future: DatabaseHelper.instance.getStudentDetails(),
                    builder: (BuildContext context,
                        AsyncSnapshot<List<Student>> snapshot) {
                      if (!snapshot.hasData) {
                        return Center(child: Text('Loading...'));
                      }
                      return snapshot.data!.isEmpty
                          ? Center(child: Text('No Student Details in List.'))
                          : ListView(
                              children: snapshot.data!.map((student) {
                                return Center(
                                  child: Card(
                                    color: selectedId == student.id
                                        ? Colors.white70
                                        : Colors.white,
                                    child: ListTile(
                                      title: Text(
                                          'Student Name : ${student.name}'),
                                      subtitle:
                                          Text('Course : ${student.course}'),
                                      onTap: () {},
                                      onLongPress: () {
                                        setState(() {
                                          DatabaseHelper.instance
                                              .remove(student.id!);
                                        });
                                      },
                                    ),
                                  ),
                                );
                              }).toList(),
                            );
                    }),

这是我的第二个屏幕。这个屏幕我添加数据插入到sqlite表。当我点击浮动操作按钮时,我想在主屏幕列表视图中显示插入数据,而无需重新加载。

Column(
        children: [
          SizedBox(
            height: 10.0,
          ),
          Text(
            'Enter Student Details',
            style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
          ),
          Padding(
            padding: const EdgeInsets.only(top: 8.0),
            child: Divider(color: Colors.black),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              decoration: InputDecoration(
                label: Text('Enter Name :'),
              ),
              controller: nameController,
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              decoration: InputDecoration(
                label: Text('Enter Course :'),
              ),
              controller: courseController,
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.save),
        onPressed: () async {
          await DatabaseHelper.instance.add(
            Student(name: nameController.text, course: courseController.text),
          );
          setState(() {
            nameController.clear();
            courseController.clear();
            selectedId = null;
          });
        },
      ),
brccelvz

brccelvz1#

future: DatabaseHelper.instance.getStudentDetails(),将在每次setState(构建)时调用API。
为了避免调用API,在state类上为这个future创建一个state变量(在build方法之外)。

late final future = DatabaseHelper.instance.getStudentDetails();

并在FutureBuilder上使用它

FutureBuilder<List<Student>>(
    future: future,
    builder: (BuildContext context,

你可以查一下兰德尔·L·施瓦茨的Fixing a common FutureBuilder and StreamBuilder problem

相关问题