From 90d4a58d6ccfc80a8dc15d87f019e18eae14f274 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Sun, 30 Oct 2022 13:41:13 +0100 Subject: [PATCH] neon: Fix articles without URLs --- .../neon/lib/src/apps/news/blocs/article.dart | 2 - .../neon/lib/src/apps/news/pages/article.dart | 41 +++++++++++-------- .../src/apps/news/widgets/articles_view.dart | 19 +++++---- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/packages/neon/lib/src/apps/news/blocs/article.dart b/packages/neon/lib/src/apps/news/blocs/article.dart index c49aef88..e9907656 100644 --- a/packages/neon/lib/src/apps/news/blocs/article.dart +++ b/packages/neon/lib/src/apps/news/blocs/article.dart @@ -64,7 +64,6 @@ class NewsArticleBloc extends $NewsArticleBloc { _unreadSubject.add(article.unread); _starredSubject.add(article.starred); - url = article.url; } void _wrapArticleAction(final Future Function() call) { @@ -79,7 +78,6 @@ class NewsArticleBloc extends $NewsArticleBloc { final NextcloudClient _client; final NewsArticlesBloc _newsArticlesBloc; - late final String url; final _unreadSubject = BehaviorSubject(); final _starredSubject = BehaviorSubject(); final _errorsStreamController = StreamController(); diff --git a/packages/neon/lib/src/apps/news/pages/article.dart b/packages/neon/lib/src/apps/news/pages/article.dart index 15cf2410..a2b07e4e 100644 --- a/packages/neon/lib/src/apps/news/pages/article.dart +++ b/packages/neon/lib/src/apps/news/pages/article.dart @@ -6,13 +6,16 @@ class NewsArticlePage extends StatefulWidget { required this.articlesBloc, required this.useWebView, this.bodyData, + this.url, super.key, - }) : assert(useWebView || bodyData != null, 'bodyData has to be set when not using a WebView'); + }) : assert(useWebView || bodyData != null, 'bodyData has to be set when not using a WebView'), + assert(!useWebView || url != null, 'url has to be set when using a WebView'); final NewsArticleBloc bloc; final NewsArticlesBloc articlesBloc; final bool useWebView; final String? bodyData; + final String? url; @override State createState() => _NewsArticlePageState(); @@ -75,7 +78,7 @@ class _NewsArticlePageState extends State { return (await _webviewController!.currentUrl())!; } - return widget.bloc.url; + return widget.url!; } @override @@ -129,21 +132,23 @@ class _NewsArticlePageState extends State { ); }, ), - IconButton( - onPressed: () async { - await launchUrlString( - await _getURL(), - mode: LaunchMode.externalApplication, - ); - }, - icon: const Icon(Icons.open_in_new), - ), - IconButton( - onPressed: () async { - await Share.share(await _getURL()); - }, - icon: const Icon(Icons.share), - ), + if (widget.url != null) ...[ + IconButton( + onPressed: () async { + await launchUrlString( + await _getURL(), + mode: LaunchMode.externalApplication, + ); + }, + icon: const Icon(Icons.open_in_new), + ), + IconButton( + onPressed: () async { + await Share.share(await _getURL()); + }, + icon: const Icon(Icons.share), + ), + ], ], ), body: widget.useWebView @@ -155,7 +160,7 @@ class _NewsArticlePageState extends State { javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (final controller) async { _webviewController = controller; - await controller.loadUrl(widget.bloc.url); + await controller.loadUrl(widget.url!); }, onPageStarted: (final _) { setState(() { diff --git a/packages/neon/lib/src/apps/news/widgets/articles_view.dart b/packages/neon/lib/src/apps/news/widgets/articles_view.dart index ffaa3317..6506185e 100644 --- a/packages/neon/lib/src/apps/news/widgets/articles_view.dart +++ b/packages/neon/lib/src/apps/news/widgets/articles_view.dart @@ -218,7 +218,7 @@ class _NewsArticlesViewState extends State { debugPrint(s.toString()); } - if (viewType == ArticleViewType.direct && bodyData != null) { + if ((viewType == ArticleViewType.direct || article.url == null) && bodyData != null) { await Navigator.of(context).push( MaterialPageRoute( builder: (final context) => NewsArticlePage( @@ -231,11 +231,13 @@ class _NewsArticlesViewState extends State { articlesBloc: widget.bloc, useWebView: false, bodyData: bodyData, + url: article.url, ), ), ); - } else if (Provider.of(context, listen: false).canUseWebView && - viewType == ArticleViewType.internalBrowser) { + } else if (viewType == ArticleViewType.internalBrowser && + article.url != null && + Provider.of(context, listen: false).canUseWebView) { await Navigator.of(context).push( MaterialPageRoute( builder: (final context) => NewsArticlePage( @@ -247,6 +249,7 @@ class _NewsArticlesViewState extends State { ), articlesBloc: widget.bloc, useWebView: true, + url: article.url, ), ), ); @@ -254,10 +257,12 @@ class _NewsArticlesViewState extends State { if (article.unread) { bloc.markArticleAsRead(article); } - await launchUrlString( - article.url, - mode: LaunchMode.externalApplication, - ); + if (article.url != null) { + await launchUrlString( + article.url!, + mode: LaunchMode.externalApplication, + ); + } } }, );