0

我在一个简单的笔记应用程序中工作,这是我的代码。

我只是做了这个例子来预览问题

这是导航到创建页面的主页,并使用 futureBuilder 显示来自数据库的数据

import 'package:flutter/material.dart';
import 'package:futurebuilder_test/db.dart';
import 'create.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final DatabaseHelper db = DatabaseHelper.instance;
  Future futureData;

  @override
  void initState() {
    futureData = _getData();
    super.initState();
  }

  Future _getData() async{
    return await db.queryAllRows('notes');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () => _navigateToCreatePage(context),
      ),

      body: FutureBuilder(
        future: _getData(),
        builder: (BuildContext context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (BuildContext context, index) {
                return ListTile(
                  title: Text(snapshot.data[index]['title']),
                );
              },
            );
          }
          
          return Text('Empty');
        },
      ),
    );
  }
}

void _navigateToCreatePage(context) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => CreatePage())
  );
}

这是创建页面

import 'package:flutter/material.dart';
import 'package:futurebuilder_test/db.dart';

class CreatePage extends StatelessWidget {
  final DatabaseHelper db = DatabaseHelper.instance;

  final TextEditingController title = TextEditingController();
  final TextEditingController description = TextEditingController();

  void save(context) async {
    await db.insert(
      'notes', {'title': title.text, 'description': description.text}
    );
    Navigator.pop(context);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Padding(
        padding: EdgeInsets.all(20.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,

          children: [
            TextField(
              decoration: InputDecoration(hintText: 'Title'),
              controller: title,
            ),

            TextField(
              decoration: InputDecoration(hintText: 'Title'),
              controller: description,
            ),

            RaisedButton(
              child: Text('Save'),
              onPressed: () => save(context),
            )
          ],
        ),
      ),
    );
  }
}

当用户单击保存按钮时,它会向数据库添加一个新注释并将页面弹出回主屏幕。假设未来的构建器在向数据库提交新数据后会更新它的数据,但这并没有发生。有人可以帮助我吗?

4

1 回答 1

0

您应该使用它处理前一页或使用状态管理处理所有内容。

于 2020-10-24T06:30:36.973 回答