поэтому я пытаюсь создать простое приложение для заметок, которое сохраняет заметки в базе данных с помощью SQFlite. Я добавил кнопку «Добавить заметки» с двумя полями TextField для заголовка и текста и работает, идея состоит в том, чтобы отобразить заголовок и текст в карточке в теле, моя проблема в том, что она создает и отображает карточку только с двумя текстами после перезапуска приложения, а не после нажатия «Сохранить». Вот код на данный момент:
main.dart:
import 'package:flutter/material.dart';
import 'home_screen.dart';
import 'note_inherited_widget.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return NoteInheritedWidget(
MaterialApp(
home: HomeScreen(),
theme: ThemeData(
primaryColor: Colors.deepOrange, accentColor: Colors.deepPurple),
),
);
}
}
home_screen.dart
import 'package:flutter/material.dart';
import 'package:simple_notes/note_inherited_widget.dart';
import 'package:simple_notes/providers/note_providers.dart';
import './note_inherited_widget.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final TextEditingController titleController = TextEditingController();
final TextEditingController textController = TextEditingController();
@override
void dispose() {
// Clean up the controller when the widget is disposed.
titleController.dispose();
textController.dispose();
super.dispose();
}
DummyDataProvider notes;
@override
void didChangeDependencies() {
super.didChangeDependencies();
notes = NoteInheritedWidget.of(context);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Simple Notes'),
centerTitle: true,
),
body: FutureBuilder(
future: NoteProvider.getNoteList(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
final notes = snapshot.data;
return ListView.builder(
itemBuilder: (context, index) {
return Card(
child: Column(
children: <Widget>[
NoteTitle(notes[index]['title']),
NoteText(notes[index]['text'])
],
),
);
},
itemCount: notes.length,
);
}
return Center(child: CircularProgressIndicator());
}
),
bottomNavigationBar: (FlatButton(
onPressed: () {
showMyDialog(context);
},
child: Text('Add note'))));
}
Future<void> showMyDialog(
BuildContext context,
) {
return showDialog<void>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Column(
children: <Widget>[
TextField(
controller: titleController,
),
TextField(
controller: textController,
)
],
),
actions: <Widget>[
MaterialButton(onPressed: () {
final title = titleController.text;
final text = textController.text;
NoteProvider.insertNote({
'title': title,
'text': text
});
Navigator.pop(context);
},
child: Text('save')
)
],
);
});
}
}
class NoteTitle extends StatelessWidget {
final String title;
NoteTitle(this.title);
@override
Widget build(BuildContext context) {
return Text(
title,
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
);
}
}
class NoteText extends StatelessWidget {
final String text;
NoteText(this.text);
@override
Widget build(BuildContext context) {
return Text(
text,
style: TextStyle(
color: Colors.grey.shade600,
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
);
}
}
class SaveButton extends StatelessWidget {
final Function onPressed;
SaveButton(this.onPressed);
@override
Widget build(BuildContext context) {
return MaterialButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Save'),
);
}
}
notes_provider.dart
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class NoteProvider {
static Database db;
static Future open() async {
db = await openDatabase(join(await getDatabasesPath(), 'notes.db'),
version: 1,
onCreate: (Database db, int version) async {
db.execute('''
CREATE TABLE notes(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
text TEXT NOT NULL
);
''');
}
);
}
static Future<List<Map<String, dynamic>>> getNoteList() async {
if (db == null) {
await open();
}
return await db.query('Notes');
}
static Future insertNote (Map<String, dynamic> note) async {
await db.insert('Notes', note);
}
}
I Я не смог решить эту проблему, так как сейчас изучаю программирование флаттера. Если бы вы, ребята, могли бы указать мне правильное решение этой проблемы, это было бы ужасно c.
Заранее спасибо!