summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-03-17 15:14:54 -0600
committerIván Ávalos <avalos@disroot.org>2023-03-17 15:14:54 -0600
commit2266a7fb9c46970f274d826edfcd99082d76698b (patch)
treed38b014c85e3b9175ec9c60e7114287fcc187c40
parent71dfcf3b6527c67441f372ab08e82fd6bff5908f (diff)
downloadpmsna1-2266a7fb9c46970f274d826edfcd99082d76698b.tar.gz
pmsna1-2266a7fb9c46970f274d826edfcd99082d76698b.tar.bz2
pmsna1-2266a7fb9c46970f274d826edfcd99082d76698b.zip
Implemented list of posts
-rw-r--r--lib/main.dart6
-rw-r--r--lib/providers/flags_provider.dart16
-rw-r--r--lib/widgets/post_item.dart56
-rw-r--r--lib/widgets/post_list.dart6
4 files changed, 77 insertions, 7 deletions
diff --git a/lib/main.dart b/lib/main.dart
index 8af7617..026019c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
+import 'package:pmsna1/providers/flags_provider.dart';
import 'package:pmsna1/providers/theme_provider.dart';
import 'package:pmsna1/routes.dart';
import 'package:pmsna1/settings/themes.dart';
@@ -28,9 +29,8 @@ class _MainContentState extends State<MainContent> {
Widget build(BuildContext context) {
return MultiProvider(
providers: [
- ChangeNotifierProvider(
- create: (_) => ThemeProvider(),
- ),
+ ChangeNotifierProvider(create: (_) => ThemeProvider()),
+ ChangeNotifierProvider(create: (_) => FlagsProvider()),
],
child: const PMSNA1(),
);
diff --git a/lib/providers/flags_provider.dart b/lib/providers/flags_provider.dart
new file mode 100644
index 0000000..cdb466f
--- /dev/null
+++ b/lib/providers/flags_provider.dart
@@ -0,0 +1,16 @@
+import 'package:flutter/material.dart';
+
+class FlagsProvider with ChangeNotifier {
+ bool _refreshPosts = false;
+
+ bool get refreshPosts => _refreshPosts;
+
+ set refreshPosts(bool refreshPosts) {
+ _refreshPosts = refreshPosts;
+ notifyListeners();
+ }
+
+ void triggerRefresh() {
+ refreshPosts = !refreshPosts;
+ }
+}
diff --git a/lib/widgets/post_item.dart b/lib/widgets/post_item.dart
index 55f0a60..952fd3f 100644
--- a/lib/widgets/post_item.dart
+++ b/lib/widgets/post_item.dart
@@ -1,8 +1,13 @@
import 'package:flutter/material.dart';
import 'package:pmsna1/models/post.dart';
+import 'package:pmsna1/providers/flags_provider.dart';
+import 'package:provider/provider.dart';
+
+import '../database/helper.dart';
class PostItem extends StatelessWidget {
final Post post;
+ final DatabaseHelper _database = DatabaseHelper();
final padding = 16.0;
final spacer = const SizedBox(
@@ -10,7 +15,7 @@ class PostItem extends StatelessWidget {
width: 16.0,
);
- const PostItem({super.key, required this.post});
+ PostItem({super.key, required this.post});
@override
Widget build(BuildContext context) {
@@ -25,12 +30,13 @@ class PostItem extends StatelessWidget {
final txtDate = Text(post.date);
final txtDesc = Text(post.description);
final imgPost = Image.asset('assets/logo_itc.png');
- const likes = Icon(Icons.rate_review);
+
+ FlagsProvider provider = Provider.of<FlagsProvider>(context);
return Card(
margin: EdgeInsets.fromLTRB(padding, 0, padding, padding),
child: Padding(
- padding: EdgeInsets.all(padding),
+ padding: EdgeInsets.fromLTRB(padding, padding, padding, 0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
@@ -54,6 +60,50 @@ class PostItem extends StatelessWidget {
child: txtDesc,
),
),
+ spacer,
+ Row(
+ children: [
+ const Icon(Icons.star),
+ spacer,
+ const Text('0'),
+ const Expanded(child: SizedBox.shrink()),
+ IconButton(
+ icon: const Icon(Icons.edit),
+ onPressed: () {},
+ ),
+ IconButton(
+ icon: const Icon(Icons.delete),
+ onPressed: () {
+ showDialog(
+ context: context,
+ builder: (context) => AlertDialog(
+ title: const Text('Confirmar borrado'),
+ content: const Text('¿Desea borrar el post?'),
+ actions: [
+ TextButton(
+ child: const Text('Sí'),
+ onPressed: () {
+ _database
+ .delete('posts', 'id', post.id)
+ .then((_) {
+ provider.triggerRefresh();
+ Navigator.of(context).pop();
+ });
+ },
+ ),
+ TextButton(
+ child: const Text('No'),
+ onPressed: () {
+ Navigator.of(context).pop();
+ },
+ )
+ ],
+ ),
+ );
+ },
+ )
+ ],
+ )
],
),
),
diff --git a/lib/widgets/post_list.dart b/lib/widgets/post_list.dart
index 1f0f870..f31741d 100644
--- a/lib/widgets/post_list.dart
+++ b/lib/widgets/post_list.dart
@@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:pmsna1/database/helper.dart';
import 'package:pmsna1/models/post.dart';
+import 'package:pmsna1/providers/flags_provider.dart';
import 'package:pmsna1/widgets/post_item.dart';
+import 'package:provider/provider.dart';
class PostList extends StatefulWidget {
const PostList({super.key});
@@ -21,12 +23,14 @@ class _PostListState extends State<PostList> {
@override
Widget build(BuildContext context) {
+ FlagsProvider provider = context.watch<FlagsProvider>();
return FutureBuilder(
- future: helper.getAllPost(),
+ future: provider.refreshPosts ? helper.getAllPost() : helper.getAllPost(),
builder: (BuildContext context, AsyncSnapshot<List<Post>> snapshot) =>
snapshot.hasData
? ListView.builder(
itemCount: snapshot.data?.length,
+ padding: const EdgeInsets.only(bottom: 100.0),
itemBuilder: (context, index) {
Post post = snapshot.data![index];
return PostItem(post: post);