From 6dec9856b1b94bfc4b284125920a2be52be6dabf Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Mon, 22 May 2023 09:16:29 -0600 Subject: Se persiste sesión, y se guardan imágenes en caché MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/firebase/auth.dart | 1 + lib/main.dart | 28 +++++++--- lib/widgets/chat_bubble.dart | 18 +++++-- pubspec.lock | 120 +++++++++++++++++++++++++++++++++++++++++++ pubspec.yaml | 1 + 5 files changed, 155 insertions(+), 13 deletions(-) diff --git a/lib/firebase/auth.dart b/lib/firebase/auth.dart index 303412e..35da5bf 100644 --- a/lib/firebase/auth.dart +++ b/lib/firebase/auth.dart @@ -15,6 +15,7 @@ class Auth { final Database _db = Database(); User? get currentUser => _auth.currentUser; + Stream get userChanges => _auth.userChanges(); Future createUserWithEmailAndPassword({ required String email, diff --git a/lib/main.dart b/lib/main.dart index a0ff04a..8baaa61 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,10 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; +import 'package:linkchat/screens/dashboard_screen.dart'; +import 'package:linkchat/screens/login_screen.dart'; import 'package:provider/provider.dart'; +import 'firebase/auth.dart'; import 'providers/theme_provider.dart'; import 'routes.dart'; import 'settings/themes.dart'; @@ -34,13 +37,15 @@ class _MainContentState extends State { providers: [ ChangeNotifierProvider(create: (_) => ThemeProvider()), ], - child: const LinkChat(), + child: LinkChat(), ); } } class LinkChat extends StatelessWidget { - const LinkChat({super.key}); + final Auth _auth = Auth(); + + LinkChat({super.key}); @override Widget build(BuildContext context) { @@ -48,11 +53,18 @@ class LinkChat extends StatelessWidget { final ThemeData? theme = provider.theme; provider.syncFromPrefs(); return MaterialApp( - theme: theme ?? ThemeSettings.lightTheme, - darkTheme: theme ?? ThemeSettings.darkTheme, - themeMode: ThemeMode.system, - routes: getApplicationRoutes(), - initialRoute: '/login', - ); + theme: theme ?? ThemeSettings.lightTheme, + darkTheme: theme ?? ThemeSettings.darkTheme, + themeMode: ThemeMode.system, + routes: getApplicationRoutes(), + // initialRoute: '/login', + home: StreamBuilder( + stream: _auth.userChanges, + builder: (context, snapshot) { + return (snapshot.hasData && !snapshot.data!.isAnonymous) + ? const DashboardScreen() + : const LoginScreen(); + }, + )); } } diff --git a/lib/widgets/chat_bubble.dart b/lib/widgets/chat_bubble.dart index 7c2e16c..5afa01e 100644 --- a/lib/widgets/chat_bubble.dart +++ b/lib/widgets/chat_bubble.dart @@ -1,3 +1,4 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:custom_clippers/custom_clippers.dart'; import 'package:flutter/material.dart'; import 'package:linkchat/models/message.dart'; @@ -124,12 +125,19 @@ class LinkPreview extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ message.linkPhotoURL != null - ? FadeInImage( - placeholder: const AssetImage('assets/loading.gif'), - image: NetworkImage(message.linkPhotoURL!), - imageErrorBuilder: (context, error, stackTrace) => + // ? FadeInImage( + // placeholder: const AssetImage('assets/loading.gif'), + // image: NetworkImage(message.linkPhotoURL!), + // imageErrorBuilder: (context, error, stackTrace) => + // const SizedBox.shrink(), + // fit: BoxFit.fill, + // ) + ? CachedNetworkImage( + imageUrl: message.linkPhotoURL!, + placeholder: (context, url) => + Image.asset('assets/loading.gif'), + errorWidget: (context, url, error) => const SizedBox.shrink(), - fit: BoxFit.fill, ) : const SizedBox.shrink(), message.linkTitle != null diff --git a/pubspec.lock b/pubspec.lock index 0e6372d..4088b0b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -33,6 +33,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + url: "https://pub.dev" + source: hosted + version: "3.2.3" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + url: "https://pub.dev" + source: hosted + version: "1.0.2" characters: dependency: transitive description: @@ -270,6 +294,22 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" + url: "https://pub.dev" + source: hosted + version: "3.3.0" flutter_lints: dependency: "direct dev" description: @@ -432,6 +472,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + url: "https://pub.dev" + source: hosted + version: "1.0.2" path: dependency: "direct main" description: @@ -440,6 +488,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" + url: "https://pub.dev" + source: hosted + version: "2.0.15" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" + url: "https://pub.dev" + source: hosted + version: "2.0.27" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" + url: "https://pub.dev" + source: hosted + version: "2.2.3" path_provider_linux: dependency: transitive description: @@ -464,6 +536,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.6" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" platform: dependency: transitive description: @@ -504,6 +584,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.5" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" shared_preferences: dependency: "direct main" description: @@ -589,6 +677,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9 + url: "https://pub.dev" + source: hosted + version: "2.2.8+4" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: e77abf6ff961d69dfef41daccbb66b51e9983cdd5cb35bf30733598057401555 + url: "https://pub.dev" + source: hosted + version: "2.4.5" stack_trace: dependency: transitive description: @@ -621,6 +725,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.dev" + source: hosted + version: "3.1.0" term_glyph: dependency: transitive description: @@ -725,6 +837,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.6" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8657ed6..8dbe28a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,6 +26,7 @@ dependencies: custom_clippers: ^2.0.0 simple_link_preview: ^1.0.2 url_launcher: ^6.1.11 + cached_network_image: ^3.2.3 intl: ^0.18.1 dev_dependencies: -- cgit v1.2.3