database - 颤振中的所有音符都显示相同的日期。日期未动态更新
问题描述
我是 Flutter 的初学者,我正在构建一个简单的笔记应用程序。每当用户创建便笺时,创建日期的月份和年份将被插入到 SQflite DB 中,我在主屏幕上获取相同的内容。但对于所有其他笔记,也会显示相同的日期月份和年份。不知道哪里出错了,求大神帮忙。在过去的两天里,我陷入了困境。我已经检查了 StackOverflow 中的其他答案,从那里我了解了 date 的实现,但无法解决这个问题。
数据库助手类
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'model_notes.dart';
class DatabaseHelper {
static final _databaseName = "myNote.db";
static final _databaseVersion = 1;
static final table = 'notes_table';
static final columnId = 'id';
static final columnTitle = 'title';
static final columnBody = 'body';
static final columnDate = 'date';
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database _database;
Future<Database> get database async {
if (_database != null) return _database;
_database = await initDatabase();
return _database;
}
initDatabase() async {
String path = join(await getDatabasesPath(), _databaseName);
return await openDatabase(path,
version: _databaseVersion, onCreate: _onCreate);
}
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE $table (
$columnId INTEGER PRIMARY KEY AUTOINCREMENT,
$columnTitle TEXT NOT NULL,
$columnBody TEXT NOT NULL,
$columnDate TEXT NOT NULL
)
''');
}
Future<int> insert(Note note) async {
Database db = await instance.database;
if (note.title.trim().isEmpty) note.title = 'Untitled Note';
return await db.insert(table, {'title': note.title, 'body': note.body, 'date': note.date});
}
Future<List<Note>> getNotesFromDB() async {
final db = await database;
List<Note> notesList = [];
List<Map> maps = await db.query(table);
if (maps.length > 0) {
maps.forEach((map) {
notesList.add(Note.fromMap(map));
});
}
return notesList;
}
}
这是我的笔记模型类
import 'db_operations.dart';
class Note {
int id;
String title;
String body;
String date;
Note(this.id, this.title, this.body, this.date);
Note.fromMap(Map<String, dynamic> map) {
id = map['id'];
title = map['title'];
body = map['body'];
date = map['date'];
}
Map<String, dynamic> toMap() {
return {
DatabaseHelper.columnId: id,
DatabaseHelper.columnTitle: title,
DatabaseHelper.columnBody: body,
DatabaseHelper.columnDate: date,
};
}
@override
String toString() {
return '$title, $date';
}
}
这是我添加注释的地方
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:note_taking_app/constants/buttons_and_icons_misc(classes).dart';
import 'package:note_taking_app/db/db_operations.dart';
import 'package:note_taking_app/db/model_notes.dart';
final bodyController = TextEditingController();
final headerController = TextEditingController();
final dbHelper = DatabaseHelper.instance;
String formattedDate = DateFormat.yMMMd('en_US').format(DateTime.now());
class AddingNotes extends StatefulWidget {
@override
_AddingNotesState createState() => _AddingNotesState();
}
class _AddingNotesState extends State<AddingNotes> {
@override
void initState() {
super.initState();
bodyController.clear();
headerController.clear();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
backwardsCompatibility: true,
leading: LeadingIcon(
callBack: () {
Navigator.pop(context);
},
),
backgroundColor: Colors.white.withOpacity(0.4),
actions: <Widget>[
ActionsIconButton(
icon: Icon(undo, color: black),
callBack: () {
debugPrint('undo tapped');
},
),
ActionsIconButton(
icon: Icon(redo, color: black),
callBack: () {
debugPrint('redo tapped');
},
),
ActionsIconButton(
icon: Icon(save, color: black),
callBack: () async {
String title = headerController.text;
String body = bodyController.text;
Note note = Note(20, title, body, formattedDate);
var value = await dbHelper.insert(note);
Navigator.pop(context);
},
)
],
),
body: Container(
color: Colors.white.withOpacity(0.4),
child: Padding(
padding: const EdgeInsets.all(13.0),
child: Column(
children: [
HeaderBody(
textEditingController: headerController,
),
SizedBox(
height: 32.0,
),
Expanded(
child: NotesBody(
textEditingController: bodyController,
),
),
],
),
),
),
);
}
}
这是我显示笔记的地方
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:note_taking_app/constants/buttons_and_icons_misc(classes).dart';
import 'package:note_taking_app/constants/text_and_decorations(methods).dart';
import 'package:note_taking_app/db/model_notes.dart';
import 'package:note_taking_app/ui/adding_notes.dart';
class MainScreen extends StatefulWidget {
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
List<Note> noteList = [];
@override
void initState() {
super.initState();
dbHelper.initDatabase();
setNotesFromDB();
}
setNotesFromDB() async {
print("Entered setNotes in main page");
var fetchedNotes = await dbHelper.getNotesFromDB();
setState(() {
noteList = fetchedNotes;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: mainScreenAppBar,
floatingActionButton: FAB(
whatToDo: () {
gotoAddingNotesPage(context);
},
),
body: SafeArea(
child: ListView.builder(
itemCount: noteList.length,
itemBuilder: (context, index) {
return TileCard(
titleText: ('${noteList[index].title}'),
dateText: ('${noteList[index].date}'),
);
},
),
),
);
}
gotoAddingNotesPage(BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AddingNotes()),
).then((value) => setState(() {
setNotesFromDB();
}));
}
}
这是我声明 dateText 小部件的 TileCard 类
class TileCard extends StatelessWidget {
final String titleText;
final String dateText;
const TileCard({@required this.titleText, @required this.dateText});
@override
Widget build(BuildContext context) {
return Container(
height: 90,
child: Card(
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
elevation: 0,
margin: const EdgeInsets.all(8.0),
child: ListTile(
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
title: Text(
titleText,
style: TextStyle(fontWeight: FontWeight.w700),
),
tileColor: Colors.grey.withOpacity(0.2),
subtitle: Padding(
padding: EdgeInsets.only(top: 10.0),
child: Text(dateText),
),
),
),
);
}
}
我添加了图像,这就是现在的样子。
解决方案
推荐阅读
- nginx - 全页缓存(FastCGI)+ CSRF 令牌(服务器端加载 SSI、ESI、Ajax)+ Nginx
- django - 如何将组权限分配给 Django 中的单个记录
- android - 有没有办法从firebaseauth获取名字和姓氏?
- list - 如何在lisp中对列表进行排序?
- kubernetes - 如何对 kubeadm 上的 metrics-server 进行故障排除?
- objective-c - 在 macOS 10.14 中使用 clang 编译 Objective-C?
- php - Symfony 文件夹中缺少帮助程序类
- bash - 如何将一系列关联数组的键设置为一个值
- python-3.x - 我希望在 on_raw_reaction 中为某个功能进行冷却
- r - 如何用 sapply 摆脱这个嵌套循环?