diff options
author | Iván Ávalos <avalos@disroot.org> | 2023-03-17 15:14:54 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2023-03-17 15:14:54 -0600 |
commit | 2266a7fb9c46970f274d826edfcd99082d76698b (patch) | |
tree | d38b014c85e3b9175ec9c60e7114287fcc187c40 | |
parent | 71dfcf3b6527c67441f372ab08e82fd6bff5908f (diff) | |
download | pmsna1-2266a7fb9c46970f274d826edfcd99082d76698b.tar.gz pmsna1-2266a7fb9c46970f274d826edfcd99082d76698b.tar.bz2 pmsna1-2266a7fb9c46970f274d826edfcd99082d76698b.zip |
Implemented list of posts
-rw-r--r-- | lib/main.dart | 6 | ||||
-rw-r--r-- | lib/providers/flags_provider.dart | 16 | ||||
-rw-r--r-- | lib/widgets/post_item.dart | 56 | ||||
-rw-r--r-- | lib/widgets/post_list.dart | 6 |
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); |