V2 Release

This commit is contained in:
Ujwal223
2026-05-25 22:12:38 +05:45
parent 2d33dcb889
commit 842dc70829
38 changed files with 642 additions and 334 deletions
+6 -6
View File
@@ -92,16 +92,16 @@ class _SkeletonScreenState extends State<SkeletonScreen>
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
SizedBox(
height: 80,
padding: const EdgeInsets.symmetric(vertical: 8),
child: ListView.builder(
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.symmetric(horizontal: 12),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
itemCount: 6,
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.only(right: 12),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 56,
@@ -111,13 +111,13 @@ class _SkeletonScreenState extends State<SkeletonScreen>
borderRadius: BorderRadius.circular(28),
),
),
const SizedBox(height: 4),
const SizedBox(height: 2),
Container(
width: 32,
height: 8,
height: 6,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(4),
borderRadius: BorderRadius.circular(3),
),
),
],
+7 -13
View File
@@ -35,12 +35,11 @@ class NativeBottomNav extends StatelessWidget {
final theme = Theme.of(context);
final isDark = theme.brightness == Brightness.dark;
final bgColor =
theme.colorScheme.surface.withValues(alpha: isDark ? 0.95 : 0.98);
final iconColorInactive =
isDark ? Colors.white70 : Colors.black54;
final iconColorActive =
theme.colorScheme.primary;
final bgColor = theme.colorScheme.surface.withValues(
alpha: isDark ? 0.95 : 0.98,
);
final iconColorInactive = isDark ? Colors.white70 : Colors.black54;
final iconColorActive = theme.colorScheme.primary;
final tabs = <_NavItem>[
_NavItem(
@@ -103,8 +102,7 @@ class NativeBottomNav extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: tabs.map((item) {
final color =
item.active ? iconColorActive : iconColorInactive;
final color = item.active ? iconColorActive : iconColorInactive;
final opacity = item.enabled ? 1.0 : 0.35;
return Expanded(
@@ -129,10 +127,7 @@ class NativeBottomNav extends StatelessWidget {
const SizedBox(height: 2),
Text(
item.label,
style: TextStyle(
fontSize: 10,
color: color,
),
style: TextStyle(fontSize: 10, color: color),
),
],
),
@@ -164,4 +159,3 @@ class _NavItem {
required this.enabled,
});
}
@@ -14,12 +14,10 @@ class InstagramPreloader {
static Future<void> start(String userAgent) async {
if (_headlessWebView != null) return; // don't start twice
_headlessWebView = HeadlessInAppWebView(
keepAlive: keepAlive,
initialUrlRequest: URLRequest(
url: WebUri('https://www.instagram.com/'),
),
initialUrlRequest: URLRequest(url: WebUri('https://www.instagram.com/')),
initialSettings: InAppWebViewSettings(
userAgent: userAgent,
mediaPlaybackRequiresUserGesture: true,
@@ -69,4 +67,3 @@ class InstagramPreloader {
isReady = false;
}
}
@@ -18,12 +18,12 @@ class ReelsHistoryEntry {
});
Map<String, dynamic> toJson() => {
'id': id,
'url': url,
'title': title,
'thumbnailUrl': thumbnailUrl,
'visitedAt': visitedAt.toUtc().toIso8601String(),
};
'id': id,
'url': url,
'title': title,
'thumbnailUrl': thumbnailUrl,
'visitedAt': visitedAt.toUtc().toIso8601String(),
};
static ReelsHistoryEntry fromJson(Map<String, dynamic> json) {
return ReelsHistoryEntry(
@@ -31,7 +31,8 @@ class ReelsHistoryEntry {
url: (json['url'] as String?) ?? '',
title: (json['title'] as String?) ?? 'Instagram Reel',
thumbnailUrl: (json['thumbnailUrl'] as String?) ?? '',
visitedAt: DateTime.tryParse((json['visitedAt'] as String?) ?? '') ??
visitedAt:
DateTime.tryParse((json['visitedAt'] as String?) ?? '') ??
DateTime.now().toUtc(),
);
}
@@ -114,4 +115,3 @@ class ReelsHistoryService {
await prefs.setString(_prefsKey, jsonEncode(jsonList));
}
}
@@ -32,10 +32,7 @@ class _UpdateBannerState extends State<UpdateBanner> {
decoration: BoxDecoration(
color: colorScheme.secondaryContainer,
border: Border(
bottom: BorderSide(
color: colorScheme.outlineVariant,
width: 0.5,
),
bottom: BorderSide(color: colorScheme.outlineVariant, width: 0.5),
),
),
child: Column(
@@ -121,10 +118,11 @@ class _UpdateBannerState extends State<UpdateBanner> {
text = text.replaceAll(RegExp(r'#{1,6}\s'), '');
text = text.replaceAll(RegExp(r'\*\*(.*?)\*\*'), r'\1');
text = text.replaceAll(RegExp(r'\*(.*?)\*'), r'\1');
text =
text.replaceAll(RegExp(r'\[([^\]]+)\]\([^)]+\)'), r'\1'); // links -> text
text = text.replaceAll(
RegExp(r'\[([^\]]+)\]\([^)]+\)'),
r'\1',
); // links -> text
text = text.replaceAll(RegExp(r'`([^`]+)`'), r'\1');
return text.trim();
}
}
@@ -56,8 +56,9 @@ class UpdateCheckerService extends ChangeNotifier {
return;
}
final cleanVersion =
gitVersionTag.startsWith('v') ? gitVersionTag.substring(1) : gitVersionTag;
final cleanVersion = gitVersionTag.startsWith('v')
? gitVersionTag.substring(1)
: gitVersionTag;
var trimmed = body.trim();
if (trimmed.length > 1500) {