mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-07-02 04:47:01 +08:00
MarkdownView: Use CachedNetworkImage
This is the simplest way I could find of showing a placeholder and loading screen while the image was downloading. I'm not sure if I want to cache the images locally. Also, this adds lots of dependencies, which I'm not too comfortable with.
This commit is contained in:
@ -1,3 +1,6 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||||
@ -67,7 +70,8 @@ class NoteViewer extends StatelessWidget {
|
|||||||
launch(link);
|
launch(link);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
imageDirectory: note.parent.folderPath + p.separator,
|
imageBuilder: (url) => kDefaultImageBuilder(
|
||||||
|
url, note.parent.folderPath + p.separator, null, null),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// _buildFooter(context),
|
// _buildFooter(context),
|
||||||
@ -120,3 +124,60 @@ class NoteTitleHeader extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Copied from flutter_markdown
|
||||||
|
// But it uses CachedNetworkImage
|
||||||
|
//
|
||||||
|
typedef Widget ImageBuilder(
|
||||||
|
Uri uri, String imageDirectory, double width, double height);
|
||||||
|
|
||||||
|
final ImageBuilder kDefaultImageBuilder = (
|
||||||
|
Uri uri,
|
||||||
|
String imageDirectory,
|
||||||
|
double width,
|
||||||
|
double height,
|
||||||
|
) {
|
||||||
|
if (uri.scheme == 'http' || uri.scheme == 'https') {
|
||||||
|
return CachedNetworkImage(
|
||||||
|
imageUrl: uri.toString(),
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
placeholder: (context, url) => const CircularProgressIndicator(),
|
||||||
|
errorWidget: (context, url, error) => const Icon(Icons.error),
|
||||||
|
);
|
||||||
|
} else if (uri.scheme == 'data') {
|
||||||
|
return _handleDataSchemeUri(uri, width, height);
|
||||||
|
} else if (uri.scheme == "resource") {
|
||||||
|
return Image.asset(uri.path, width: width, height: height);
|
||||||
|
} else {
|
||||||
|
Uri fileUri = imageDirectory != null
|
||||||
|
? Uri.parse(imageDirectory + uri.toString())
|
||||||
|
: uri;
|
||||||
|
if (fileUri.scheme == 'http' || fileUri.scheme == 'https') {
|
||||||
|
return CachedNetworkImage(
|
||||||
|
imageUrl: fileUri.toString(),
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
placeholder: (context, url) => const CircularProgressIndicator(),
|
||||||
|
errorWidget: (context, url, error) => const Icon(Icons.error),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Image.file(File.fromUri(fileUri), width: width, height: height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Widget _handleDataSchemeUri(Uri uri, final double width, final double height) {
|
||||||
|
final String mimeType = uri.data.mimeType;
|
||||||
|
if (mimeType.startsWith('image/')) {
|
||||||
|
return Image.memory(
|
||||||
|
uri.data.contentAsBytes(),
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
);
|
||||||
|
} else if (mimeType.startsWith('text/')) {
|
||||||
|
return Text(uri.data.contentAsString());
|
||||||
|
}
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
63
pubspec.lock
63
pubspec.lock
@ -78,6 +78,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.6"
|
version: "1.0.6"
|
||||||
|
cached_network_image:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: cached_network_image
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0+1"
|
||||||
charcode:
|
charcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -85,6 +92,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.2"
|
version: "1.1.2"
|
||||||
|
clock:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: clock
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -197,6 +211,13 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_cache_manager:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_cache_manager
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.2"
|
||||||
flutter_crashlytics:
|
flutter_crashlytics:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -490,6 +511,27 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.4"
|
version: "1.6.4"
|
||||||
|
path_provider:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.6.5"
|
||||||
|
path_provider_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_macos
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.0.4"
|
||||||
|
path_provider_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
pedantic:
|
pedantic:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -574,6 +616,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.6"
|
version: "2.1.6"
|
||||||
|
rxdart:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: rxdart
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.24.0"
|
||||||
screenshots:
|
screenshots:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -677,6 +726,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.5"
|
version: "1.5.5"
|
||||||
|
sqflite:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.0"
|
||||||
|
sqflite_common:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite_common
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0+1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -45,6 +45,7 @@ dependencies:
|
|||||||
sentry: ">=3.0.0 <4.0.0"
|
sentry: ">=3.0.0 <4.0.0"
|
||||||
equatable: ^1.1.0
|
equatable: ^1.1.0
|
||||||
purchases_flutter: ^1.1.0
|
purchases_flutter: ^1.1.0
|
||||||
|
cached_network_image: ^2.1.0+1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_launcher_icons: "^0.7.2"
|
flutter_launcher_icons: "^0.7.2"
|
||||||
|
Reference in New Issue
Block a user