Compare commits

...

2 Commits

Author SHA1 Message Date
7d11398e6d fix comment tile. (#215) 2023-05-19 12:37:21 -07:00
a4f52284ef bump flutter version. (#214) 2023-05-18 17:00:47 -07:00
55 changed files with 537 additions and 651 deletions

View File

@ -1,4 +1,4 @@
include: package:very_good_analysis/analysis_options.3.1.0.yaml include: package:very_good_analysis/analysis_options.5.0.0.yaml
linter: linter:
rules: rules:
parameter_assignments: false parameter_assignments: false

View File

@ -1,108 +0,0 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:in_app_review/in_app_review.dart';
import 'package:in_app_review_platform_interface/in_app_review_platform_interface.dart';
import 'package:mockito/mockito.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final inAppReview = InAppReview.instance;
late MockInAppReviewPlatform platform;
setUp(() {
platform = MockInAppReviewPlatform();
InAppReviewPlatform.instance = platform;
});
tearDown(() {
verifyNoMoreInteractions(platform);
});
group('isAvailable', () {
test(
'should call InAppReviewPlatform.isAvailable()',
() async {
// ARRANGE
when(platform.isAvailable()).thenAnswer((_) async => true);
// ACT
final result = await inAppReview.isAvailable();
// ASSERT
verify(platform.isAvailable());
expect(result, isTrue);
},
);
});
group('requestReview', () {
test(
'should call InAppReviewPlatform.requestReview()',
() async {
// ARRANGE
when(platform.requestReview()).thenAnswer((_) async {});
// ACT
await inAppReview.requestReview();
// ASSERT
verify(platform.requestReview());
},
);
});
group('openStoreListing', () {
test(
'should call InAppReviewPlatform.openStoreListing()',
() async {
// ARRANGE
const appStoreId = 'app_store_id';
const microsoftStoreId = 'microsoft_store_id';
when(platform.openStoreListing(
appStoreId: appStoreId,
microsoftStoreId: microsoftStoreId,
)).thenAnswer((_) async {});
// ACT
await inAppReview.openStoreListing(
appStoreId: appStoreId,
microsoftStoreId: microsoftStoreId,
);
// ASSERT
verify(platform.openStoreListing(
appStoreId: appStoreId,
microsoftStoreId: microsoftStoreId,
));
},
);
});
}
class MockInAppReviewPlatform extends Mock
with MockPlatformInterfaceMixin
implements InAppReviewPlatform {
@override
Future<bool> isAvailable() => super.noSuchMethod(
Invocation.method(#isAvailable, null),
returnValue: Future.value(true),
);
@override
Future<void> requestReview() => super.noSuchMethod(
Invocation.method(#requestReview, null),
returnValue: Future<void>.value(),
);
@override
Future<void> openStoreListing({
String? appStoreId,
String? microsoftStoreId,
}) =>
super.noSuchMethod(
Invocation.method(
#openStoreListing,
null,
{#appStoreId: appStoreId, #microsoftStoreId: microsoftStoreId},
),
returnValue: Future<void>.value(),
);
}

View File

@ -19,21 +19,6 @@ void main() {
log.clear(); log.clear();
}); });
channel.setMockMethodCallHandler((MethodCall call) async {
log.add(call);
switch (call.method) {
case 'isAvailable':
return true;
case 'requestReview':
case 'openStoreListing':
return null;
default:
assert(false);
return null;
}
});
group('isAvailable', () { group('isAvailable', () {
test( test(
'should invoke the isAvailable method channel', 'should invoke the isAvailable method channel',

View File

@ -41,7 +41,7 @@ PODS:
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- sqflite (0.0.2): - sqflite (0.0.3):
- Flutter - Flutter
- FMDB (>= 2.7.5) - FMDB (>= 2.7.5)
- synced_shared_preferences (0.0.1): - synced_shared_preferences (0.0.1):
@ -67,10 +67,10 @@ DEPENDENCIES:
- in_app_review (from `.symlinks/plugins/in_app_review/ios`) - in_app_review (from `.symlinks/plugins/in_app_review/ios`)
- integration_test (from `.symlinks/plugins/integration_test/ios`) - integration_test (from `.symlinks/plugins/integration_test/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`)
- synced_shared_preferences (from `.symlinks/plugins/synced_shared_preferences/ios`) - synced_shared_preferences (from `.symlinks/plugins/synced_shared_preferences/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
@ -108,13 +108,13 @@ EXTERNAL SOURCES:
package_info_plus: package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios" :path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation: path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/ios" :path: ".symlinks/plugins/path_provider_foundation/darwin"
receive_sharing_intent: receive_sharing_intent:
:path: ".symlinks/plugins/receive_sharing_intent/ios" :path: ".symlinks/plugins/receive_sharing_intent/ios"
share_plus: share_plus:
:path: ".symlinks/plugins/share_plus/ios" :path: ".symlinks/plugins/share_plus/ios"
shared_preferences_foundation: shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/ios" :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite: sqflite:
:path: ".symlinks/plugins/sqflite/ios" :path: ".symlinks/plugins/sqflite/ios"
synced_shared_preferences: synced_shared_preferences:
@ -129,8 +129,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/workmanager/ios" :path: ".symlinks/plugins/workmanager/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed device_info_plus: 7545d84d8d1b896cb16a4ff98c19f07ec4b298ea
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_email_sender: 02d7443217d8c41483223627972bfdc09f74276b flutter_email_sender: 02d7443217d8c41483223627972bfdc09f74276b
flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721 flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721
@ -139,19 +139,19 @@ SPEC CHECKSUMS:
flutter_siri_suggestions: 226fb7ef33d25d3fe0d4aa2a8bcf4b72730c466f flutter_siri_suggestions: 226fb7ef33d25d3fe0d4aa2a8bcf4b72730c466f
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d
integration_test: a1e7d09bd98eca2fc37aefd79d4f41ad37bdbbe5 integration_test: 13825b8a9334a850581300559b8839134b124670
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7
path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028
shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
synced_shared_preferences: f722742b06d65c7315b8e9f56b794c9fbd5597f7 synced_shared_preferences: f722742b06d65c7315b8e9f56b794c9fbd5597f7
url_launcher_ios: fb12c43172927bb5cf75aeebd073f883801f1993 url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6 workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6
PODFILE CHECKSUM: d28e9a1c7bee335d05ddd795703aad5bf05bb937 PODFILE CHECKSUM: d28e9a1c7bee335d05ddd795703aad5bf05bb937

View File

@ -10,6 +10,7 @@
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
7A6CD5D595D5F4E8710804C0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BF0A917F40A838BF30D8F4C /* Pods_Runner.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@ -22,7 +23,6 @@
E530B1B0283B54DA004E8EB6 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E530B1AE283B54DA004E8EB6 /* MainInterface.storyboard */; }; E530B1B0283B54DA004E8EB6 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E530B1AE283B54DA004E8EB6 /* MainInterface.storyboard */; };
E530B1B4283B54DA004E8EB6 /* Action Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E530B1A6283B54DA004E8EB6 /* Action Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; E530B1B4283B54DA004E8EB6 /* Action Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E530B1A6283B54DA004E8EB6 /* Action Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
E575B6F127EBC6DB002B1508 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E575B6F027EBC6DA002B1508 /* CloudKit.framework */; }; E575B6F127EBC6DB002B1508 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E575B6F027EBC6DA002B1508 /* CloudKit.framework */; };
FC507E94AA7767C155787DB3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFB5AA41D6C22D228077D166 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -68,14 +68,14 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
027B292CC58CF92F11FC0A69 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; 0E63A5CE3FDBCCD054072136 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
4449F5D4D39C23F292D07005 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
8BF0A917F40A838BF30D8F4C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -83,8 +83,8 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
BFB5AA41D6C22D228077D166 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B9EC882BDD04A309C317E416 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
DF5D5FFF325B7D5DFEE88A3F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; D73EA9FA5E6F35364DCA0CD1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
E51D52AD283B464E00FC8DD8 /* Share Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Share Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; E51D52AD283B464E00FC8DD8 /* Share Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Share Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
E51D52AF283B464E00FC8DD8 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; }; E51D52AF283B464E00FC8DD8 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
E51D52B2283B464E00FC8DD8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; }; E51D52B2283B464E00FC8DD8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
@ -107,7 +107,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
E575B6F127EBC6DB002B1508 /* CloudKit.framework in Frameworks */, E575B6F127EBC6DB002B1508 /* CloudKit.framework in Frameworks */,
FC507E94AA7767C155787DB3 /* Pods_Runner.framework in Frameworks */, 7A6CD5D595D5F4E8710804C0 /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -183,8 +183,8 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
E575B6F027EBC6DA002B1508 /* CloudKit.framework */, E575B6F027EBC6DA002B1508 /* CloudKit.framework */,
BFB5AA41D6C22D228077D166 /* Pods_Runner.framework */,
E530B1A7283B54DA004E8EB6 /* UniformTypeIdentifiers.framework */, E530B1A7283B54DA004E8EB6 /* UniformTypeIdentifiers.framework */,
8BF0A917F40A838BF30D8F4C /* Pods_Runner.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@ -192,9 +192,9 @@
D79CD63C88FF49EF451AFDDF /* Pods */ = { D79CD63C88FF49EF451AFDDF /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
DF5D5FFF325B7D5DFEE88A3F /* Pods-Runner.debug.xcconfig */, 0E63A5CE3FDBCCD054072136 /* Pods-Runner.debug.xcconfig */,
4449F5D4D39C23F292D07005 /* Pods-Runner.release.xcconfig */, D73EA9FA5E6F35364DCA0CD1 /* Pods-Runner.release.xcconfig */,
027B292CC58CF92F11FC0A69 /* Pods-Runner.profile.xcconfig */, B9EC882BDD04A309C317E416 /* Pods-Runner.profile.xcconfig */,
); );
path = Pods; path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
@ -229,15 +229,15 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
41DC8215F9CFD708C36ECBA8 /* [CP] Check Pods Manifest.lock */, E2E6E097A94005D9196D0A71 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */, 9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */, 97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */, 97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */, 9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
7714A105B2069B720D0DF18E /* [CP] Embed Pods Frameworks */,
E51D52B8283B464E00FC8DD8 /* Embed App Extensions */, E51D52B8283B464E00FC8DD8 /* Embed App Extensions */,
F1959755D5521D58CA193498 /* [CP] Embed Pods Frameworks */,
); );
buildRules = ( buildRules = (
); );
@ -365,6 +365,7 @@
files = ( files = (
); );
inputPaths = ( inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
); );
name = "Thin Binary"; name = "Thin Binary";
outputPaths = ( outputPaths = (
@ -373,7 +374,22 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
}; };
41DC8215F9CFD708C36ECBA8 /* [CP] Check Pods Manifest.lock */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
E2E6E097A94005D9196D0A71 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -395,7 +411,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
7714A105B2069B720D0DF18E /* [CP] Embed Pods Frameworks */ = { F1959755D5521D58CA193498 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -412,21 +428,6 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */
@ -565,11 +566,9 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = QMWX3X2NF7;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = QMWX3X2NF7;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Hacki; INFOPLIST_KEY_CFBundleDisplayName = Hacki;
@ -583,7 +582,6 @@
PRODUCT_BUNDLE_IDENTIFIER = com.jiaqi.hacki; PRODUCT_BUNDLE_IDENTIFIER = com.jiaqi.hacki;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development com.jiaqi.hacki";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
@ -707,11 +705,9 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = QMWX3X2NF7;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = QMWX3X2NF7;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Hacki; INFOPLIST_KEY_CFBundleDisplayName = Hacki;
@ -725,7 +721,6 @@
PRODUCT_BUNDLE_IDENTIFIER = com.jiaqi.hacki; PRODUCT_BUNDLE_IDENTIFIER = com.jiaqi.hacki;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development com.jiaqi.hacki";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -780,11 +775,9 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements"; CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = QMWX3X2NF7;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = QMWX3X2NF7;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Share Extension/Info.plist"; INFOPLIST_FILE = "Share Extension/Info.plist";
@ -802,7 +795,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Share-Extension"; PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Share-Extension";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "hacki share extension profile";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
@ -863,11 +855,9 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements"; CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = QMWX3X2NF7;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = QMWX3X2NF7;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Share Extension/Info.plist"; INFOPLIST_FILE = "Share Extension/Info.plist";
@ -884,7 +874,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Share-Extension"; PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Share-Extension";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "hacki share extension profile";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -905,11 +894,9 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Action Extension/Action Extension.entitlements"; CODE_SIGN_ENTITLEMENTS = "Action Extension/Action Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = QMWX3X2NF7;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = QMWX3X2NF7;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Action Extension/Info.plist"; INFOPLIST_FILE = "Action Extension/Info.plist";
@ -927,7 +914,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Action-Extension"; PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Action-Extension";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "hacki action extension profile";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
@ -992,11 +978,9 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "Action Extension/Action Extension.entitlements"; CODE_SIGN_ENTITLEMENTS = "Action Extension/Action Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = QMWX3X2NF7;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = QMWX3X2NF7;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Action Extension/Info.plist"; INFOPLIST_FILE = "Action Extension/Info.plist";
@ -1013,7 +997,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Action-Extension"; PRODUCT_BUNDLE_IDENTIFIER = "com.jiaqi.hacki.Action-Extension";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "hacki action extension profile";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;

View File

@ -24,15 +24,15 @@ class CommentsCubit extends Cubit<CommentsState> {
CommentsCubit({ CommentsCubit({
required FilterCubit filterCubit, required FilterCubit filterCubit,
required CollapseCache collapseCache, required CollapseCache collapseCache,
required bool isOfflineReading,
required Item item,
required FetchMode defaultFetchMode,
required CommentsOrder defaultCommentsOrder,
CommentCache? commentCache, CommentCache? commentCache,
OfflineRepository? offlineRepository, OfflineRepository? offlineRepository,
StoriesRepository? storiesRepository, StoriesRepository? storiesRepository,
SembastRepository? sembastRepository, SembastRepository? sembastRepository,
Logger? logger, Logger? logger,
required bool isOfflineReading,
required Item item,
required FetchMode defaultFetchMode,
required CommentsOrder defaultCommentsOrder,
}) : _filterCubit = filterCubit, }) : _filterCubit = filterCubit,
_collapseCache = collapseCache, _collapseCache = collapseCache,
_commentCache = commentCache ?? locator.get<CommentCache>(), _commentCache = commentCache ?? locator.get<CommentCache>(),
@ -131,13 +131,11 @@ class CommentsCubit extends Cubit<CommentsState> {
ids: kids, ids: kids,
getFromCache: useCommentCache ? _commentCache.getComment : null, getFromCache: useCommentCache ? _commentCache.getComment : null,
); );
break;
case FetchMode.eager: case FetchMode.eager:
commentStream = _storiesRepository.fetchAllCommentsRecursivelyStream( commentStream = _storiesRepository.fetchAllCommentsRecursivelyStream(
ids: kids, ids: kids,
getFromCache: useCommentCache ? _commentCache.getComment : null, getFromCache: useCommentCache ? _commentCache.getComment : null,
); );
break;
} }
} }
@ -268,7 +266,6 @@ class CommentsCubit extends Cubit<CommentsState> {
}); });
_streamSubscriptions[comment.id] = streamSubscription; _streamSubscriptions[comment.id] = streamSubscription;
break;
case FetchMode.eager: case FetchMode.eager:
if (_streamSubscription != null) { if (_streamSubscription != null) {
emit(state.copyWith(status: CommentsStatus.loading)); emit(state.copyWith(status: CommentsStatus.loading));
@ -276,7 +273,6 @@ class CommentsCubit extends Cubit<CommentsState> {
?..resume() ?..resume()
..onData(onCommentFetched); ..onData(onCommentFetched);
} }
break;
} }
} }

View File

@ -67,10 +67,8 @@ class PreferenceCubit extends Cubit<PreferenceState> {
switch (T) { switch (T) {
case int: case int:
_preferenceRepository.setInt(preference.key, value as int); _preferenceRepository.setInt(preference.key, value as int);
break;
case bool: case bool:
_preferenceRepository.setBool(preference.key, value as bool); _preferenceRepository.setBool(preference.key, value as bool);
break;
default: default:
throw UnimplementedError(); throw UnimplementedError();
} }

View File

@ -75,16 +75,12 @@ extension StateExtension on State {
break; break;
case MenuAction.fav: case MenuAction.fav:
onFavTapped(item); onFavTapped(item);
break;
case MenuAction.share: case MenuAction.share:
onShareTapped(item, rect); onShareTapped(item, rect);
break;
case MenuAction.flag: case MenuAction.flag:
onFlagTapped(item); onFlagTapped(item);
break;
case MenuAction.block: case MenuAction.block:
onBlockTapped(item, isBlocked: isBlocked); onBlockTapped(item, isBlocked: isBlocked);
break;
case MenuAction.cancel: case MenuAction.cancel:
break; break;
} }

View File

@ -7,7 +7,6 @@ import 'package:equatable/equatable.dart';
import 'package:feature_discovery/feature_discovery.dart'; import 'package:feature_discovery/feature_discovery.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
@ -155,10 +154,10 @@ Future<void> main({bool testing = false}) async {
class HackiApp extends StatelessWidget { class HackiApp extends StatelessWidget {
const HackiApp({ const HackiApp({
super.key,
this.savedThemeMode,
required this.trueDarkMode, required this.trueDarkMode,
required this.font, required this.font,
super.key,
this.savedThemeMode,
}); });
final AdaptiveThemeMode? savedThemeMode; final AdaptiveThemeMode? savedThemeMode;
@ -281,8 +280,9 @@ class HackiApp extends StatelessWidget {
final bool useTrueDark = prefState.trueDarkEnabled && final bool useTrueDark = prefState.trueDarkEnabled &&
(mode == AdaptiveThemeMode.dark || (mode == AdaptiveThemeMode.dark ||
(mode == AdaptiveThemeMode.system && (mode == AdaptiveThemeMode.system &&
SchedulerBinding View.of(context)
.instance.window.platformBrightness == .platformDispatcher
.platformBrightness ==
Brightness.dark)); Brightness.dark));
return FeatureDiscovery( return FeatureDiscovery(
child: MaterialApp( child: MaterialApp(

View File

@ -35,6 +35,27 @@ class BuildableComment extends Comment with Buildable {
hidden: comment.hidden, hidden: comment.hidden,
); );
@override
BuildableComment copyWith({
int? level,
bool? hidden,
}) {
return BuildableComment(
id: id,
time: time,
parent: parent,
score: score,
by: by,
text: text,
kids: kids,
dead: dead,
deleted: deleted,
hidden: hidden ?? this.hidden,
level: level ?? this.level,
elements: elements,
);
}
@override @override
final List<LinkifyElement> elements; final List<LinkifyElement> elements;
} }

View File

@ -2,7 +2,6 @@ import 'package:flutter/foundation.dart';
import 'package:hacki/models/models.dart'; import 'package:hacki/models/models.dart';
import 'package:hacki/services/services.dart'; import 'package:hacki/services/services.dart';
import 'package:hacki/utils/utils.dart'; import 'package:hacki/utils/utils.dart';
import 'package:tuple/tuple.dart';
/// [StoriesRepository] is for fetching /// [StoriesRepository] is for fetching
/// [Item] such as [Story], [PollOption], [Comment] or [User]. /// [Item] such as [Story], [PollOption], [Comment] or [User].
@ -187,7 +186,7 @@ class StoriesRepository {
/// Fetch the parent [Story] of a [Comment] as well as /// Fetch the parent [Story] of a [Comment] as well as
/// the list of [Comment] traversed in order to reach the parent. /// the list of [Comment] traversed in order to reach the parent.
Future<Tuple2<Story, List<Comment>>?> fetchParentStoryWithComments({ Future<(Story, List<Comment>)?> fetchParentStoryWithComments({
required int id, required int id,
}) async { }) async {
Item? item; Item? item;
@ -206,7 +205,7 @@ class StoriesRepository {
parentComments[i].copyWith(level: parentComments.length - i - 1); parentComments[i].copyWith(level: parentComments.length - i - 1);
} }
return Tuple2<Story, List<Comment>>( return (
item as Story, item as Story,
parentComments.reversed.toList(), parentComments.reversed.toList(),
); );

View File

@ -6,8 +6,8 @@ import 'package:hacki/styles/styles.dart';
class MobileHomeScreen extends StatelessWidget { class MobileHomeScreen extends StatelessWidget {
const MobileHomeScreen({ const MobileHomeScreen({
super.key,
required this.homeScreen, required this.homeScreen,
super.key,
}); });
final Widget homeScreen; final Widget homeScreen;

View File

@ -10,9 +10,9 @@ import 'package:hacki/utils/utils.dart';
class PinnedStories extends StatelessWidget { class PinnedStories extends StatelessWidget {
const PinnedStories({ const PinnedStories({
super.key,
required this.preferenceState, required this.preferenceState,
required this.onStoryTapped, required this.onStoryTapped,
super.key,
}); });
final PreferenceState preferenceState; final PreferenceState preferenceState;

View File

@ -8,8 +8,8 @@ import 'package:responsive_builder/responsive_builder.dart';
class TabletHomeScreen extends StatelessWidget { class TabletHomeScreen extends StatelessWidget {
const TabletHomeScreen({ const TabletHomeScreen({
super.key,
required this.homeScreen, required this.homeScreen,
super.key,
}); });
final Widget homeScreen; final Widget homeScreen;

View File

@ -45,10 +45,10 @@ class ItemScreenArgs extends Equatable {
class ItemScreen extends StatefulWidget { class ItemScreen extends StatefulWidget {
const ItemScreen({ const ItemScreen({
super.key,
this.splitViewEnabled = false,
required this.item, required this.item,
required this.parentComments, required this.parentComments,
super.key,
this.splitViewEnabled = false,
}); });
static const String routeName = '/item'; static const String routeName = '/item';

View File

@ -7,11 +7,11 @@ import 'package:hacki/utils/utils.dart';
class CustomAppBar extends AppBar { class CustomAppBar extends AppBar {
CustomAppBar({ CustomAppBar({
super.key,
required Item item, required Item item,
required Color super.backgroundColor, required super.backgroundColor,
required VoidCallback onFontSizeTap, required VoidCallback onFontSizeTap,
required GlobalKey fontSizeIconButtonKey, required GlobalKey fontSizeIconButtonKey,
super.key,
bool splitViewEnabled = false, bool splitViewEnabled = false,
VoidCallback? onZoomTap, VoidCallback? onZoomTap,
bool? expanded, bool? expanded,

View File

@ -10,9 +10,9 @@ import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
class CustomFloatingActionButton extends StatelessWidget { class CustomFloatingActionButton extends StatelessWidget {
const CustomFloatingActionButton({ const CustomFloatingActionButton({
super.key,
required this.itemScrollController, required this.itemScrollController,
required this.itemPositionsListener, required this.itemPositionsListener,
super.key,
}); });
final ItemScrollController itemScrollController; final ItemScrollController itemScrollController;

View File

@ -8,8 +8,8 @@ import 'package:hacki/utils/utils.dart';
class FavIconButton extends StatelessWidget { class FavIconButton extends StatelessWidget {
const FavIconButton({ const FavIconButton({
super.key,
required this.storyId, required this.storyId,
super.key,
}); });
final int storyId; final int storyId;

View File

@ -6,8 +6,8 @@ import 'package:hacki/utils/utils.dart';
class LinkIconButton extends StatelessWidget { class LinkIconButton extends StatelessWidget {
const LinkIconButton({ const LinkIconButton({
super.key,
required this.storyId, required this.storyId,
super.key,
}); });
final int storyId; final int storyId;

View File

@ -17,7 +17,6 @@ import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
class MainView extends StatelessWidget { class MainView extends StatelessWidget {
const MainView({ const MainView({
super.key,
required this.itemScrollController, required this.itemScrollController,
required this.itemPositionsListener, required this.itemPositionsListener,
required this.commentEditingController, required this.commentEditingController,
@ -27,6 +26,7 @@ class MainView extends StatelessWidget {
required this.onMoreTapped, required this.onMoreTapped,
required this.onRightMoreTapped, required this.onRightMoreTapped,
required this.onReplyTapped, required this.onReplyTapped,
super.key,
}); });
final ItemScrollController itemScrollController; final ItemScrollController itemScrollController;
@ -210,161 +210,165 @@ class _ParentItemSection extends StatelessWidget {
padding: EdgeInsets.only(bottom: Dimens.pt6), padding: EdgeInsets.only(bottom: Dimens.pt6),
child: OfflineBanner(), child: OfflineBanner(),
), ),
Slidable( DeviceGestureWrapper(
startActionPane: ActionPane( child: Slidable(
motion: const BehindMotion(), startActionPane: ActionPane(
children: <Widget>[ motion: const BehindMotion(),
SlidableAction( children: <Widget>[
onPressed: (_) { SlidableAction(
HapticFeedbackUtil.light(); onPressed: (_) {
HapticFeedbackUtil.light();
if (state.item.id != if (state.item.id !=
context.read<EditCubit>().state.replyingTo?.id) { context.read<EditCubit>().state.replyingTo?.id) {
commentEditingController.clear(); commentEditingController.clear();
} }
context.read<EditCubit>().onReplyTapped(state.item); context.read<EditCubit>().onReplyTapped(state.item);
onReplyTapped(); onReplyTapped();
}, },
backgroundColor: Palette.orange, backgroundColor: Palette.orange,
foregroundColor: Palette.white, foregroundColor: Palette.white,
icon: Icons.message, icon: Icons.message,
),
SlidableAction(
onPressed: (BuildContext context) =>
onMoreTapped(state.item, context.rect),
backgroundColor: Palette.orange,
foregroundColor: Palette.white,
icon: Icons.more_horiz,
),
],
),
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(
left: Dimens.pt6,
right: Dimens.pt6,
), ),
child: Row( SlidableAction(
children: <Widget>[ onPressed: (BuildContext context) =>
Text( onMoreTapped(state.item, context.rect),
state.item.by, backgroundColor: Palette.orange,
style: const TextStyle( foregroundColor: Palette.white,
color: Palette.orange, icon: Icons.more_horiz,
),
),
const Spacer(),
Text(
state.item.timeAgo,
style: const TextStyle(
color: Palette.grey,
),
),
],
), ),
), ],
BlocBuilder<PreferenceCubit, PreferenceState>( ),
buildWhen: ( child: Column(
PreferenceState previous, children: <Widget>[
PreferenceState current, Padding(
) => padding: const EdgeInsets.only(
previous.fontSize != current.fontSize, left: Dimens.pt6,
builder: ( right: Dimens.pt6,
BuildContext context, ),
PreferenceState prefState, child: Row(
) {
return Column(
children: <Widget>[ children: <Widget>[
if (state.item is Story) Text(
InkWell( state.item.by,
onTap: () => LinkUtil.launch( style: const TextStyle(
state.item.url, color: Palette.orange,
useReader: context ),
.read<PreferenceCubit>() ),
.state const Spacer(),
.readerEnabled, Text(
offlineReading: context state.item.timeAgo,
.read<StoriesBloc>() style: const TextStyle(
.state color: Palette.grey,
.isOfflineReading, ),
), ),
child: Padding( ],
padding: const EdgeInsets.only( ),
left: Dimens.pt6, ),
right: Dimens.pt6, BlocBuilder<PreferenceCubit, PreferenceState>(
bottom: Dimens.pt12, buildWhen: (
top: Dimens.pt12, PreferenceState previous,
PreferenceState current,
) =>
previous.fontSize != current.fontSize,
builder: (
BuildContext context,
PreferenceState prefState,
) {
return Column(
children: <Widget>[
if (state.item is Story)
InkWell(
onTap: () => LinkUtil.launch(
state.item.url,
useReader: context
.read<PreferenceCubit>()
.state
.readerEnabled,
offlineReading: context
.read<StoriesBloc>()
.state
.isOfflineReading,
), ),
child: Text.rich( child: Padding(
TextSpan( padding: const EdgeInsets.only(
style: TextStyle( left: Dimens.pt6,
fontWeight: FontWeight.bold, right: Dimens.pt6,
fontSize: prefState.fontSize.fontSize, bottom: Dimens.pt12,
color: Theme.of(context) top: Dimens.pt12,
.textTheme ),
.bodyLarge child: Text.rich(
?.color, TextSpan(
), style: TextStyle(
children: <TextSpan>[ fontWeight: FontWeight.bold,
TextSpan( fontSize: prefState.fontSize.fontSize,
semanticsLabel: state.item.title, color: Theme.of(context)
text: state.item.title, .textTheme
style: TextStyle( .bodyLarge
fontWeight: FontWeight.bold, ?.color,
fontSize: prefState.fontSize.fontSize,
color: state.item.url.isNotEmpty
? Palette.orange
: null,
),
), ),
if (state.item.url.isNotEmpty) children: <TextSpan>[
TextSpan( TextSpan(
text: semanticsLabel: state.item.title,
''' (${(state.item as Story).readableUrl})''', text: state.item.title,
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: fontSize: prefState.fontSize.fontSize,
prefState.fontSize.fontSize - 4, color: state.item.url.isNotEmpty
color: Palette.orange, ? Palette.orange
: null,
), ),
), ),
], if (state.item.url.isNotEmpty)
TextSpan(
text:
''' (${(state.item as Story).readableUrl})''',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize:
prefState.fontSize.fontSize - 4,
color: Palette.orange,
),
),
],
),
textAlign: TextAlign.center,
textScaleFactor: MediaQuery.of(
context,
).textScaleFactor,
),
),
)
else
const SizedBox(
height: Dimens.pt6,
),
if (state.item.text.isNotEmpty)
FadeIn(
child: SizedBox(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: Dimens.pt10,
),
child: ItemText(
item: state.item,
),
), ),
textAlign: TextAlign.center,
textScaleFactor: MediaQuery.of(
context,
).textScaleFactor,
), ),
), ),
) ],
else );
const SizedBox( },
height: Dimens.pt6,
),
if (state.item.text.isNotEmpty)
SizedBox(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: Dimens.pt10,
),
child: ItemText(
item: state.item,
),
),
),
],
);
},
),
if (state.item.isPoll)
BlocProvider<PollCubit>(
create: (BuildContext context) =>
PollCubit(story: state.item as Story)..init(),
child: const PollView(),
), ),
], if (state.item.isPoll)
BlocProvider<PollCubit>(
create: (BuildContext context) =>
PollCubit(story: state.item as Story)..init(),
child: const PollView(),
),
],
),
), ),
), ),
if (state.item.text.isNotEmpty) if (state.item.text.isNotEmpty)

View File

@ -15,10 +15,10 @@ import 'package:hacki/utils/utils.dart';
class MorePopupMenu extends StatelessWidget { class MorePopupMenu extends StatelessWidget {
const MorePopupMenu({ const MorePopupMenu({
super.key,
required this.item, required this.item,
required this.isBlocked, required this.isBlocked,
required this.onLoginTapped, required this.onLoginTapped,
super.key,
}); });
final Item item; final Item item;
@ -101,10 +101,10 @@ class MorePopupMenu extends StatelessWidget {
'About ${state.user.id}', 'About ${state.user.id}',
), ),
content: state.user.about.isEmpty content: state.user.about.isEmpty
? Row( ? const Row(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment.center,
children: const <Widget>[ children: <Widget>[
Text( Text(
'empty', 'empty',
style: TextStyle( style: TextStyle(

View File

@ -11,8 +11,8 @@ import 'package:hacki/utils/utils.dart';
class PinIconButton extends StatelessWidget { class PinIconButton extends StatelessWidget {
const PinIconButton({ const PinIconButton({
super.key,
required this.story, required this.story,
super.key,
}); });
final Story story; final Story story;

View File

@ -12,12 +12,12 @@ import 'package:hacki/utils/utils.dart';
class ReplyBox extends StatefulWidget { class ReplyBox extends StatefulWidget {
const ReplyBox({ const ReplyBox({
super.key,
this.splitViewEnabled = false,
required this.textEditingController, required this.textEditingController,
required this.onSendTapped, required this.onSendTapped,
required this.onCloseTapped, required this.onCloseTapped,
required this.onChanged, required this.onChanged,
super.key,
this.splitViewEnabled = false,
}); });
final bool splitViewEnabled; final bool splitViewEnabled;
@ -93,7 +93,7 @@ class _ReplyBoxState extends State<ReplyBox> {
child: Text( child: Text(
replyingTo == null replyingTo == null
? 'Editing' ? 'Editing'
: 'Replying ' : 'Replying to '
'${replyingTo.by}', '${replyingTo.by}',
style: const TextStyle(color: Palette.grey), style: const TextStyle(color: Palette.grey),
maxLines: 1, maxLines: 1,

View File

@ -8,11 +8,11 @@ import 'package:responsive_builder/responsive_builder.dart';
class TimeMachineDialog extends StatelessWidget { class TimeMachineDialog extends StatelessWidget {
const TimeMachineDialog({ const TimeMachineDialog({
super.key,
required this.comment, required this.comment,
required this.size, required this.size,
required this.deviceType, required this.deviceType,
required this.widthFactor, required this.widthFactor,
super.key,
}); });
final Comment comment; final Comment comment;

View File

@ -15,7 +15,6 @@ import 'package:hacki/screens/widgets/widgets.dart';
import 'package:hacki/styles/styles.dart'; import 'package:hacki/styles/styles.dart';
import 'package:hacki/utils/utils.dart'; import 'package:hacki/utils/utils.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:tuple/tuple.dart';
class ProfileScreen extends StatefulWidget { class ProfileScreen extends StatefulWidget {
const ProfileScreen({super.key}); const ProfileScreen({super.key});
@ -353,16 +352,18 @@ class _ProfileScreenState extends State<ProfileScreen>
locator locator
.get<StoriesRepository>() .get<StoriesRepository>()
.fetchParentStoryWithComments(id: comment.parent) .fetchParentStoryWithComments(id: comment.parent)
.then((Tuple2<Story, List<Comment>>? tuple) { .then(((Story, List<Comment>)? res) {
if (tuple != null && mounted) { if (res != null && mounted) {
final Story parent = res.$1;
final List<Comment> children = res.$2;
goToItemScreen( goToItemScreen(
args: ItemScreenArgs( args: ItemScreenArgs(
item: tuple.item1, item: parent,
targetComments: tuple.item2.isEmpty targetComments: children.isEmpty
? <Comment>[comment] ? <Comment>[comment]
: <Comment>[ : <Comment>[
...tuple.item2, ...children,
comment.copyWith(level: tuple.item2.length) comment.copyWith(level: children.length)
], ],
onlyShowTargetComment: true, onlyShowTargetComment: true,
), ),

View File

@ -3,8 +3,8 @@ import 'package:hacki/styles/styles.dart';
class CenteredMessageView extends StatelessWidget { class CenteredMessageView extends StatelessWidget {
const CenteredMessageView({ const CenteredMessageView({
super.key,
required this.content, required this.content,
super.key,
}); });
final String content; final String content;

View File

@ -8,7 +8,6 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
class InboxView extends StatelessWidget { class InboxView extends StatelessWidget {
const InboxView({ const InboxView({
super.key,
required this.refreshController, required this.refreshController,
required this.comments, required this.comments,
required this.unreadCommentsIds, required this.unreadCommentsIds,
@ -16,6 +15,7 @@ class InboxView extends StatelessWidget {
required this.onMarkAllAsReadTapped, required this.onMarkAllAsReadTapped,
required this.onLoadMore, required this.onLoadMore,
required this.onRefresh, required this.onRefresh,
super.key,
}); });
final RefreshController refreshController; final RefreshController refreshController;

View File

@ -27,10 +27,10 @@ import 'package:share_plus/share_plus.dart';
class Settings extends StatefulWidget { class Settings extends StatefulWidget {
const Settings({ const Settings({
super.key,
required this.authState, required this.authState,
required this.magicWord, required this.magicWord,
required this.pageType, required this.pageType,
super.key,
}); });
final AuthState authState; final AuthState authState;
@ -74,13 +74,13 @@ class _SettingsState extends State<Settings> {
const SizedBox( const SizedBox(
height: Dimens.pt8, height: Dimens.pt8,
), ),
Flex( const Flex(
direction: Axis.horizontal, direction: Axis.horizontal,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Flexible( Flexible(
child: Row( child: Row(
children: const <Widget>[ children: <Widget>[
SizedBox( SizedBox(
width: Dimens.pt16, width: Dimens.pt16,
), ),
@ -91,7 +91,7 @@ class _SettingsState extends State<Settings> {
), ),
Flexible( Flexible(
child: Row( child: Row(
children: const <Widget>[ children: <Widget>[
Text('Default comments order'), Text('Default comments order'),
Spacer(), Spacer(),
], ],
@ -338,8 +338,8 @@ class _SettingsState extends State<Settings> {
style: TextStyle(fontFamily: font.name), style: TextStyle(fontFamily: font.name),
), ),
), ),
Row( const Row(
children: const <Widget>[ children: <Widget>[
Text( Text(
'*Restart required', '*Restart required',
style: TextStyle( style: TextStyle(
@ -397,14 +397,11 @@ class _SettingsState extends State<Settings> {
switch (val) { switch (val) {
case AdaptiveThemeMode.light: case AdaptiveThemeMode.light:
AdaptiveTheme.of(context).setLight(); AdaptiveTheme.of(context).setLight();
break;
case AdaptiveThemeMode.dark: case AdaptiveThemeMode.dark:
AdaptiveTheme.of(context).setDark(); AdaptiveTheme.of(context).setDark();
break;
case AdaptiveThemeMode.system: case AdaptiveThemeMode.system:
case null: case null:
AdaptiveTheme.of(context).setSystem(); AdaptiveTheme.of(context).setSystem();
break;
} }
final Brightness brightness = Theme.of(context).brightness; final Brightness brightness = Theme.of(context).brightness;
@ -485,8 +482,8 @@ class _SettingsState extends State<Settings> {
onPressed: () => LinkUtil.launch( onPressed: () => LinkUtil.launch(
Constants.portfolioLink, Constants.portfolioLink,
), ),
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
FontAwesomeIcons.addressCard, FontAwesomeIcons.addressCard,
), ),
@ -501,8 +498,8 @@ class _SettingsState extends State<Settings> {
onPressed: () => LinkUtil.launch( onPressed: () => LinkUtil.launch(
Constants.privacyPolicyLink, Constants.privacyPolicyLink,
), ),
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
Icons.privacy_tip_outlined, Icons.privacy_tip_outlined,
), ),
@ -515,8 +512,8 @@ class _SettingsState extends State<Settings> {
), ),
ElevatedButton( ElevatedButton(
onPressed: onReportIssueTapped, onPressed: onReportIssueTapped,
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
Icons.bug_report_outlined, Icons.bug_report_outlined,
), ),
@ -531,8 +528,8 @@ class _SettingsState extends State<Settings> {
onPressed: () => LinkUtil.launch( onPressed: () => LinkUtil.launch(
Constants.githubLink, Constants.githubLink,
), ),
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
FontAwesomeIcons.github, FontAwesomeIcons.github,
), ),
@ -549,8 +546,8 @@ class _SettingsState extends State<Settings> {
? Constants.appStoreLink ? Constants.appStoreLink
: Constants.googlePlayLink, : Constants.googlePlayLink,
), ),
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
Icons.thumb_up, Icons.thumb_up,
), ),
@ -565,8 +562,8 @@ class _SettingsState extends State<Settings> {
onPressed: () => LinkUtil.launch( onPressed: () => LinkUtil.launch(
Constants.sponsorLink, Constants.sponsorLink,
), ),
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
FeatherIcons.coffee, FeatherIcons.coffee,
), ),
@ -590,8 +587,8 @@ class _SettingsState extends State<Settings> {
actions: <Widget>[ actions: <Widget>[
ElevatedButton( ElevatedButton(
onPressed: onSendEmailTapped, onPressed: onSendEmailTapped,
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
Icons.email, Icons.email,
), ),
@ -604,8 +601,8 @@ class _SettingsState extends State<Settings> {
), ),
ElevatedButton( ElevatedButton(
onPressed: () => onGithubTapped(context.rect), onPressed: () => onGithubTapped(context.rect),
child: Row( child: const Row(
children: const <Widget>[ children: <Widget>[
Icon( Icon(
Icons.bug_report_outlined, Icons.bug_report_outlined,
), ),

View File

@ -20,8 +20,8 @@ class _TabBarSettingsState extends State<TabBarSettings> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
children: <Widget>[ children: <Widget>[
Row( const Row(
children: const <Widget>[ children: <Widget>[
SizedBox( SizedBox(
width: Dimens.pt16, width: Dimens.pt16,
), ),

View File

@ -17,9 +17,9 @@ enum CustomDateTimeRange {
class CustomRangeFilterChip extends StatelessWidget { class CustomRangeFilterChip extends StatelessWidget {
const CustomRangeFilterChip({ const CustomRangeFilterChip({
super.key,
required this.range, required this.range,
required this.onTap, required this.onTap,
super.key,
}); });
final CustomDateTimeRange range; final CustomDateTimeRange range;

View File

@ -5,10 +5,10 @@ import 'package:intl/intl.dart';
class DateTimeRangeFilterChip extends StatelessWidget { class DateTimeRangeFilterChip extends StatelessWidget {
const DateTimeRangeFilterChip({ const DateTimeRangeFilterChip({
super.key,
required this.filter, required this.filter,
required this.onDateTimeRangeUpdated, required this.onDateTimeRangeUpdated,
required this.onDateTimeRangeRemoved, required this.onDateTimeRangeRemoved,
super.key,
}); });
final DateTimeRangeFilter? filter; final DateTimeRangeFilter? filter;

View File

@ -5,9 +5,9 @@ import 'package:hacki/styles/styles.dart';
class PostedByFilterChip extends StatelessWidget { class PostedByFilterChip extends StatelessWidget {
const PostedByFilterChip({ const PostedByFilterChip({
super.key,
required this.filter, required this.filter,
required this.onChanged, required this.onChanged,
super.key,
}); });
final PostedByFilter? filter; final PostedByFilter? filter;

View File

@ -6,8 +6,8 @@ import 'package:webview_flutter/webview_flutter.dart';
class WebViewScreen extends StatefulWidget { class WebViewScreen extends StatefulWidget {
const WebViewScreen({ const WebViewScreen({
super.key,
required this.url, required this.url,
super.key,
}); });
final String url; final String url;

View File

@ -17,8 +17,8 @@ class BlocBuilder3<
BlocC extends StateStreamable<BlocCState>, BlocC extends StateStreamable<BlocCState>,
BlocCState> extends StatelessWidget { BlocCState> extends StatelessWidget {
const BlocBuilder3({ const BlocBuilder3({
super.key,
required this.builder, required this.builder,
super.key,
this.blocA, this.blocA,
this.blocB, this.blocB,
this.blocC, this.blocC,

View File

@ -3,8 +3,8 @@ import 'package:hacki/styles/styles.dart';
class CenteredText extends StatelessWidget { class CenteredText extends StatelessWidget {
const CenteredText({ const CenteredText({
super.key,
required this.text, required this.text,
super.key,
this.color = Palette.grey, this.color = Palette.grey,
}); });

View File

@ -12,9 +12,9 @@ import 'package:hacki/utils/utils.dart';
class CommentTile extends StatelessWidget { class CommentTile extends StatelessWidget {
const CommentTile({ const CommentTile({
super.key,
required this.comment, required this.comment,
required this.fetchMode, required this.fetchMode,
super.key,
this.onReplyTapped, this.onReplyTapped,
this.onMoreTapped, this.onMoreTapped,
this.onEditTapped, this.onEditTapped,
@ -63,8 +63,7 @@ class CommentTile extends StatelessWidget {
const Color orange = Color.fromRGBO(255, 152, 0, 1); const Color orange = Color.fromRGBO(255, 152, 0, 1);
final Color color = _getColor(level); final Color color = _getColor(level);
final Padding child = Padding( final Widget child = DeviceGestureWrapper(
padding: EdgeInsets.zero,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[

View File

@ -125,14 +125,14 @@ class _CountDownReminderState extends State<CountdownReminder>
}, },
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Padding( const Padding(
padding: const EdgeInsets.only( padding: EdgeInsets.only(
left: Dimens.pt12, left: Dimens.pt12,
top: Dimens.pt10, top: Dimens.pt10,
right: Dimens.pt10, right: Dimens.pt10,
), ),
child: Row( child: Row(
children: const <Widget>[ children: <Widget>[
Text( Text(
'Pick up where you left off', 'Pick up where you left off',
style: TextStyle( style: TextStyle(

View File

@ -3,10 +3,10 @@ import 'package:hacki/styles/styles.dart';
class CustomChip extends StatelessWidget { class CustomChip extends StatelessWidget {
CustomChip({ CustomChip({
Key? key,
required this.selected, required this.selected,
required this.label, required this.label,
required this.onSelected, required this.onSelected,
Key? key,
}) : super(key: key ?? Key(label)); }) : super(key: key ?? Key(label));
final bool selected; final bool selected;

View File

@ -6,12 +6,12 @@ import 'package:hacki/utils/utils.dart';
class CustomDescribedFeatureOverlay extends StatelessWidget { class CustomDescribedFeatureOverlay extends StatelessWidget {
const CustomDescribedFeatureOverlay({ const CustomDescribedFeatureOverlay({
super.key,
required this.featureId, required this.featureId,
required this.child, required this.child,
required this.tapTarget, required this.tapTarget,
required this.title, required this.title,
required this.description, required this.description,
super.key,
this.contentLocation = ContentLocation.trivial, this.contentLocation = ContentLocation.trivial,
this.onComplete, this.onComplete,
}); });

View File

@ -8,15 +8,15 @@ import 'package:linkify/linkify.dart';
export 'package:hacki/screens/widgets/custom_linkify/linkifiers/linkifiers.dart'; export 'package:hacki/screens/widgets/custom_linkify/linkifiers/linkifiers.dart';
export 'package:linkify/linkify.dart' export 'package:linkify/linkify.dart'
show show
EmailElement,
EmailLinkifier,
LinkableElement,
Linkifier,
LinkifyElement, LinkifyElement,
LinkifyOptions, LinkifyOptions,
LinkableElement,
TextElement, TextElement,
Linkifier,
UrlElement, UrlElement,
UrlLinkifier, UrlLinkifier;
EmailElement,
EmailLinkifier;
/// Callback clicked link /// Callback clicked link
typedef LinkCallback = void Function(LinkableElement link); typedef LinkCallback = void Function(LinkableElement link);
@ -24,8 +24,8 @@ typedef LinkCallback = void Function(LinkableElement link);
/// Turns URLs into links /// Turns URLs into links
class Linkify extends StatelessWidget { class Linkify extends StatelessWidget {
const Linkify({ const Linkify({
super.key,
required this.text, required this.text,
super.key,
this.linkifiers = defaultLinkifiers, this.linkifiers = defaultLinkifiers,
this.onOpen, this.onOpen,
this.options = LinkifierUtil.linkifyOptions, this.options = LinkifierUtil.linkifyOptions,
@ -151,8 +151,8 @@ const List<Linkifier> defaultLinkifiers = <Linkifier>[
/// Turns URLs into links /// Turns URLs into links
class SelectableLinkify extends StatelessWidget { class SelectableLinkify extends StatelessWidget {
const SelectableLinkify({ const SelectableLinkify({
super.key,
required this.text, required this.text,
super.key,
this.semanticsLabel, this.semanticsLabel,
this.linkifiers = defaultLinkifiers, this.linkifiers = defaultLinkifiers,
this.onOpen, this.onOpen,

View File

@ -10,8 +10,8 @@ import 'package:hacki/utils/haptic_feedback_util.dart';
class CustomTabBar extends StatefulWidget { class CustomTabBar extends StatefulWidget {
const CustomTabBar({ const CustomTabBar({
super.key,
required this.tabController, required this.tabController,
super.key,
}); });
final TabController tabController; final TabController tabController;

View File

@ -0,0 +1,25 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
/// A walk-around for [SelectableText] not responding to swipe gestures
/// while wrapped in a [Dismissible].
///
/// https://github.com/flutter/flutter/issues/124421#issuecomment-1500666795
class DeviceGestureWrapper extends StatelessWidget {
const DeviceGestureWrapper({
required this.child,
super.key,
});
final Widget child;
@override
Widget build(BuildContext context) {
return MediaQuery(
data: const MediaQueryData(
gestureSettings: DeviceGestureSettings(touchSlop: 7.9),
),
child: child,
);
}
}

View File

@ -9,8 +9,8 @@ import 'package:hacki/utils/utils.dart';
class ItemText extends StatelessWidget { class ItemText extends StatelessWidget {
const ItemText({ const ItemText({
super.key,
required this.item, required this.item,
super.key,
this.onTap, this.onTap,
}); });

View File

@ -13,13 +13,13 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
class ItemsListView<T extends Item> extends StatelessWidget { class ItemsListView<T extends Item> extends StatelessWidget {
const ItemsListView({ const ItemsListView({
super.key,
required this.showWebPreview, required this.showWebPreview,
required this.showMetadata, required this.showMetadata,
required this.showUrl, required this.showUrl,
required this.items, required this.items,
required this.onTap, required this.onTap,
required this.refreshController, required this.refreshController,
super.key,
this.useCommentTile = false, this.useCommentTile = false,
this.showCommentBy = false, this.showCommentBy = false,
this.enablePullDown = true, this.enablePullDown = true,

View File

@ -10,7 +10,6 @@ import 'package:hacki/styles/styles.dart';
class LinkPreview extends StatefulWidget { class LinkPreview extends StatefulWidget {
const LinkPreview({ const LinkPreview({
super.key,
required this.link, required this.link,
required this.story, required this.story,
required this.onTap, required this.onTap,
@ -18,6 +17,7 @@ class LinkPreview extends StatefulWidget {
required this.showUrl, required this.showUrl,
required this.isOfflineReading, required this.isOfflineReading,
required this.titleStyle, required this.titleStyle,
super.key,
this.cache = const Duration(days: 30), this.cache = const Duration(days: 30),
this.showMultimedia = true, this.showMultimedia = true,
this.backgroundColor = const Color.fromRGBO(235, 235, 235, 1), this.backgroundColor = const Color.fromRGBO(235, 235, 235, 1),

View File

@ -13,7 +13,6 @@ import 'package:hacki/utils/link_util.dart';
class LinkView extends StatelessWidget { class LinkView extends StatelessWidget {
LinkView({ LinkView({
super.key,
required this.metadata, required this.metadata,
required this.url, required this.url,
required this.readableUrl, required this.readableUrl,
@ -24,6 +23,7 @@ class LinkView extends StatelessWidget {
required bool showUrl, required bool showUrl,
required this.bodyMaxLines, required this.bodyMaxLines,
required this.titleTextStyle, required this.titleTextStyle,
super.key,
this.imageUri, this.imageUri,
this.imagePath, this.imagePath,
this.showMultiMedia = true, this.showMultiMedia = true,

View File

@ -10,10 +10,10 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
class StoriesListView extends StatefulWidget { class StoriesListView extends StatefulWidget {
const StoriesListView({ const StoriesListView({
super.key,
required this.storyType, required this.storyType,
required this.header, required this.header,
required this.onStoryTapped, required this.onStoryTapped,
super.key,
}); });
final StoryType storyType; final StoryType storyType;

View File

@ -11,13 +11,13 @@ import 'package:shimmer/shimmer.dart';
class StoryTile extends StatelessWidget { class StoryTile extends StatelessWidget {
const StoryTile({ const StoryTile({
super.key,
this.hasRead = false,
required this.showWebPreview, required this.showWebPreview,
required this.showMetadata, required this.showMetadata,
required this.showUrl, required this.showUrl,
required this.story, required this.story,
required this.onTap, required this.onTap,
super.key,
this.hasRead = false,
this.simpleTileFontSize = 16, this.simpleTileFontSize = 16,
}); });

View File

@ -2,9 +2,9 @@ import 'package:flutter/material.dart';
class TapDownWrapper extends StatefulWidget { class TapDownWrapper extends StatefulWidget {
const TapDownWrapper({ const TapDownWrapper({
required this.child,
super.key, super.key,
this.onTap, this.onTap,
required this.child,
}); });
final VoidCallback? onTap; final VoidCallback? onTap;

View File

@ -8,6 +8,7 @@ export 'custom_circular_progress_indicator.dart';
export 'custom_described_feature_overlay.dart'; export 'custom_described_feature_overlay.dart';
export 'custom_linkify/custom_linkify.dart'; export 'custom_linkify/custom_linkify.dart';
export 'custom_tab_bar.dart'; export 'custom_tab_bar.dart';
export 'device_gesture_wrapper.dart';
export 'item_text.dart'; export 'item_text.dart';
export 'items_list_view.dart'; export 'items_list_view.dart';
export 'link_preview/link_preview.dart'; export 'link_preview/link_preview.dart';

View File

@ -9,7 +9,7 @@ import 'package:hacki/config/locator.dart';
import 'package:hacki/extensions/extensions.dart'; import 'package:hacki/extensions/extensions.dart';
import 'package:hacki/models/models.dart'; import 'package:hacki/models/models.dart';
import 'package:hacki/repositories/repositories.dart'; import 'package:hacki/repositories/repositories.dart';
import 'package:html/dom.dart' hide Text, Comment; import 'package:html/dom.dart' hide Comment, Text;
import 'package:html/parser.dart' as parser; import 'package:html/parser.dart' as parser;
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:http/io_client.dart'; import 'package:http/io_client.dart';
@ -110,9 +110,9 @@ class WebAnalyzer {
/// return [InfoBase] /// return [InfoBase]
static Future<InfoBase?> getInfo({ static Future<InfoBase?> getInfo({
required Story story, required Story story,
required bool offlineReading,
Duration cache = const Duration(hours: 24), Duration cache = const Duration(hours: 24),
bool multimedia = true, bool multimedia = true,
required bool offlineReading,
}) async { }) async {
final String key = getKey(story); final String key = getKey(story);
final String url = story.url; final String url = story.url;
@ -200,9 +200,9 @@ class WebAnalyzer {
} }
static Future<InfoBase?> _getInfoByIsolate({ static Future<InfoBase?> _getInfoByIsolate({
String? url,
required bool multimedia, required bool multimedia,
required Story story, required Story story,
String? url,
}) async { }) async {
List<dynamic>? res; List<dynamic>? res;

View File

@ -28,7 +28,6 @@ abstract class ThemeUtil {
statusBarColor: Palette.transparent, statusBarColor: Palette.transparent,
), ),
); );
break;
case AdaptiveThemeMode.dark: case AdaptiveThemeMode.dark:
SystemChrome.setSystemUIOverlayStyle( SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle( const SystemUiOverlayStyle(
@ -37,7 +36,6 @@ abstract class ThemeUtil {
statusBarColor: Palette.transparent, statusBarColor: Palette.transparent,
), ),
); );
break;
case AdaptiveThemeMode.system: case AdaptiveThemeMode.system:
case null: case null:
switch (brightness) { switch (brightness) {
@ -49,7 +47,6 @@ abstract class ThemeUtil {
statusBarColor: Palette.transparent, statusBarColor: Palette.transparent,
), ),
); );
break;
case Brightness.dark: case Brightness.dark:
SystemChrome.setSystemUIOverlayStyle( SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle( const SystemUiOverlayStyle(
@ -58,9 +55,7 @@ abstract class ThemeUtil {
statusBarColor: Palette.transparent, statusBarColor: Palette.transparent,
), ),
); );
break;
} }
break;
} }
} }
} }

View File

@ -5,58 +5,50 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201" sha256: "405666cd3cf0ee0a48d21ec67e65406aad2c726d9fa58840d3375e7bdcd32a07"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "52.0.0" version: "60.0.0"
adaptive_theme: adaptive_theme:
dependency: "direct main" dependency: "direct main"
description: description:
name: adaptive_theme name: adaptive_theme
sha256: "61bde10390e937d11d05c6cf0d5cf378a73d49f9a442262e43613dae60ed0b3f" sha256: "3568bb526d4823c7bb35f9ce3604af15e04cc0e9cc4f257da3604fe6b48d74ae"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.0" version: "3.2.1"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4 sha256: "1952250bd005bacb895a01bf1b4dc00e3ba1c526cf47dca54dfe24979c65f5b3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.4.0" version: "5.12.0"
archive:
dependency: transitive
description:
name: archive
sha256: "80e5141fafcb3361653ce308776cfd7d45e6e9fbb429e14eec571382c0c5fecb"
url: "https://pub.dev"
source: hosted
version: "3.3.2"
args: args:
dependency: transitive dependency: transitive
description: description:
name: args name: args
sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.0" version: "2.4.1"
async: async:
dependency: transitive dependency: transitive
description: description:
name: async name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.10.0" version: "2.11.0"
badges: badges:
dependency: "direct main" dependency: "direct main"
description: description:
name: badges name: badges
sha256: "461031a60efbb95276f52107f63d5d45008b5ca1eb7f8ca440cadda9ec2143b0" sha256: "6e7f3ec561ec08f47f912cfe349d4a1707afdc8dda271e17b046aa6d42c89e77"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.1.1"
bloc: bloc:
dependency: "direct main" dependency: "direct main"
description: description:
@ -109,10 +101,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.1" version: "1.3.0"
clipboard: clipboard:
dependency: "direct main" dependency: "direct main"
description: description:
@ -133,18 +125,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: collection name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.0" version: "1.17.1"
connectivity_plus: connectivity_plus:
dependency: "direct main" dependency: "direct main"
description: description:
name: connectivity_plus name: connectivity_plus
sha256: "8875e8ed511a49f030e313656154e4bbbcef18d68dfd32eb853fac10bce48e96" sha256: "45262924896ff72a8cd92b722bb7e3d5020f9e0724531a3e10e22ddae2005991"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "4.0.0"
connectivity_plus_platform_interface: connectivity_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -181,10 +173,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: crypto name: crypto
sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.3"
csslib: csslib:
dependency: transitive dependency: transitive
description: description:
@ -205,10 +197,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: device_info_plus name: device_info_plus
sha256: "1d6e5a61674ba3a68fb048a7c7b4ff4bebfed8d7379dbe8f2b718231be9a7c95" sha256: "9b1a0c32b2a503f8fe9f8764fac7b5fcd4f6bd35d8f49de5350bccf9e2a33b8a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.1.0" version: "9.0.0"
device_info_plus_platform_interface: device_info_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -229,10 +221,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: dio name: dio
sha256: "3e5c4a94d112540d0c9a6b7f3969832e1604eb8cde0f88d0808382f9f632100b" sha256: "347d56c26d63519552ef9a569f2a593dda99a81fdbdff13c584b7197cfe05059"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.3" version: "5.1.2"
equatable: equatable:
dependency: "direct main" dependency: "direct main"
description: description:
@ -270,10 +262,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.2"
file: file:
dependency: transitive dependency: transitive
description: description:
@ -352,26 +344,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_local_notifications name: flutter_local_notifications
sha256: "293995f94e120c8afce768981bd1fa9c5d6de67c547568e3b42ae2defdcbb4a0" sha256: "20c92629902b125cb624efdbacbbe98806b3c0b01adb3d84d1c72198b3eafb1a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "13.0.0" version: "14.0.1"
flutter_local_notifications_linux: flutter_local_notifications_linux:
dependency: transitive dependency: transitive
description: description:
name: flutter_local_notifications_linux name: flutter_local_notifications_linux
sha256: "8f6c1611e0c4a88a382691a97bb3c3feb24cc0c0b54152b8b5fb7ffb837f7fbf" sha256: "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "4.0.0+1"
flutter_local_notifications_platform_interface: flutter_local_notifications_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: flutter_local_notifications_platform_interface name: flutter_local_notifications_platform_interface
sha256: "5ec1feac5f7f7d9266759488bc5f76416152baba9aa1b26fe572246caa00d1ab" sha256: "7cf643d6d5022f3baed0be777b0662cce5919c0a7b86e700299f22dc4ae660ef"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.0" version: "7.0.0+1"
flutter_secure_storage: flutter_secure_storage:
dependency: "direct main" dependency: "direct main"
description: description:
@ -432,10 +424,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_slidable name: flutter_slidable
sha256: "6c68e1fad129b4b807b2218ef4cf7f7f6f61c5ec8861c990dc2278d9d03cb09f" sha256: cc4231579e3eae41ae166660df717f4bad1359c87f4a4322ad8ba1befeb3d2be
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "3.0.0"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -479,10 +471,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: get_it name: get_it
sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" sha256: "529de303c739fca98cd7ece5fca500d8ff89649f1bb4b4e94fb20954abcd7468"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.2.0" version: "7.6.0"
glob: glob:
dependency: transitive dependency: transitive
description: description:
@ -503,10 +495,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: html name: html
sha256: d9793e10dbe0e6c364f4c59bf3e01fb33a9b2a674bc7a1081693dba0614b6269 sha256: "58e3491f7bf0b6a4ea5110c0c688877460d1a6366731155c4a4580e7ded773e8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.15.1" version: "0.15.3"
html_unescape: html_unescape:
dependency: "direct main" dependency: "direct main"
description: description:
@ -519,10 +511,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: http name: http
sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.13.5" version: "0.13.6"
http_multi_server: http_multi_server:
dependency: transitive dependency: transitive
description: description:
@ -571,10 +563,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: intl name: intl
sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.18.0" version: "0.18.1"
io: io:
dependency: transitive dependency: transitive
description: description:
@ -587,18 +579,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: js name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.5" version: "0.6.7"
linkify: linkify:
dependency: "direct main" dependency: "direct main"
description: description:
name: linkify name: linkify
sha256: bdfbdafec6cdc9cd0ebb333a868cafc046714ad508e48be8095208c54691d959 sha256: "4139ea77f4651ab9c315b577da2dd108d9aa0bd84b5d03d33323f1970c645832"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.0" version: "5.0.0"
logger: logger:
dependency: "direct main" dependency: "direct main"
description: description:
@ -619,10 +611,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.13" version: "0.12.15"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
@ -643,10 +635,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.0" version: "1.9.1"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -683,10 +675,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: node_preamble name: node_preamble
sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d" sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.2"
octo_image: octo_image:
dependency: transitive dependency: transitive
description: description:
@ -707,10 +699,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: package_info_plus name: package_info_plus
sha256: "8df5ab0a481d7dc20c0e63809e90a588e496d276ba53358afc4c4443d0a00697" sha256: d39e8fbff4c5aef4592737e25ad6ac500df006ce7a7a8e1f838ce1256e167542
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "4.0.0"
package_info_plus_platform_interface: package_info_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -723,58 +715,58 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: path name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.2" version: "1.8.3"
path_provider: path_provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider name: path_provider
sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.12" version: "2.0.15"
path_provider_android: path_provider_android:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider_android name: path_provider_android
sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.22" version: "2.0.27"
path_provider_foundation: path_provider_foundation:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider_foundation name: path_provider_foundation
sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.2.3"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
name: path_provider_linux name: path_provider_linux
sha256: "2e32f1640f07caef0d3cb993680f181c79e54a3827b997d5ee221490d131fbd9" sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.8" version: "2.1.10"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.5" version: "2.0.6"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.1.6"
pedantic: pedantic:
dependency: transitive dependency: transitive
description: description:
@ -787,10 +779,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: petitparser name: petitparser
sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.0" version: "5.4.0"
platform: platform:
dependency: transitive dependency: transitive
description: description:
@ -803,10 +795,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.1.4"
pool: pool:
dependency: transitive dependency: transitive
description: description:
@ -835,10 +827,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: pub_semver name: pub_semver
sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.1.4"
pull_to_refresh: pull_to_refresh:
dependency: "direct main" dependency: "direct main"
description: description:
@ -860,10 +852,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: responsive_builder name: responsive_builder
sha256: "8eed603781a53fe1804a9ba50089ceb4882887f9c5b84ff139b03d8583a12fc9" sha256: a38ba9ba86c9daf08904674553034b651377b1d685d10ee450d8350ae51f76ec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.1" version: "0.7.0"
rxdart: rxdart:
dependency: "direct main" dependency: "direct main"
description: description:
@ -876,122 +868,122 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: scrollable_positioned_list name: scrollable_positioned_list
sha256: ca7fcaa743db712d4f7b1580526f494d0093c77a721a65705ee51fbeac7a2bd3 sha256: "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.5" version: "0.3.8"
sembast: sembast:
dependency: "direct main" dependency: "direct main"
description: description:
name: sembast name: sembast
sha256: "4997717aa84f0622691815d7e2739988b7f7d3a463302fc878f7d5acfa748e96" sha256: a784dbcf313ff38a7f57249694c64a6bcf79f704dbec127958459a7737716830
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.4.0+6" version: "3.4.4"
share_plus: share_plus:
dependency: "direct main" dependency: "direct main"
description: description:
name: share_plus name: share_plus
sha256: "8c6892037b1824e2d7e8f59d54b3105932899008642e6372e5079c6939b4b625" sha256: "322a1ec9d9fe07e2e2252c098ce93d12dbd06133cc4c00ffe6a4ef505c295c17"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.1" version: "7.0.0"
share_plus_platform_interface: share_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: share_plus_platform_interface name: share_plus_platform_interface
sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1" sha256: "0c6e61471bd71b04a138b8b588fa388e66d8b005e6f2deda63371c5c505a0981"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.0" version: "3.2.1"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: "5949029e70abe87f75cfe59d17bf5c397619c4b74a099b10116baeb34786fad9" sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.17" version: "2.1.1"
shared_preferences_android: shared_preferences_android:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7" sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.15" version: "2.1.4"
shared_preferences_foundation: shared_preferences_foundation:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: "2b55c18636a4edc529fa5cd44c03d3f3100c00513f518c5127c951978efcccd0" sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.2.2"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874 sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.2.0"
shared_preferences_platform_interface: shared_preferences_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.2.0"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.4" version: "2.1.0"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9" sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.3" version: "2.2.0"
shelf: shelf:
dependency: transitive dependency: transitive
description: description:
name: shelf name: shelf
sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.1"
shelf_packages_handler: shelf_packages_handler:
dependency: transitive dependency: transitive
description: description:
name: shelf_packages_handler name: shelf_packages_handler
sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.2"
shelf_static: shelf_static:
dependency: transitive dependency: transitive
description: description:
name: shelf_static name: shelf_static
sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.2"
shelf_web_socket: shelf_web_socket:
dependency: transitive dependency: transitive
description: description:
name: shelf_web_socket name: shelf_web_socket
sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.3" version: "1.0.4"
shimmer: shimmer:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1017,10 +1009,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_maps name: source_maps
sha256: "490098075234dcedb83c5d949b4c93dad5e6b7702748de000be2b57b8e6b2427" sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.10.11" version: "0.10.12"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
@ -1033,18 +1025,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sqflite name: sqflite
sha256: "78324387dc81df14f78df06019175a86a2ee0437624166c382e145d0a7fd9a4f" sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.4+1" version: "2.2.8+4"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:
name: sqflite_common name: sqflite_common
sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f sha256: e77abf6ff961d69dfef41daccbb66b51e9983cdd5cb35bf30733598057401555
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2+2" version: "2.4.5"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@ -1088,10 +1080,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: synchronized name: synchronized
sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.1.0"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
@ -1104,50 +1096,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test name: test
sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.22.0" version: "1.24.1"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.16" version: "0.5.1"
test_core: test_core:
dependency: transitive dependency: transitive
description: description:
name: test_core name: test_core
sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888" sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.20" version: "0.5.1"
timezone: timezone:
dependency: transitive dependency: transitive
description: description:
name: timezone name: timezone
sha256: "24c8fcdd49a805d95777a39064862133ff816ebfffe0ceff110fb5960e557964" sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.1" version: "0.9.2"
tuple:
dependency: "direct main"
description:
name: tuple
sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
name: typed_data name: typed_data
sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.1" version: "1.3.2"
universal_platform: universal_platform:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1160,66 +1144,66 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.9" version: "6.1.11"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" sha256: "1a5848f598acc5b7d8f7c18b8cb834ab667e59a13edc3c93e9d09cf38cc6bc87"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.23" version: "6.0.34"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815" sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.0" version: "6.1.4"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_linux name: url_launcher_linux
sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.5"
url_launcher_macos: url_launcher_macos:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_macos name: url_launcher_macos
sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.5"
url_launcher_platform_interface: url_launcher_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_platform_interface name: url_launcher_platform_interface
sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
url_launcher_web: url_launcher_web:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.14" version: "2.0.16"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_windows name: url_launcher_windows
sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.6"
uuid: uuid:
dependency: transitive dependency: transitive
description: description:
@ -1240,18 +1224,18 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: very_good_analysis name: very_good_analysis
sha256: ebc48c51db35beeeec8c414e32f7bd78e612bd7f5992ccb0d46e19edaeb40b08 sha256: "5f77d7c00d6010d8ad93ac5d91ecc851c216bcc1e7a51e56c3c01b27152453bb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.0+1" version: "5.0.0"
vm_service: vm_service:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.4.0" version: "11.3.0"
wakelock: wakelock:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1296,26 +1280,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: watcher name: watcher
sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.2" version: "1.1.0"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
name: web_socket_channel name: web_socket_channel
sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.4.0"
webdriver: webdriver:
dependency: transitive dependency: transitive
description: description:
name: webdriver name: webdriver
sha256: ef67178f0cc7e32c1494645b11639dd1335f1d18814aa8435113a92e9ef9d841 sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.2"
webkit_inspection_protocol: webkit_inspection_protocol:
dependency: transitive dependency: transitive
description: description:
@ -1328,42 +1312,50 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: webview_flutter name: webview_flutter
sha256: f7ec234830f86d0ef2bd664e8460b0038b8c1a83ff076035cad74ac70273753c sha256: "1a37bdbaaf5fbe09ad8579ab09ecfd473284ce482f900b5aea27cf834386a567"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" version: "4.2.0"
webview_flutter_android: webview_flutter_android:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: "5f49a6e5fc59e21fcec5e1bbcd401afbee9792a24a4f3d9cef9b5bb0cd1e3767" sha256: "1acea8def62592123e2fbbca164ed8681a98a890bdcbb88f916d5b4a22687759"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.4" version: "3.7.0"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_platform_interface name: webview_flutter_platform_interface
sha256: "8b2262dda5d26eabc600a7282a8c16a9473a0c765526afb0ffc33eef912f7968" sha256: "78715dc442b7849dbde74e92bb67de1cecf5addf95531c5fb474e72f5fe9a507"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.3.0"
webview_flutter_wkwebview: webview_flutter_wkwebview:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: "92e7e7fa468f1df597fb9d37bcf1f303175cbe147c4dbdf06ecc323d950116eb" sha256: "4646bb68297803bdbb96d46853e8fcb560d6cb5e04153fa64581535767875dfe"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.5" version: "3.4.3"
win32: win32:
dependency: transitive dependency: "direct overridden"
description: description:
name: win32 name: win32
sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 sha256: "6ca3aaab1790eeb1f5cad232e33d9c53ba66e884dd3e7686c4e730bffc45f1a3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.3" version: "5.0.2"
win32_registry:
dependency: transitive
description:
name: win32_registry
sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9
url: "https://pub.dev"
source: hosted
version: "1.1.1"
workmanager: workmanager:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1384,18 +1376,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: xml name: xml
sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.2" version: "6.3.0"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
name: yaml name: yaml
sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.1" version: "3.1.2"
sdks: sdks:
dart: ">=2.19.0 <3.0.0" dart: ">=3.0.0 <4.0.0"
flutter: ">=3.7.11" flutter: ">=3.10.1"

View File

@ -1,11 +1,11 @@
name: hacki name: hacki
description: A Hacker News reader. description: A Hacker News reader.
version: 1.5.1+109 version: 1.6.0+110
publish_to: none publish_to: none
environment: environment:
sdk: ">=2.17.0 <3.0.0" sdk: ">=3.0.0 <4.0.0"
flutter: "3.7.11" flutter: "3.10.1"
dependencies: dependencies:
adaptive_theme: ^3.2.0 adaptive_theme: ^3.2.0
@ -13,9 +13,9 @@ dependencies:
bloc: ^8.1.1 bloc: ^8.1.1
cached_network_image: ^3.2.3 cached_network_image: ^3.2.3
clipboard: ^0.1.3 clipboard: ^0.1.3
collection: ^1.17.0 collection: ^1.17.1
connectivity_plus: ^3.0.2 connectivity_plus: ^4.0.0
device_info_plus: ^8.1.0 device_info_plus: ^9.0.0
dio: ^5.0.3 dio: ^5.0.3
equatable: ^2.0.5 equatable: ^2.0.5
fast_gbk: ^1.0.0 fast_gbk: ^1.0.0
@ -31,10 +31,10 @@ dependencies:
flutter_fadein: ^2.0.0 flutter_fadein: ^2.0.0
flutter_feather_icons: 2.0.0+1 flutter_feather_icons: 2.0.0+1
flutter_inappwebview: ^5.7.2+3 flutter_inappwebview: ^5.7.2+3
flutter_local_notifications: ^13.0.0 flutter_local_notifications: ^14.0.1
flutter_secure_storage: ^8.0.0 flutter_secure_storage: ^8.0.0
flutter_siri_suggestions: ^2.1.0 flutter_siri_suggestions: ^2.1.0
flutter_slidable: ^2.0.0 flutter_slidable: ^3.0.0
font_awesome_flutter: ^10.3.0 font_awesome_flutter: ^10.3.0
gbk_codec: ^0.4.0 gbk_codec: ^0.4.0
get_it: ^7.2.0 get_it: ^7.2.0
@ -46,10 +46,10 @@ dependencies:
in_app_review: in_app_review:
path: components/in_app_review path: components/in_app_review
intl: ^0.18.0 intl: ^0.18.0
linkify: ^4.1.0 linkify: ^5.0.0
logger: ^1.3.0 logger: ^1.3.0
memoize: ^3.0.0 memoize: ^3.0.0
package_info_plus: ^3.0.3 package_info_plus: ^4.0.0
path: ^1.8.2 path: ^1.8.2
path_provider: ^2.0.12 path_provider: ^2.0.12
path_provider_android: ^2.0.22 path_provider_android: ^2.0.22
@ -59,24 +59,26 @@ dependencies:
url: https://github.com/livinglist/flutter_pulltorefresh url: https://github.com/livinglist/flutter_pulltorefresh
ref: master ref: master
receive_sharing_intent: ^1.4.5 receive_sharing_intent: ^1.4.5
responsive_builder: ^0.5.1 responsive_builder: ^0.7.0
rxdart: ^0.27.7 rxdart: ^0.27.7
scrollable_positioned_list: ^0.3.5 scrollable_positioned_list: ^0.3.5
sembast: ^3.4.0+6 sembast: ^3.4.0+6
share_plus: ^6.3.1 share_plus: ^7.0.0
shared_preferences: ^2.0.17 shared_preferences: ^2.0.17
shared_preferences_android: ^2.0.15 shared_preferences_android: ^2.0.15
shared_preferences_foundation: ^2.1.3 shared_preferences_foundation: ^2.1.3
shimmer: ^2.0.0 shimmer: ^2.0.0
synced_shared_preferences: synced_shared_preferences:
path: components/synced_shared_preferences path: components/synced_shared_preferences
tuple: ^2.0.1
universal_platform: ^1.0.0+1 universal_platform: ^1.0.0+1
url_launcher: ^6.1.9 url_launcher: ^6.1.9
wakelock: ^0.6.1+2 wakelock: ^0.6.2
webview_flutter: ^4.0.2 webview_flutter: ^4.0.2
workmanager: ^0.5.1 workmanager: ^0.5.1
dependency_overrides:
win32: ^5.0.2
dev_dependencies: dev_dependencies:
bloc_test: ^9.1.0 bloc_test: ^9.1.0
flutter_driver: flutter_driver:
@ -86,7 +88,7 @@ dev_dependencies:
integration_test: integration_test:
sdk: flutter sdk: flutter
mocktail: ^0.3.0 mocktail: ^0.3.0
very_good_analysis: ^4.0.0+1 very_good_analysis: ^5.0.0
flutter: flutter:
uses-material-design: true uses-material-design: true