home screen loadmore fix , fix anime extractor
This commit is contained in:
parent
3c2e5becf3
commit
47734532b3
12 changed files with 135 additions and 215 deletions
|
|
@ -113,22 +113,14 @@ class $VideoModel implements VideoModel, $Instance {
|
|||
String? get originalUrl => $value.originalUrl;
|
||||
|
||||
@override
|
||||
set url(String? url) {
|
||||
// implement apiUrl
|
||||
}
|
||||
set url(String? url) {}
|
||||
|
||||
@override
|
||||
set quality(String? quality) {
|
||||
// implement baseUrl
|
||||
}
|
||||
set quality(String? quality) {}
|
||||
|
||||
@override
|
||||
set headers(Map? headers) {
|
||||
// implement dateFormat
|
||||
}
|
||||
set headers(Map? headers) {}
|
||||
|
||||
@override
|
||||
set originalUrl(String? originalUrl) {
|
||||
// implement dateFormatLocale
|
||||
}
|
||||
set originalUrl(String? originalUrl) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1545,6 +1545,7 @@ class $MBridge extends MBridge with $Bridge {
|
|||
|
||||
static $String $xpath(Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.xpath(args[0]!.$value, args[1]!.$value, args[2]!.$value));
|
||||
|
||||
static $List $listParse(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $List.wrap(MBridge.listParse(
|
||||
args[0]!.$value,
|
||||
|
|
@ -1577,13 +1578,7 @@ class $MBridge extends MBridge with $Bridge {
|
|||
final value = MBridge.toVideos(
|
||||
args[0]!.$value, args[1]!.$value, args[2]!.$value, args[3]!.$value);
|
||||
|
||||
return $List.wrap(value
|
||||
.map((e) => $VideoModel.wrap(VideoModel()
|
||||
..headers = e.headers
|
||||
..originalUrl = e.originalUrl
|
||||
..quality = e.quality
|
||||
..url = e.url))
|
||||
.toList());
|
||||
return $List.wrap(value.map((e) => _toVideoModel(e)).toList());
|
||||
}
|
||||
|
||||
static $String $jsonPathToString(
|
||||
|
|
@ -1640,15 +1635,26 @@ class $MBridge extends MBridge with $Bridge {
|
|||
$String(MBridge.stringParse(
|
||||
args[0]!.$value,
|
||||
));
|
||||
|
||||
static $String $evalJs(Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.evalJs(
|
||||
args[0]!.$value,
|
||||
));
|
||||
static $Instance $stringParseValue(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.stringParseValue(
|
||||
args[0]!.$value.toString(),
|
||||
));
|
||||
|
||||
static $String $stringParseValue(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
final value = args[0]!.$value;
|
||||
String fVal = "";
|
||||
if (value is List) {
|
||||
fVal = value.toString();
|
||||
} else {
|
||||
fVal = value.toString();
|
||||
}
|
||||
return $String(MBridge.stringParseValue(
|
||||
fVal,
|
||||
));
|
||||
}
|
||||
|
||||
static $String $regExp(Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.regExp(
|
||||
args[0]!.$value,
|
||||
|
|
@ -1657,22 +1663,27 @@ class $MBridge extends MBridge with $Bridge {
|
|||
args[3]!.$value,
|
||||
args[4]!.$value,
|
||||
));
|
||||
|
||||
static $int $intParse(Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$int(MBridge.intParse(
|
||||
args[0]!.$value,
|
||||
));
|
||||
|
||||
static $bool $listContain(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$bool(MBridge.listContain(
|
||||
args[0]!.$value as List<$Value>, args[1]!.$value));
|
||||
|
||||
static $String $querySelector(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.querySelector(
|
||||
args[0]!.$value, args[1]!.$value, args[2]!.$value, args[3]!.$value));
|
||||
|
||||
static $String $parseChapterDate(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.parseChapterDate(
|
||||
args[0]!.$value, args[1]!.$value, args[2]!.$value));
|
||||
|
||||
static $String $querySelectorAll(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$String(MBridge.querySelectorAll(
|
||||
|
|
@ -1701,36 +1712,43 @@ class $MBridge extends MBridge with $Bridge {
|
|||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.doodExtractor(args[0]!.$value).then(
|
||||
(value) => $List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $streamTapeExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.streamTapeExtractor(args[0]!.$value).then(
|
||||
(value) => $List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $mp4UploadExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.mp4UploadExtractor(args[0]!.$value, args[1]!.$value,
|
||||
args[2]!.$value, args[3]!.$value)
|
||||
.then((value) =>
|
||||
$List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $sendVidExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.sendVidExtractor(
|
||||
args[0]!.$value, args[1]!.$value, args[2]!.$value)
|
||||
.then((value) =>
|
||||
$List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $yourUploadExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.yourUploadExtractor(args[0]!.$value, args[1]!.$value,
|
||||
args[2]!.$value, args[3]!.$value)
|
||||
.then((value) =>
|
||||
$List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $sibnetExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.sibnetExtractor(args[0]!.$value).then(
|
||||
(value) => $List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $myTvExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.myTvExtractor(args[0]!.$value).then(
|
||||
(value) => $List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $okruExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.okruExtractor(args[0]!.$value).then(
|
||||
|
|
@ -1740,16 +1758,19 @@ class $MBridge extends MBridge with $Bridge {
|
|||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.voeExtractor(args[0]!.$value, args[1]!.$value).then(
|
||||
(value) => $List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $vidBomExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.vidBomExtractor(args[0]!.$value).then(
|
||||
(value) => $List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $Future $streamlareExtractor(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.streamlareExtractor(
|
||||
args[0]!.$value, args[1]!.$value, args[2]!.$value)
|
||||
.then((value) =>
|
||||
$List.wrap(value.map((e) => _toVideoModel(e)).toList())));
|
||||
|
||||
static $bool $isEmptyOrIsNotEmpty(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $bool(MBridge.isEmptyOrIsNotEmpty(
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ class TypeMangaSelector {
|
|||
class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
||||
bool _isLoading = false;
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
int _fullDataLength = 20;
|
||||
int _fullDataLength = 50;
|
||||
int _page = 1;
|
||||
int _selectedIndex = 0;
|
||||
List<TypeMangaSelector> _types(BuildContext context) {
|
||||
|
|
@ -47,6 +47,41 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
];
|
||||
}
|
||||
|
||||
Future<List<MangaModel?>> _loadMore() async {
|
||||
List<MangaModel?> mangaResList = [];
|
||||
|
||||
if (_isLoading) {
|
||||
if (widget.source.isFullData!) {
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
_fullDataLength = _fullDataLength + 50;
|
||||
} else {
|
||||
if (_selectedIndex == 0 && !_isSearch && _query.isEmpty) {
|
||||
mangaResList = await ref.watch(getPopularMangaProvider(
|
||||
source: widget.source,
|
||||
page: _page + 1,
|
||||
).future);
|
||||
} else if (_selectedIndex == 1 && !_isSearch && _query.isEmpty) {
|
||||
mangaResList = await ref.watch(getLatestUpdatesMangaProvider(
|
||||
source: widget.source,
|
||||
page: _page + 1,
|
||||
).future);
|
||||
} else if (_selectedIndex == 2 && _isSearch && _query.isNotEmpty) {
|
||||
mangaResList = await ref.watch(searchMangaProvider(
|
||||
source: widget.source,
|
||||
query: _query,
|
||||
page: _page + 1,
|
||||
).future);
|
||||
}
|
||||
}
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_page = _page + 1;
|
||||
});
|
||||
}
|
||||
}
|
||||
return mangaResList;
|
||||
}
|
||||
|
||||
final _textEditingController = TextEditingController();
|
||||
String _query = "";
|
||||
bool _isSearch = false;
|
||||
|
|
@ -74,18 +109,16 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
_isSearch
|
||||
? SeachFormTextField(
|
||||
onFieldSubmitted: (submit) {
|
||||
if (submit.isNotEmpty) {
|
||||
setState(() {
|
||||
setState(() {
|
||||
if (submit.isNotEmpty) {
|
||||
_selectedIndex = 2;
|
||||
|
||||
_query = submit;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
} else {
|
||||
_selectedIndex = 0;
|
||||
});
|
||||
}
|
||||
_page = 1;
|
||||
}
|
||||
_page = 1;
|
||||
});
|
||||
},
|
||||
onChanged: (value) {},
|
||||
onSuffixPressed: () {
|
||||
|
|
@ -98,8 +131,8 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
_query = "";
|
||||
_selectedIndex = 0;
|
||||
_page = 1;
|
||||
_textEditingController.clear();
|
||||
});
|
||||
_textEditingController.clear();
|
||||
},
|
||||
controller: _textEditingController,
|
||||
)
|
||||
|
|
@ -184,94 +217,19 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(5))),
|
||||
onPressed: () {
|
||||
if (!_isSearch) {
|
||||
if (!_isLoading) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
}
|
||||
|
||||
if (widget.source.isFullData!) {
|
||||
Future.delayed(const Duration(seconds: 1))
|
||||
.then((value) {
|
||||
_fullDataLength = _fullDataLength + 20;
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_page = _page + 1;
|
||||
});
|
||||
}
|
||||
if (_selectedIndex == 0 &&
|
||||
!_isSearch &&
|
||||
_query.isEmpty) {
|
||||
ref
|
||||
.watch(getPopularMangaProvider(
|
||||
source: widget.source,
|
||||
page: _page,
|
||||
).future)
|
||||
.then(
|
||||
(value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (_selectedIndex == 1 &&
|
||||
!_isSearch &&
|
||||
_query.isEmpty) {
|
||||
ref
|
||||
.watch(
|
||||
getLatestUpdatesMangaProvider(
|
||||
source: widget.source,
|
||||
page: _page,
|
||||
).future)
|
||||
.then(
|
||||
(value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (_selectedIndex == 2 &&
|
||||
_isSearch &&
|
||||
_query.isNotEmpty) {
|
||||
ref
|
||||
.watch(searchMangaProvider(
|
||||
source: widget.source,
|
||||
query: _query,
|
||||
page: _page,
|
||||
).future)
|
||||
.then(
|
||||
(value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
}
|
||||
|
||||
_length = widget.source.isFullData!
|
||||
? _fullDataLength
|
||||
: data.length;
|
||||
_loadMore().then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
child: const Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
|
@ -290,93 +248,27 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
if (data.isEmpty) {
|
||||
return Center(child: Text(l10n.no_result));
|
||||
}
|
||||
if (!_isSearch) {
|
||||
_scrollController.addListener(() {
|
||||
if (_scrollController.position.pixels ==
|
||||
_scrollController.position.maxScrollExtent) {
|
||||
if (!_isLoading) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
}
|
||||
|
||||
if (widget.source.isFullData!) {
|
||||
Future.delayed(const Duration(seconds: 1)).then((value) {
|
||||
_fullDataLength = _fullDataLength + 10;
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_page = _page + 1;
|
||||
});
|
||||
}
|
||||
if (_selectedIndex == 0 && !_isSearch && _query.isEmpty) {
|
||||
ref
|
||||
.watch(getPopularMangaProvider(
|
||||
source: widget.source,
|
||||
page: _page,
|
||||
).future)
|
||||
.then(
|
||||
(value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (_selectedIndex == 1 &&
|
||||
!_isSearch &&
|
||||
_query.isEmpty) {
|
||||
ref
|
||||
.watch(getLatestUpdatesMangaProvider(
|
||||
source: widget.source,
|
||||
page: _page,
|
||||
).future)
|
||||
.then(
|
||||
(value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (_selectedIndex == 2 &&
|
||||
_isSearch &&
|
||||
_query.isNotEmpty) {
|
||||
ref
|
||||
.watch(searchMangaProvider(
|
||||
source: widget.source,
|
||||
query: _query,
|
||||
page: _page,
|
||||
).future)
|
||||
.then(
|
||||
(value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
_scrollController.addListener(() {
|
||||
if (_scrollController.position.pixels ==
|
||||
_scrollController.position.maxScrollExtent) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
_loadMore().then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
data.addAll(value);
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
_length = widget.source.isFullData! ? _fullDataLength : data.length;
|
||||
_length = (data.length < _length ? data.length : _length);
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
child: Column(
|
||||
|
|
@ -384,9 +276,9 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
Flexible(
|
||||
child: GridViewWidget(
|
||||
controller: _scrollController,
|
||||
itemCount: data.length < _length ? data.length : _length,
|
||||
itemCount: _length + 1,
|
||||
itemBuilder: (context, index) {
|
||||
if (index == _length - 1 && _isLoading) {
|
||||
if (index == _length) {
|
||||
return buildProgressIndicator();
|
||||
}
|
||||
return MangaHomeImageCard(
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:math';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/utils/extensions.dart';
|
||||
|
||||
class DoodExtractor {
|
||||
Future<List<Video>> videosFromUrl(
|
||||
|
|
@ -17,7 +18,7 @@ class DoodExtractor {
|
|||
final doodHost = RegExp('https://(.*?)/').firstMatch(newUrl)!.group(1)!;
|
||||
final content = response.body;
|
||||
if (!content.contains("'/pass_md5/")) return [];
|
||||
final md5 = content.split("'/pass_md5/").last.split("',").first;
|
||||
final md5 = content.substringAfter("'/pass_md5/").substringBefore("',");
|
||||
final token = md5.substring(md5.lastIndexOf('/') + 1);
|
||||
final randomString = getRandomString();
|
||||
final expiry = DateTime.now().millisecondsSinceEpoch;
|
||||
|
|
@ -32,7 +33,7 @@ class DoodExtractor {
|
|||
return [
|
||||
Video(newUrl, newQuality, videoUrl, headers: doodHeaders(doodHost))
|
||||
];
|
||||
} catch (e) {
|
||||
} catch (_) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ class StreamTapeExtractor {
|
|||
.toList();
|
||||
if (scri.isEmpty) {
|
||||
return [];
|
||||
} else {}
|
||||
}
|
||||
script = scri.first.split("$targetLine.innerHTML = '").last;
|
||||
final videoUrl =
|
||||
"https:${script.substringBefore("'")}${script.substringAfter("+ ('xcd").substringBefore("'")}";
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ class VoeExtractor {
|
|||
script.first!.substringAfter("video_height': ").substringBefore(",");
|
||||
final qualityStr = quality ?? "VoeCDN(${resolution}p)";
|
||||
|
||||
return [Video(url, qualityStr, videoUrl)];
|
||||
return [Video(videoUrl, qualityStr, videoUrl)];
|
||||
} catch (_) {
|
||||
return [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:mangayomi/models/source.dart';
|
|||
import 'package:mangayomi/eval/bridge_class/manga_model.dart';
|
||||
import 'package:mangayomi/eval/bridge_class/model.dart';
|
||||
import 'package:mangayomi/eval/runtime/runtime.dart';
|
||||
import 'package:mangayomi/utils/constant.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'get_latest_updates_manga.g.dart';
|
||||
|
||||
|
|
@ -40,7 +41,7 @@ Future<List<MangaModel?>> getLatestUpdatesManga(
|
|||
MangaModel newMangaa = MangaModel(
|
||||
name: value.names![i],
|
||||
link: value.urls![i],
|
||||
imageUrl: value.images![i],
|
||||
imageUrl: value.images!.isEmpty ? emptyImg : value.images![i],
|
||||
baseUrl: value.baseUrl,
|
||||
apiUrl: value.apiUrl,
|
||||
lang: value.lang,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:mangayomi/models/source.dart';
|
|||
import 'package:mangayomi/eval/bridge_class/manga_model.dart';
|
||||
import 'package:mangayomi/eval/bridge_class/model.dart';
|
||||
import 'package:mangayomi/eval/runtime/runtime.dart';
|
||||
import 'package:mangayomi/utils/constant.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'get_popular_manga.g.dart';
|
||||
|
||||
|
|
@ -40,7 +41,7 @@ Future<List<MangaModel?>> getPopularManga(
|
|||
MangaModel newMangaa = MangaModel(
|
||||
name: value.names![i],
|
||||
link: value.urls![i],
|
||||
imageUrl: value.images![i],
|
||||
imageUrl: value.images!.isEmpty ? emptyImg : value.images![i],
|
||||
baseUrl: value.baseUrl,
|
||||
apiUrl: value.apiUrl,
|
||||
lang: value.lang,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import 'package:mangayomi/models/source.dart';
|
|||
import 'package:mangayomi/eval/bridge_class/manga_model.dart';
|
||||
import 'package:mangayomi/eval/bridge_class/model.dart';
|
||||
import 'package:mangayomi/eval/runtime/runtime.dart';
|
||||
import 'package:mangayomi/utils/constant.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'search_manga.g.dart';
|
||||
|
||||
|
|
@ -41,7 +42,7 @@ Future<List<MangaModel?>> searchManga(
|
|||
MangaModel newMangaa = MangaModel(
|
||||
name: value.names![i],
|
||||
link: value.urls![i],
|
||||
imageUrl: value.images![i],
|
||||
imageUrl: value.images!.isEmpty ? emptyImg : value.images![i],
|
||||
baseUrl: value.baseUrl,
|
||||
apiUrl: value.apiUrl,
|
||||
lang: value.lang,
|
||||
|
|
|
|||
|
|
@ -61,3 +61,6 @@ TrackStatus toStatus(TrackStatus status, bool isManga, int syncId) {
|
|||
_ => ("assets/tracker_anilist.webp", "Anilist"),
|
||||
};
|
||||
}
|
||||
|
||||
const emptyImg =
|
||||
"https://upload.wikimedia.org/wikipedia/commons/1/12/White_background.png";
|
||||
|
|
|
|||
|
|
@ -797,6 +797,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
loadmore:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: loadmore
|
||||
sha256: "4a9d60cf1182f9a91449502b4ab2bad53aaf292124382c7e29e36a61468b027f"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
logging:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ dependencies:
|
|||
flutter_meedu_videoplayer: ^4.2.20
|
||||
media_kit_libs_android_video: ^1.0.6
|
||||
media_kit_libs_ios_video: ^1.0.4
|
||||
# dio: ^5.3.0
|
||||
loadmore: ^2.1.0
|
||||
|
||||
|
||||
cupertino_icons: ^1.0.2
|
||||
|
|
|
|||
Loading…
Reference in a new issue