master
章文轩 3 years ago
parent e8667fb5c5
commit f6f69b21a5

@ -0,0 +1,14 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Applications/sdk/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/datang/flutter_gifimage/example"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "SYMROOT=${SOURCE_ROOT}/../build/ios"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=false"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.packages"

@ -7,28 +7,42 @@ packages:
name: async name: async
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.3.0" version: "2.6.1"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.5" version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
name: charcode name: charcode
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.2" version: "1.2.0"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.14.11" version: "1.15.0"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -36,6 +50,13 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.2" version: "0.1.2"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -59,35 +80,21 @@ packages:
name: matcher name: matcher
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.12.5" version: "0.12.10"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.7" version: "1.3.0"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.6.4" version: "1.8.0"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0+1"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.5"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -99,55 +106,55 @@ packages:
name: source_span name: source_span
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.5.5" version: "1.8.1"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.9.3" version: "1.10.0"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.5" version: "1.1.0"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.2.5" version: "0.3.0"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
name: typed_data name: typed_data
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.6" version: "1.3.0"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.8" version: "2.1.0"
sdks: sdks:
dart: ">=2.2.2 <3.0.0" dart: ">=2.12.0 <3.0.0"

@ -15,14 +15,14 @@ import 'package:flutter/widgets.dart';
/// cache gif fetched image /// cache gif fetched image
class GifCache{ class GifCache{
final Map<String,List<ImageInfo>> caches= Map(); final Map<String,List<ImageInfo>?> caches= Map();
void clear() { void clear() {
caches.clear(); caches.clear();
} }
bool evict(Object key) { bool evict(Object key) {
final List<ImageInfo> pendingImage = caches.remove(key); final List<ImageInfo>? pendingImage = caches.remove(key);
if(pendingImage!=null){ if(pendingImage!=null){
return true; return true;
} }
@ -34,11 +34,11 @@ class GifCache{
class GifController extends AnimationController{ class GifController extends AnimationController{
GifController({ GifController({
@required TickerProvider vsync, required TickerProvider vsync,
double value=0.0, double value=0.0,
Duration reverseDuration, Duration? reverseDuration,
Duration duration, Duration? duration,
AnimationBehavior animationBehavior AnimationBehavior? animationBehavior
}):super.unbounded( }):super.unbounded(
value:value, value:value,
reverseDuration:reverseDuration, reverseDuration:reverseDuration,
@ -57,8 +57,8 @@ class GifController extends AnimationController{
class GifImage extends StatefulWidget{ class GifImage extends StatefulWidget{
GifImage({ GifImage({
@required this.image, required this.image,
@required this.controller, required this.controller,
this.semanticLabel, this.semanticLabel,
this.excludeFromSemantics = false, this.excludeFromSemantics = false,
this.width, this.width,
@ -73,20 +73,20 @@ class GifImage extends StatefulWidget{
this.matchTextDirection = false, this.matchTextDirection = false,
this.gaplessPlayback = false, this.gaplessPlayback = false,
}); });
final VoidCallback onFetchCompleted; final VoidCallback? onFetchCompleted;
final GifController controller; final GifController controller;
final ImageProvider image; final ImageProvider image;
final double width; final double? width;
final double height; final double? height;
final Color color; final Color? color;
final BlendMode colorBlendMode; final BlendMode? colorBlendMode;
final BoxFit fit; final BoxFit? fit;
final AlignmentGeometry alignment; final AlignmentGeometry alignment;
final ImageRepeat repeat; final ImageRepeat repeat;
final Rect centerSlice; final Rect? centerSlice;
final bool matchTextDirection; final bool matchTextDirection;
final bool gaplessPlayback; final bool gaplessPlayback;
final String semanticLabel; final String? semanticLabel;
final bool excludeFromSemantics; final bool excludeFromSemantics;
@override @override
@ -98,12 +98,12 @@ class GifImage extends StatefulWidget{
} }
class GifImageState extends State<GifImage>{ class GifImageState extends State<GifImage>{
List<ImageInfo> _infos; List<ImageInfo>? _infos;
int _curIndex = 0; int _curIndex = 0;
bool _fetchComplete= false; bool _fetchComplete= false;
ImageInfo get _imageInfo { ImageInfo? get _imageInfo {
if(!_fetchComplete)return null; if(!_fetchComplete)return null;
return _infos==null?null:_infos[_curIndex]; return _infos==null?null:_infos![_curIndex];
} }
@ -131,7 +131,7 @@ class GifImageState extends State<GifImage>{
_fetchComplete=true; _fetchComplete=true;
_curIndex = widget.controller.value.toInt(); _curIndex = widget.controller.value.toInt();
if(widget.onFetchCompleted!=null){ if(widget.onFetchCompleted!=null){
widget.onFetchCompleted(); widget.onFetchCompleted!();
} }
}); });
}); });
@ -162,7 +162,7 @@ class GifImageState extends State<GifImage>{
_fetchComplete=true; _fetchComplete=true;
_curIndex = widget.controller.value.toInt(); _curIndex = widget.controller.value.toInt();
if(widget.onFetchCompleted!=null){ if(widget.onFetchCompleted!=null){
widget.onFetchCompleted(); widget.onFetchCompleted!();
} }
}); });
}); });
@ -203,16 +203,16 @@ HttpClient get _httpClient {
HttpClient client = _sharedHttpClient; HttpClient client = _sharedHttpClient;
assert(() { assert(() {
if (debugNetworkImageHttpClientProvider != null) if (debugNetworkImageHttpClientProvider != null)
client = debugNetworkImageHttpClientProvider(); client = debugNetworkImageHttpClientProvider!();
return true; return true;
}()); }());
return client; return client;
} }
Future<List<ImageInfo>> fetchGif(ImageProvider provider) async{ Future<List<ImageInfo>?> fetchGif(ImageProvider provider) async{
List<ImageInfo> infos = []; List<ImageInfo>? infos = [];
dynamic data; late dynamic data;
String key =provider is NetworkImage?provider.url:provider is AssetImage?provider.assetName:provider is MemoryImage?provider.bytes.toString():""; String key =provider is NetworkImage?provider.url:provider is AssetImage?provider.assetName:provider is MemoryImage?provider.bytes.toString():"";
if(GifImage.cache.caches.containsKey(key)){ if(GifImage.cache.caches.containsKey(key)){
infos = GifImage.cache.caches[key]; infos = GifImage.cache.caches[key];
@ -240,7 +240,7 @@ Future<List<ImageInfo>> fetchGif(ImageProvider provider) async{
data = provider.bytes; data = provider.bytes;
} }
ui.Codec codec=await PaintingBinding.instance.instantiateImageCodec(data.buffer.asUint8List()); ui.Codec codec=await PaintingBinding.instance!.instantiateImageCodec(data.buffer.asUint8List());
infos = []; infos = [];
for(int i = 0;i<codec.frameCount;i++){ for(int i = 0;i<codec.frameCount;i++){
FrameInfo frameInfo = await codec.getNextFrame(); FrameInfo frameInfo = await codec.getNextFrame();

@ -1,13 +1,20 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.14.11" version: "1.15.0"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -19,7 +26,7 @@ packages:
name: meta name: meta
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.7" version: "1.3.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -31,13 +38,13 @@ packages:
name: typed_data name: typed_data
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.6" version: "1.3.0"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.8" version: "2.1.0"
sdks: sdks:
dart: ">=2.2.2 <3.0.0" dart: ">=2.12.0-0 <3.0.0"

@ -5,7 +5,7 @@ author: Jpeng <peng8350@gmail.com>
homepage: https://github.com/peng8350/flutter_gifimage homepage: https://github.com/peng8350/flutter_gifimage
environment: environment:
sdk: ">=2.1.0 <3.0.0" sdk: '>=2.12.0 <3.0.0'
dependencies: dependencies:
flutter: flutter:

Loading…
Cancel
Save