Extract plaform constants

This commit is contained in:
Ming Ming 2021-04-29 23:42:44 +08:00
parent 45e3140ea9
commit 13772ee742
7 changed files with 28 additions and 17 deletions

View file

@ -6,12 +6,13 @@ import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/exception.dart';
import 'package:nc_photos/mobile/android/media_store.dart';
import 'package:nc_photos/platform/downloader.dart' as itf;
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:path/path.dart' as path;
class Downloader extends itf.Downloader {
@override
downloadFile(Account account, File file) {
if (Platform.isAndroid) {
if (platform_k.isAndroid) {
return _downloadFileAndroid(account, file);
} else {
throw UnimplementedError();

View file

@ -1,5 +1,3 @@
import 'dart:io';
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:flutter/foundation.dart';
final isSupportMapView = kIsWeb || Platform.isAndroid;
final isSupportMapView = platform_k.isWeb || platform_k.isAndroid;

7
lib/platform/k.dart Normal file
View file

@ -0,0 +1,7 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
const isWeb = kIsWeb;
// Platform n/a on web, need checking kIsWeb first
final isAndroid = !kIsWeb && Platform.isAndroid;

View file

@ -8,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:nc_photos/session_storage.dart';
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/theme.dart';
@ -37,7 +38,7 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
BuildContext context, {
@required Widget child,
}) {
if (kIsWeb) {
if (platform_k.isWeb) {
// support switching pages with keyboard on web
return RawKeyboardListener(
onKey: (ev) {
@ -108,7 +109,7 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
return _SelectableItemWidget(
isSelected: _selectedItems.contains(item),
onTap: () => _onItemTap(item, index),
onLongPress: isSelectionMode && kIsWeb
onLongPress: isSelectionMode && platform_k.isWeb
? null
: () => _onItemLongPress(item, index),
child: item.buildWidget(context),
@ -159,7 +160,7 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
return;
}
final wasSelectionMode = isSelectionMode;
if (!kIsWeb && wasSelectionMode && _lastSelectPosition != null) {
if (!platform_k.isWeb && wasSelectionMode && _lastSelectPosition != null) {
setState(() {
_selectedItems.addAll(_items
.sublist(math.min(_lastSelectPosition, index),
@ -178,7 +179,7 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
if (!wasSelectionMode) {
if (!SessionStorage().hasShowRangeSelectNotification) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(kIsWeb
content: Text(platform_k.isWeb
? AppLocalizations.of(context).webSelectRangeNotification
: AppLocalizations.of(context).mobileSelectRangeNotification),
duration: k.snackBarDurationNormal,

View file

@ -5,6 +5,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/list_extension.dart';
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:nc_photos/pref.dart';
import 'package:nc_photos/string_extension.dart';
import 'package:nc_photos/theme.dart';
@ -62,7 +63,7 @@ class _SignInState extends State<SignIn> {
child: _buildForm(context),
),
),
if (!kIsWeb) Expanded(child: Container()),
if (!platform_k.isWeb) Expanded(child: Container()),
Container(
constraints: const BoxConstraints(
maxWidth: AppTheme.widthLimitedContentMaxWidth),

View file

@ -18,6 +18,7 @@ import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/mobile/platform.dart'
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/theme.dart';
import 'package:nc_photos/use_case/remove.dart';
@ -78,14 +79,15 @@ class _ViewerState extends State<Viewer> with TickerProviderStateMixin {
return AppTheme(
child: Scaffold(
body: Builder(
builder: (context) =>
kIsWeb ? _buildWebContent(context) : _buildContent(context)),
builder: (context) => platform_k.isWeb
? _buildWebContent(context)
: _buildContent(context)),
),
);
}
Widget _buildWebContent(BuildContext context) {
assert(kIsWeb);
assert(platform_k.isWeb);
// support switching pages with keyboard on web
return RawKeyboardListener(
onKey: (ev) {
@ -147,11 +149,11 @@ class _ViewerState extends State<Viewer> with TickerProviderStateMixin {
controller: _pageController,
itemCount: widget.streamFiles.length,
itemBuilder: _buildPage,
physics: !kIsWeb && _canSwitchPage()
physics: !platform_k.isWeb && _canSwitchPage()
? null
: const NeverScrollableScrollPhysics(),
),
if (kIsWeb) ..._buildNavigationButtons(context),
if (platform_k.isWeb) ..._buildNavigationButtons(context),
_buildBottomAppBar(context),
_buildAppBar(context),
],
@ -793,7 +795,7 @@ class _ViewerState extends State<Viewer> with TickerProviderStateMixin {
/// Update the navigation state for [page]
void _updateNavigationState(int page) {
// currently useless to run on non-web platform
if (!kIsWeb) {
if (!platform_k.isWeb) {
return;
}
final hasNext = page < widget.streamFiles.length - 1;

View file

@ -19,6 +19,7 @@ import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/mobile/platform.dart'
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
import 'package:nc_photos/platform/features.dart' as features;
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/theme.dart';
import 'package:nc_photos/use_case/remove.dart';
@ -242,7 +243,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
}
void _onMapTap() {
if (Platform.isAndroid) {
if (platform_k.isAndroid) {
final intent = AndroidIntent(
action: "action_view",
data: Uri.encodeFull("geo:${_gps.item1},${_gps.item2}?z=16"),