Browse Source

neon: Fix articles without URLs

pull/115/head
jld3103 2 years ago
parent
commit
90d4a58d6c
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 2
      packages/neon/lib/src/apps/news/blocs/article.dart
  2. 41
      packages/neon/lib/src/apps/news/pages/article.dart
  3. 19
      packages/neon/lib/src/apps/news/widgets/articles_view.dart

2
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<bool>();
final _starredSubject = BehaviorSubject<bool>();
final _errorsStreamController = StreamController<Exception>();

41
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<NewsArticlePage> createState() => _NewsArticlePageState();
@ -75,7 +78,7 @@ class _NewsArticlePageState extends State<NewsArticlePage> {
return (await _webviewController!.currentUrl())!;
}
return widget.bloc.url;
return widget.url!;
}
@override
@ -129,21 +132,23 @@ class _NewsArticlePageState extends State<NewsArticlePage> {
);
},
),
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<NewsArticlePage> {
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (final controller) async {
_webviewController = controller;
await controller.loadUrl(widget.bloc.url);
await controller.loadUrl(widget.url!);
},
onPageStarted: (final _) {
setState(() {

19
packages/neon/lib/src/apps/news/widgets/articles_view.dart

@ -218,7 +218,7 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
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<NewsArticlesView> {
articlesBloc: widget.bloc,
useWebView: false,
bodyData: bodyData,
url: article.url,
),
),
);
} else if (Provider.of<NeonPlatform>(context, listen: false).canUseWebView &&
viewType == ArticleViewType.internalBrowser) {
} else if (viewType == ArticleViewType.internalBrowser &&
article.url != null &&
Provider.of<NeonPlatform>(context, listen: false).canUseWebView) {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (final context) => NewsArticlePage(
@ -247,6 +249,7 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
),
articlesBloc: widget.bloc,
useWebView: true,
url: article.url,
),
),
);
@ -254,10 +257,12 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
if (article.unread) {
bloc.markArticleAsRead(article);
}
await launchUrlString(
article.url,
mode: LaunchMode.externalApplication,
);
if (article.url != null) {
await launchUrlString(
article.url!,
mode: LaunchMode.externalApplication,
);
}
}
},
);

Loading…
Cancel
Save