Bump deps (#253)
* Migrate first chunk * Upgrade rest of the deps * Remove unawaited * Enabled new lints * Remove old TODO * Update podlock
This commit is contained in:
parent
992a62b33c
commit
e2f9c43675
|
@ -32,13 +32,16 @@ linter:
|
||||||
- directives_ordering
|
- directives_ordering
|
||||||
- empty_catches
|
- empty_catches
|
||||||
- empty_constructor_bodies
|
- empty_constructor_bodies
|
||||||
|
- eol_at_end_of_file
|
||||||
- exhaustive_cases
|
- exhaustive_cases
|
||||||
- file_names
|
- file_names
|
||||||
- hash_and_equals
|
- hash_and_equals
|
||||||
- implementation_imports
|
- implementation_imports
|
||||||
|
- invariant_booleans
|
||||||
- library_names
|
- library_names
|
||||||
- library_prefixes
|
- library_prefixes
|
||||||
- non_constant_identifier_names
|
- non_constant_identifier_names
|
||||||
|
- noop_primitive_operations
|
||||||
- null_check_on_nullable_type_parameter
|
- null_check_on_nullable_type_parameter
|
||||||
- omit_local_variable_types
|
- omit_local_variable_types
|
||||||
- one_member_abstracts
|
- one_member_abstracts
|
||||||
|
@ -101,6 +104,7 @@ linter:
|
||||||
- unrelated_type_equality_checks
|
- unrelated_type_equality_checks
|
||||||
- use_full_hex_values_for_flutter_colors
|
- use_full_hex_values_for_flutter_colors
|
||||||
- use_is_even_rather_than_modulo
|
- use_is_even_rather_than_modulo
|
||||||
|
- use_test_throws_matchers
|
||||||
- use_raw_strings
|
- use_raw_strings
|
||||||
- use_rethrow_when_possible
|
- use_rethrow_when_possible
|
||||||
- use_setters_to_change_properties
|
- use_setters_to_change_properties
|
||||||
|
|
|
@ -5,11 +5,11 @@ PODS:
|
||||||
- FMDB/standard (2.7.5)
|
- FMDB/standard (2.7.5)
|
||||||
- image_picker (0.0.1):
|
- image_picker (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- package_info (0.0.1):
|
- package_info_plus (0.4.5):
|
||||||
- Flutter
|
- Flutter
|
||||||
- path_provider (0.0.1):
|
- path_provider (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- share (0.0.1):
|
- share_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- shared_preferences (0.0.1):
|
- shared_preferences (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
@ -22,9 +22,9 @@ PODS:
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- image_picker (from `.symlinks/plugins/image_picker/ios`)
|
- image_picker (from `.symlinks/plugins/image_picker/ios`)
|
||||||
- package_info (from `.symlinks/plugins/package_info/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- path_provider (from `.symlinks/plugins/path_provider/ios`)
|
- path_provider (from `.symlinks/plugins/path_provider/ios`)
|
||||||
- share (from `.symlinks/plugins/share/ios`)
|
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
||||||
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
|
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
|
||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||||
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
||||||
|
@ -38,12 +38,12 @@ EXTERNAL SOURCES:
|
||||||
:path: Flutter
|
:path: Flutter
|
||||||
image_picker:
|
image_picker:
|
||||||
:path: ".symlinks/plugins/image_picker/ios"
|
:path: ".symlinks/plugins/image_picker/ios"
|
||||||
package_info:
|
package_info_plus:
|
||||||
:path: ".symlinks/plugins/package_info/ios"
|
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||||
path_provider:
|
path_provider:
|
||||||
:path: ".symlinks/plugins/path_provider/ios"
|
:path: ".symlinks/plugins/path_provider/ios"
|
||||||
share:
|
share_plus:
|
||||||
:path: ".symlinks/plugins/share/ios"
|
:path: ".symlinks/plugins/share_plus/ios"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
:path: ".symlinks/plugins/shared_preferences/ios"
|
:path: ".symlinks/plugins/shared_preferences/ios"
|
||||||
sqflite:
|
sqflite:
|
||||||
|
@ -52,16 +52,16 @@ EXTERNAL SOURCES:
|
||||||
:path: ".symlinks/plugins/url_launcher/ios"
|
:path: ".symlinks/plugins/url_launcher/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
|
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||||
image_picker: 50e7c7ff960e5f58faa4d1f4af84a771c671bc4a
|
image_picker: e06f7a68f000bd36f552c1847e33cda96ed31f1f
|
||||||
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
|
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||||
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
|
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
|
||||||
share: 0b2c3e82132f5888bccca3351c504d0003b3b410
|
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
|
||||||
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
|
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
|
||||||
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
||||||
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
||||||
|
|
||||||
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
||||||
|
|
||||||
COCOAPODS: 1.10.1
|
COCOAPODS: 1.11.0
|
||||||
|
|
|
@ -3,8 +3,6 @@ import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
|
||||||
import 'ref.dart';
|
|
||||||
|
|
||||||
class Debounce {
|
class Debounce {
|
||||||
final bool loading;
|
final bool loading;
|
||||||
final VoidCallback callback;
|
final VoidCallback callback;
|
||||||
|
@ -27,14 +25,14 @@ Debounce useDebounce(
|
||||||
final timerHandle = useRef<Timer?>(null);
|
final timerHandle = useRef<Timer?>(null);
|
||||||
|
|
||||||
cancel() {
|
cancel() {
|
||||||
timerHandle.current?.cancel();
|
timerHandle.value?.cancel();
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => () => timerHandle.current?.cancel(), []);
|
useEffect(() => () => timerHandle.value?.cancel(), []);
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
timerHandle.current = Timer(delayDuration, () async {
|
timerHandle.value = Timer(delayDuration, () async {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
await callback();
|
await callback();
|
||||||
cancel();
|
cancel();
|
||||||
|
|
|
@ -3,8 +3,6 @@ import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
|
||||||
import 'ref.dart';
|
|
||||||
|
|
||||||
class DelayedLoading {
|
class DelayedLoading {
|
||||||
final bool pending;
|
final bool pending;
|
||||||
final bool loading;
|
final bool loading;
|
||||||
|
@ -32,11 +30,11 @@ DelayedLoading useDelayedLoading(
|
||||||
loading: loading.value,
|
loading: loading.value,
|
||||||
pending: pending.value,
|
pending: pending.value,
|
||||||
start: () {
|
start: () {
|
||||||
timerHandle.current = Timer(delayDuration, () => loading.value = true);
|
timerHandle.value = Timer(delayDuration, () => loading.value = true);
|
||||||
pending.value = true;
|
pending.value = true;
|
||||||
},
|
},
|
||||||
cancel: () {
|
cancel: () {
|
||||||
timerHandle.current?.cancel();
|
timerHandle.value?.cancel();
|
||||||
pending.value = false;
|
pending.value = false;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
|
||||||
/// creates an [AsyncSnapshot] from the Future returned from the valueBuilder.
|
/// creates an [AsyncSnapshot] from the Future returned from the valueBuilder.
|
||||||
/// [keys] can be used to rebuild the Future
|
/// [keys] can be used to rebuild the Future
|
||||||
AsyncSnapshot<T?> useMemoFuture<T>(
|
AsyncSnapshot<T> useMemoFuture<T>(
|
||||||
Future<T> Function() valueBuilder, [
|
Future<T> Function() valueBuilder, [
|
||||||
List<Object?> keys = const <Object>[],
|
List<Object?> keys = const <Object>[],
|
||||||
]) =>
|
]) =>
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
||||||
|
|
||||||
class Ref<T> {
|
|
||||||
T current;
|
|
||||||
Ref(this.current);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// see React's useRef
|
|
||||||
Ref<T> useRef<T>(T initialValue) => useMemoized(() => Ref(initialValue));
|
|
|
@ -18,8 +18,10 @@ class Refreshable<T> {
|
||||||
///
|
///
|
||||||
/// `keys` will re-run the initial fetching thus yielding a
|
/// `keys` will re-run the initial fetching thus yielding a
|
||||||
/// loading state in the AsyncSnapshot
|
/// loading state in the AsyncSnapshot
|
||||||
Refreshable<T?> useRefreshable<T>(AsyncValueGetter<T> fetcher,
|
Refreshable<T> useRefreshable<T extends Object>(
|
||||||
[List<Object> keys = const <Object>[]]) {
|
AsyncValueGetter<T> fetcher, [
|
||||||
|
List<Object> keys = const <Object>[],
|
||||||
|
]) {
|
||||||
final newData = useState<T?>(null);
|
final newData = useState<T?>(null);
|
||||||
final snapshot = useMemoFuture(() async {
|
final snapshot = useMemoFuture(() async {
|
||||||
newData.value = null;
|
newData.value = null;
|
||||||
|
@ -28,7 +30,7 @@ Refreshable<T?> useRefreshable<T>(AsyncValueGetter<T> fetcher,
|
||||||
|
|
||||||
final outSnapshot = () {
|
final outSnapshot = () {
|
||||||
if (newData.value != null) {
|
if (newData.value != null) {
|
||||||
return AsyncSnapshot.withData(ConnectionState.done, newData.value);
|
return AsyncSnapshot.withData(ConnectionState.done, newData.value!);
|
||||||
}
|
}
|
||||||
return snapshot;
|
return snapshot;
|
||||||
}();
|
}();
|
||||||
|
|
|
@ -114,7 +114,7 @@ class CreatePostPage extends HookWidget {
|
||||||
|
|
||||||
uploadPicture(Jwt token) async {
|
uploadPicture(Jwt token) async {
|
||||||
try {
|
try {
|
||||||
final pic = await imagePicker.getImage(source: ImageSource.gallery);
|
final pic = await imagePicker.pickImage(source: ImageSource.gallery);
|
||||||
// pic is null when the picker was cancelled
|
// pic is null when the picker was cancelled
|
||||||
if (pic != null) {
|
if (pic != null) {
|
||||||
imageUploadLoading.value = true;
|
imageUploadLoading.value = true;
|
||||||
|
|
|
@ -38,7 +38,7 @@ class InstancePage extends HookWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
final siteSnap = useFuture(siteFuture, initialData: null);
|
final siteSnap = useFuture(siteFuture);
|
||||||
final colorOnCard = textColorBasedOnBackground(theme.cardColor);
|
final colorOnCard = textColorBasedOnBackground(theme.cardColor);
|
||||||
final accStore = useAccountsStore();
|
final accStore = useAccountsStore();
|
||||||
final scrollController = useScrollController();
|
final scrollController = useScrollController();
|
||||||
|
@ -233,7 +233,7 @@ class _AboutTab extends HookWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
final commSnap = useFuture(communitiesFuture, initialData: null);
|
final commSnap = useFuture(communitiesFuture);
|
||||||
final accStore = useAccountsStore();
|
final accStore = useAccountsStore();
|
||||||
|
|
||||||
void goToCommunities() {
|
void goToCommunities() {
|
||||||
|
|
|
@ -8,7 +8,6 @@ import 'package:url_launcher/url_launcher.dart' as ul;
|
||||||
|
|
||||||
import '../hooks/delayed_loading.dart';
|
import '../hooks/delayed_loading.dart';
|
||||||
import '../hooks/image_picker.dart';
|
import '../hooks/image_picker.dart';
|
||||||
import '../hooks/ref.dart';
|
|
||||||
import '../hooks/stores.dart';
|
import '../hooks/stores.dart';
|
||||||
import '../l10n/l10n.dart';
|
import '../l10n/l10n.dart';
|
||||||
import '../util/more_icon.dart';
|
import '../util/more_icon.dart';
|
||||||
|
@ -151,8 +150,8 @@ class _ManageAccount extends HookWidget {
|
||||||
showReadPosts: showReadPosts.value,
|
showReadPosts: showReadPosts.value,
|
||||||
sendNotificationsToEmail: sendNotificationsToEmail.value,
|
sendNotificationsToEmail: sendNotificationsToEmail.value,
|
||||||
auth: token.raw,
|
auth: token.raw,
|
||||||
avatar: avatar.current,
|
avatar: avatar.value,
|
||||||
banner: banner.current,
|
banner: banner.value,
|
||||||
matrixUserId: matrixUserController.text.isEmpty
|
matrixUserId: matrixUserController.text.isEmpty
|
||||||
? null
|
? null
|
||||||
: matrixUserController.text,
|
: matrixUserController.text,
|
||||||
|
@ -163,8 +162,8 @@ class _ManageAccount extends HookWidget {
|
||||||
email: emailController.text.isEmpty ? null : emailController.text,
|
email: emailController.text.isEmpty ? null : emailController.text,
|
||||||
));
|
));
|
||||||
|
|
||||||
informAcceptedAvatarRef.current?.call();
|
informAcceptedAvatarRef.value?.call();
|
||||||
informAcceptedBannerRef.current?.call();
|
informAcceptedBannerRef.value?.call();
|
||||||
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
|
||||||
content: Text('User settings saved'),
|
content: Text('User settings saved'),
|
||||||
|
@ -243,16 +242,16 @@ class _ManageAccount extends HookWidget {
|
||||||
_ImagePicker(
|
_ImagePicker(
|
||||||
user: user,
|
user: user,
|
||||||
name: L10n.of(context)!.avatar,
|
name: L10n.of(context)!.avatar,
|
||||||
initialUrl: avatar.current,
|
initialUrl: avatar.value,
|
||||||
onChange: (value) => avatar.current = value,
|
onChange: (value) => avatar.value = value,
|
||||||
informAcceptedRef: informAcceptedAvatarRef,
|
informAcceptedRef: informAcceptedAvatarRef,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
_ImagePicker(
|
_ImagePicker(
|
||||||
user: user,
|
user: user,
|
||||||
name: L10n.of(context)!.banner,
|
name: L10n.of(context)!.banner,
|
||||||
initialUrl: banner.current,
|
initialUrl: banner.value,
|
||||||
onChange: (value) => banner.current = value,
|
onChange: (value) => banner.value = value,
|
||||||
informAcceptedRef: informAcceptedBannerRef,
|
informAcceptedRef: informAcceptedBannerRef,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
|
@ -396,7 +395,7 @@ class _ImagePicker extends HookWidget {
|
||||||
/// _ImagePicker will set the ref to a callback that can inform _ImagePicker
|
/// _ImagePicker will set the ref to a callback that can inform _ImagePicker
|
||||||
/// that the current picture is accepted
|
/// that the current picture is accepted
|
||||||
/// and should no longer allow for deletion of it
|
/// and should no longer allow for deletion of it
|
||||||
final Ref<VoidCallback?> informAcceptedRef;
|
final ObjectRef<VoidCallback?> informAcceptedRef;
|
||||||
|
|
||||||
const _ImagePicker({
|
const _ImagePicker({
|
||||||
Key? key,
|
Key? key,
|
||||||
|
@ -413,7 +412,7 @@ class _ImagePicker extends HookWidget {
|
||||||
// basically saves the very first initialUrl
|
// basically saves the very first initialUrl
|
||||||
final initialUrl = useRef(this.initialUrl);
|
final initialUrl = useRef(this.initialUrl);
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
final url = useState(initialUrl.current);
|
final url = useState(initialUrl.value);
|
||||||
final pictrsDeleteToken = useState<PictrsUploadFile?>(null);
|
final pictrsDeleteToken = useState<PictrsUploadFile?>(null);
|
||||||
|
|
||||||
final imagePicker = useImagePicker();
|
final imagePicker = useImagePicker();
|
||||||
|
@ -422,7 +421,7 @@ class _ImagePicker extends HookWidget {
|
||||||
|
|
||||||
uploadImage() async {
|
uploadImage() async {
|
||||||
try {
|
try {
|
||||||
final pic = await imagePicker.getImage(source: ImageSource.gallery);
|
final pic = await imagePicker.pickImage(source: ImageSource.gallery);
|
||||||
// pic is null when the picker was cancelled
|
// pic is null when the picker was cancelled
|
||||||
if (pic != null) {
|
if (pic != null) {
|
||||||
delayedLoading.start();
|
delayedLoading.start();
|
||||||
|
@ -456,15 +455,15 @@ class _ImagePicker extends HookWidget {
|
||||||
|
|
||||||
if (updateState) {
|
if (updateState) {
|
||||||
pictrsDeleteToken.value = null;
|
pictrsDeleteToken.value = null;
|
||||||
url.value = initialUrl.current;
|
url.value = initialUrl.value;
|
||||||
onChange?.call(url.value);
|
onChange?.call(url.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() {
|
useEffect(() {
|
||||||
informAcceptedRef.current = () {
|
informAcceptedRef.value = () {
|
||||||
pictrsDeleteToken.value = null;
|
pictrsDeleteToken.value = null;
|
||||||
initialUrl.current = url.value;
|
initialUrl.value = url.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
return () {
|
return () {
|
||||||
|
|
|
@ -314,7 +314,6 @@ class AccountsConfigPage extends HookWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: speeddial v3 has really stupid defaults here https://github.com/darioielardi/flutter_speed_dial/issues/149
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
key: _scaffoldKey,
|
key: _scaffoldKey,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
|
@ -324,12 +323,10 @@ class AccountsConfigPage extends HookWidget {
|
||||||
animatedIcon: AnimatedIcons.menu_close, // TODO: change to + => x
|
animatedIcon: AnimatedIcons.menu_close, // TODO: change to + => x
|
||||||
curve: Curves.bounceIn,
|
curve: Curves.bounceIn,
|
||||||
tooltip: 'Add account or instance',
|
tooltip: 'Add account or instance',
|
||||||
overlayColor: theme.canvasColor,
|
|
||||||
children: [
|
children: [
|
||||||
SpeedDialChild(
|
SpeedDialChild(
|
||||||
child: const Icon(Icons.person_add),
|
child: const Icon(Icons.person_add),
|
||||||
label: 'Add account',
|
label: 'Add account',
|
||||||
labelBackgroundColor: theme.canvasColor,
|
|
||||||
onTap: () => showCupertinoModalPopup(
|
onTap: () => showCupertinoModalPopup(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (_) =>
|
builder: (_) =>
|
||||||
|
@ -337,7 +334,6 @@ class AccountsConfigPage extends HookWidget {
|
||||||
),
|
),
|
||||||
SpeedDialChild(
|
SpeedDialChild(
|
||||||
child: const Icon(Icons.dns),
|
child: const Icon(Icons.dns),
|
||||||
labelBackgroundColor: theme.canvasColor,
|
|
||||||
label: 'Add instance',
|
label: 'Add instance',
|
||||||
onTap: () => showCupertinoModalPopup(
|
onTap: () => showCupertinoModalPopup(
|
||||||
context: context, builder: (_) => const AddInstancePage()),
|
context: context, builder: (_) => const AddInstancePage()),
|
||||||
|
|
|
@ -25,7 +25,7 @@ class UserPage extends HookWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final userDetailsSnap = useFuture(_userDetails, initialData: null);
|
final userDetailsSnap = useFuture(_userDetails);
|
||||||
|
|
||||||
final body = () {
|
final body = () {
|
||||||
if (userDetailsSnap.hasData) {
|
if (userDetailsSnap.hasData) {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:share/share.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
/// A `package:share` wrapper that fallbacks to copying contents to the clipboard
|
/// A `package:share` wrapper that fallbacks to copying contents to the clipboard
|
||||||
/// on platforms that do not support native sharing
|
/// on platforms that do not support native sharing
|
||||||
|
@ -10,16 +12,28 @@ Future<void> share(
|
||||||
Rect? sharePositionOrigin,
|
Rect? sharePositionOrigin,
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
}) async {
|
}) async {
|
||||||
|
if (Platform.isLinux || Platform.isWindows) {
|
||||||
|
await _fallbackShare(text, context: context);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return await Share.share(
|
await Share.share(
|
||||||
text,
|
text,
|
||||||
subject: subject,
|
subject: subject,
|
||||||
sharePositionOrigin: sharePositionOrigin,
|
sharePositionOrigin: sharePositionOrigin,
|
||||||
);
|
);
|
||||||
} on MissingPluginException {
|
} on MissingPluginException {
|
||||||
await Clipboard.setData(ClipboardData(text: text));
|
await _fallbackShare(text, context: context);
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
const SnackBar(content: Text('Copied data to clipboard!')),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _fallbackShare(
|
||||||
|
String text, {
|
||||||
|
required BuildContext context,
|
||||||
|
}) async {
|
||||||
|
await Clipboard.setData(ClipboardData(text: text));
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
const SnackBar(content: Text('Copied data to clipboard!')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
/// Explicitely indicate to the `unawaited_futures` lint
|
|
||||||
/// that the future is not awaited for on purpose
|
|
||||||
void unawaited<T>(Future<T> future) {}
|
|
|
@ -1,9 +1,8 @@
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
|
||||||
import '../gen/assets.gen.dart';
|
import '../gen/assets.gen.dart';
|
||||||
import '../hooks/memo_future.dart';
|
import '../hooks/memo_future.dart';
|
||||||
|
@ -17,21 +16,7 @@ class AboutTile extends HookWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final packageInfoSnap = useMemoFuture(
|
final packageInfoSnap = useMemoFuture(PackageInfo.fromPlatform);
|
||||||
() async {
|
|
||||||
try {
|
|
||||||
return await PackageInfo.fromPlatform();
|
|
||||||
} on MissingPluginException {
|
|
||||||
// when we get here it means PackageInfo does not support this platform
|
|
||||||
return PackageInfo(
|
|
||||||
appName: 'lemmur',
|
|
||||||
packageName: '',
|
|
||||||
version: '',
|
|
||||||
buildNumber: '',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
final assetBundle = DefaultAssetBundle.of(context);
|
final assetBundle = DefaultAssetBundle.of(context);
|
||||||
final changelogSnap =
|
final changelogSnap =
|
||||||
useMemoFuture(() => assetBundle.loadString('CHANGELOG.md'));
|
useMemoFuture(() => assetBundle.loadString('CHANGELOG.md'));
|
||||||
|
|
|
@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
|
||||||
import '../hooks/ref.dart';
|
|
||||||
import 'bottom_safe.dart';
|
import 'bottom_safe.dart';
|
||||||
|
|
||||||
class InfiniteScrollController {
|
class InfiniteScrollController {
|
||||||
|
@ -77,9 +76,9 @@ class InfiniteScroll<T> extends HookWidget {
|
||||||
if (controller != null) {
|
if (controller != null) {
|
||||||
controller?.clear = () {
|
controller?.clear = () {
|
||||||
data.value = [];
|
data.value = [];
|
||||||
hasMore.current = true;
|
hasMore.value = true;
|
||||||
page.current = 1;
|
page.value = 1;
|
||||||
dataSet.current.clear();
|
dataSet.value.clear();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,9 +88,9 @@ class InfiniteScroll<T> extends HookWidget {
|
||||||
return RefreshIndicator(
|
return RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
data.value = [];
|
data.value = [];
|
||||||
hasMore.current = true;
|
hasMore.value = true;
|
||||||
page.current = 1;
|
page.value = 1;
|
||||||
dataSet.current.clear();
|
dataSet.value.clear();
|
||||||
|
|
||||||
await HapticFeedback.mediumImpact();
|
await HapticFeedback.mediumImpact();
|
||||||
await Future.delayed(const Duration(seconds: 1));
|
await Future.delayed(const Duration(seconds: 1));
|
||||||
|
@ -107,35 +106,35 @@ class InfiniteScroll<T> extends HookWidget {
|
||||||
i -= 1;
|
i -= 1;
|
||||||
|
|
||||||
// if we are done but we have no data it means the list is empty
|
// if we are done but we have no data it means the list is empty
|
||||||
if (!hasMore.current && data.value.isEmpty) {
|
if (!hasMore.value && data.value.isEmpty) {
|
||||||
return Center(child: noItems);
|
return Center(child: noItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
// reached the bottom, fetch more
|
// reached the bottom, fetch more
|
||||||
if (i == data.value.length) {
|
if (i == data.value.length) {
|
||||||
// if there are no more, skip
|
// if there are no more, skip
|
||||||
if (!hasMore.current) {
|
if (!hasMore.value) {
|
||||||
return const BottomSafe();
|
return const BottomSafe();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if it's already fetching more, skip
|
// if it's already fetching more, skip
|
||||||
if (!isFetching.current) {
|
if (!isFetching.value) {
|
||||||
isFetching.current = true;
|
isFetching.value = true;
|
||||||
fetcher(page.current, batchSize).then((incoming) {
|
fetcher(page.value, batchSize).then((incoming) {
|
||||||
// if got less than the batchSize, mark the list as done
|
// if got less than the batchSize, mark the list as done
|
||||||
if (incoming.length < batchSize) {
|
if (incoming.length < batchSize) {
|
||||||
hasMore.current = false;
|
hasMore.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final newData = incoming.where(
|
final newData = incoming.where(
|
||||||
(e) => !dataSet.current.contains(uniquePropFunc(e)),
|
(e) => !dataSet.value.contains(uniquePropFunc(e)),
|
||||||
);
|
);
|
||||||
|
|
||||||
// append new data
|
// append new data
|
||||||
data.value = [...data.value, ...newData];
|
data.value = [...data.value, ...newData];
|
||||||
dataSet.current.addAll(newData.map(uniquePropFunc));
|
dataSet.value.addAll(newData.map(uniquePropFunc));
|
||||||
page.current += 1;
|
page.value += 1;
|
||||||
}).whenComplete(() => isFetching.current = false);
|
}).whenComplete(() => isFetching.value = false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
|
|
257
pubspec.lock
257
pubspec.lock
|
@ -7,14 +7,14 @@ packages:
|
||||||
name: _fe_analyzer_shared
|
name: _fe_analyzer_shared
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "22.0.0"
|
version: "25.0.0"
|
||||||
analyzer:
|
analyzer:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: analyzer
|
name: analyzer
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.7.2"
|
version: "2.2.0"
|
||||||
archive:
|
archive:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -28,7 +28,7 @@ packages:
|
||||||
name: args
|
name: args
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.2.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -49,63 +49,77 @@ packages:
|
||||||
name: build
|
name: build
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.0"
|
||||||
build_config:
|
build_config:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_config
|
name: build_config
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.7"
|
version: "1.0.0"
|
||||||
build_daemon:
|
build_daemon:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_daemon
|
name: build_daemon
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.10"
|
version: "3.0.0"
|
||||||
build_resolvers:
|
build_resolvers:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_resolvers
|
name: build_resolvers
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.4"
|
||||||
build_runner:
|
build_runner:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: build_runner
|
name: build_runner
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.12.2"
|
version: "2.1.2"
|
||||||
build_runner_core:
|
build_runner_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_runner_core
|
name: build_runner_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.12"
|
version: "7.1.0"
|
||||||
built_collection:
|
built_collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: built_collection
|
name: built_collection
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.0"
|
version: "5.1.1"
|
||||||
built_value:
|
built_value:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: built_value
|
name: built_value
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.0.4"
|
version: "8.1.2"
|
||||||
cached_network_image:
|
cached_network_image:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cached_network_image
|
name: cached_network_image
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.1.0"
|
||||||
|
cached_network_image_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cached_network_image_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
cached_network_image_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cached_network_image_web
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -133,7 +147,7 @@ packages:
|
||||||
name: cli_util
|
name: cli_util
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.0"
|
version: "0.3.3"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -147,7 +161,7 @@ packages:
|
||||||
name: code_builder
|
name: code_builder
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.7.0"
|
version: "4.1.0"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -161,7 +175,14 @@ packages:
|
||||||
name: convert
|
name: convert
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.1"
|
||||||
|
cross_file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cross_file
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.1+5"
|
||||||
crypto:
|
crypto:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -175,14 +196,14 @@ packages:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
dart_style:
|
dart_style:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: dart_style
|
name: dart_style
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.0"
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -196,14 +217,14 @@ packages:
|
||||||
name: ffi
|
name: ffi
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.1.2"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file
|
name: file
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.0"
|
version: "6.1.2"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -229,21 +250,21 @@ packages:
|
||||||
name: flutter_cache_manager
|
name: flutter_cache_manager
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.1.2"
|
||||||
flutter_hooks:
|
flutter_hooks:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_hooks
|
name: flutter_hooks
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.16.0"
|
version: "0.18.0"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_launcher_icons
|
name: flutter_launcher_icons
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.0"
|
version: "0.9.2"
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -255,7 +276,7 @@ packages:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.1"
|
version: "0.6.6"
|
||||||
flutter_mobx:
|
flutter_mobx:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -269,14 +290,14 @@ packages:
|
||||||
name: flutter_plugin_android_lifecycle
|
name: flutter_plugin_android_lifecycle
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.3"
|
||||||
flutter_speed_dial:
|
flutter_speed_dial:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_speed_dial
|
name: flutter_speed_dial
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.5"
|
version: "4.3.0"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -293,14 +314,21 @@ packages:
|
||||||
name: freezed
|
name: freezed
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.14.1+2"
|
version: "0.14.5"
|
||||||
freezed_annotation:
|
freezed_annotation:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: freezed_annotation
|
name: freezed_annotation
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.14.2"
|
version: "0.14.3"
|
||||||
|
frontend_server_client:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: frontend_server_client
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
fuzzy:
|
fuzzy:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -321,21 +349,21 @@ packages:
|
||||||
name: graphs
|
name: graphs
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "2.0.0"
|
||||||
http:
|
http:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: http
|
name: http
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.13.1"
|
version: "0.13.3"
|
||||||
http_multi_server:
|
http_multi_server:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: http_multi_server
|
name: http_multi_server
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.1"
|
||||||
http_parser:
|
http_parser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -349,28 +377,28 @@ packages:
|
||||||
name: image
|
name: image
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.4"
|
||||||
image_picker:
|
image_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: image_picker
|
name: image_picker
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.4"
|
version: "0.8.4"
|
||||||
image_picker_for_web:
|
image_picker_for_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: image_picker_for_web
|
name: image_picker_for_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.3"
|
||||||
image_picker_platform_interface:
|
image_picker_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: image_picker_platform_interface
|
name: image_picker_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.4.1"
|
||||||
intl:
|
intl:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -384,7 +412,7 @@ packages:
|
||||||
name: io
|
name: io
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.0.3"
|
||||||
js:
|
js:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -398,14 +426,14 @@ packages:
|
||||||
name: json_annotation
|
name: json_annotation
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.1"
|
version: "4.1.0"
|
||||||
json_serializable:
|
json_serializable:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: json_serializable
|
name: json_serializable
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.0"
|
version: "5.0.0"
|
||||||
keyboard_dismisser:
|
keyboard_dismisser:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -482,7 +510,7 @@ packages:
|
||||||
name: mobx_codegen
|
name: mobx_codegen
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.2"
|
version: "2.0.3"
|
||||||
modal_bottom_sheet:
|
modal_bottom_sheet:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -511,13 +539,48 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
package_info:
|
package_info_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: package_info
|
name: package_info_plus
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "1.0.6"
|
||||||
|
package_info_plus_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_linux
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.3"
|
||||||
|
package_info_plus_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_macos
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
|
package_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
|
package_info_plus_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_web
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.4"
|
||||||
|
package_info_plus_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_windows
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.3"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -531,21 +594,21 @@ packages:
|
||||||
name: path_provider
|
name: path_provider
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.3"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_linux
|
name: path_provider_linux
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
path_provider_macos:
|
path_provider_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_macos
|
name: path_provider_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
path_provider_platform_interface:
|
path_provider_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -559,21 +622,21 @@ packages:
|
||||||
name: path_provider_windows
|
name: path_provider_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.3"
|
||||||
pedantic:
|
pedantic:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: pedantic
|
name: pedantic
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.11.1"
|
||||||
petitparser:
|
petitparser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: petitparser
|
name: petitparser
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.0"
|
version: "4.3.0"
|
||||||
photo_view:
|
photo_view:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -589,14 +652,14 @@ packages:
|
||||||
name: platform
|
name: platform
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.2"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: plugin_platform_interface
|
name: plugin_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.1"
|
||||||
pool:
|
pool:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -610,14 +673,14 @@ packages:
|
||||||
name: process
|
name: process
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.1"
|
version: "4.2.3"
|
||||||
provider:
|
provider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: provider
|
name: provider
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.0"
|
version: "6.0.0"
|
||||||
pub_semver:
|
pub_semver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -638,35 +701,70 @@ packages:
|
||||||
name: rxdart
|
name: rxdart
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.26.0"
|
version: "0.27.2"
|
||||||
share:
|
share_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: share
|
name: share_plus
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.4"
|
||||||
|
share_plus_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_linux
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.4"
|
||||||
|
share_plus_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_macos
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.2"
|
||||||
|
share_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.1"
|
||||||
|
share_plus_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_web
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.4"
|
||||||
|
share_plus_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_windows
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.3"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: shared_preferences
|
name: shared_preferences
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.0.7"
|
||||||
shared_preferences_linux:
|
shared_preferences_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_linux
|
name: shared_preferences_linux
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
shared_preferences_macos:
|
shared_preferences_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_macos
|
name: shared_preferences_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
shared_preferences_platform_interface:
|
shared_preferences_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -680,21 +778,21 @@ packages:
|
||||||
name: shared_preferences_web
|
name: shared_preferences_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
shared_preferences_windows:
|
shared_preferences_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_windows
|
name: shared_preferences_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
shelf:
|
shelf:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shelf
|
name: shelf
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.2.0"
|
||||||
shelf_web_socket:
|
shelf_web_socket:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -713,7 +811,14 @@ packages:
|
||||||
name: source_gen
|
name: source_gen
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.1.0"
|
||||||
|
source_helper:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_helper
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.1"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -727,14 +832,14 @@ packages:
|
||||||
name: sqflite
|
name: sqflite
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0+3"
|
version: "2.0.0+4"
|
||||||
sqflite_common:
|
sqflite_common:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqflite_common
|
name: sqflite_common
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0+2"
|
version: "2.0.1+1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -790,7 +895,7 @@ packages:
|
||||||
name: timeago
|
name: timeago
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.1.0"
|
||||||
timing:
|
timing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -811,49 +916,49 @@ packages:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.3"
|
version: "6.0.10"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_linux
|
name: url_launcher_linux
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_platform_interface
|
name: url_launcher_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.2"
|
version: "2.0.4"
|
||||||
url_launcher_web:
|
url_launcher_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.4"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_windows
|
name: url_launcher_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.2"
|
||||||
uuid:
|
uuid:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: uuid
|
name: uuid
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.3"
|
version: "3.0.4"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -874,14 +979,14 @@ packages:
|
||||||
name: web_socket_channel
|
name: web_socket_channel
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.1.0"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.2.9"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -895,7 +1000,7 @@ packages:
|
||||||
name: xml
|
name: xml
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.0"
|
version: "5.3.0"
|
||||||
yaml:
|
yaml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -904,5 +1009,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.12.0 <3.0.0"
|
dart: ">=2.14.0 <3.0.0"
|
||||||
flutter: ">=1.24.0-10.2.pre"
|
flutter: ">=2.0.0"
|
||||||
|
|
22
pubspec.yaml
22
pubspec.yaml
|
@ -22,7 +22,7 @@ environment:
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
# widgets
|
# widgets
|
||||||
flutter_speed_dial: ^3.0.5
|
flutter_speed_dial: ^4.3.0
|
||||||
# TODO: bring back to pub hosted when fix is released
|
# TODO: bring back to pub hosted when fix is released
|
||||||
photo_view:
|
photo_view:
|
||||||
git:
|
git:
|
||||||
|
@ -34,15 +34,15 @@ dependencies:
|
||||||
modal_bottom_sheet: ^2.0.0
|
modal_bottom_sheet: ^2.0.0
|
||||||
|
|
||||||
# native
|
# native
|
||||||
share: ^2.0.1
|
share_plus: ^2.1.4
|
||||||
url_launcher: ^6.0.3
|
url_launcher: ^6.0.3
|
||||||
shared_preferences: ^2.0.5
|
shared_preferences: ^2.0.5
|
||||||
package_info: ^2.0.0
|
package_info_plus: ^1.0.6
|
||||||
image_picker: ^0.7.4
|
image_picker: ^0.8.4
|
||||||
|
|
||||||
# state management
|
# state management
|
||||||
flutter_hooks: ^0.16.0
|
flutter_hooks: ^0.18.0
|
||||||
provider: ^5.0.0
|
provider: ^6.0.0
|
||||||
mobx: ^2.0.4
|
mobx: ^2.0.4
|
||||||
flutter_mobx: ^2.0.2
|
flutter_mobx: ^2.0.2
|
||||||
|
|
||||||
|
@ -52,9 +52,9 @@ dependencies:
|
||||||
lemmy_api_client: ^0.16.0
|
lemmy_api_client: ^0.16.0
|
||||||
intl: ^0.17.0
|
intl: ^0.17.0
|
||||||
matrix4_transform: ^2.0.0
|
matrix4_transform: ^2.0.0
|
||||||
json_annotation: ^4.0.1
|
json_annotation: ^4.1.0
|
||||||
keyboard_dismisser: ^2.0.0
|
keyboard_dismisser: ^2.0.0
|
||||||
freezed_annotation: ^0.14.2
|
freezed_annotation: ^0.14.3
|
||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
@ -68,9 +68,9 @@ dependencies:
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_launcher_icons: ^0.9.0
|
flutter_launcher_icons: ^0.9.2
|
||||||
json_serializable: ^4.1.0
|
json_serializable: ^5.0.0
|
||||||
build_runner: ^1.11.1
|
build_runner: ^2.1.2
|
||||||
mobx_codegen: ^2.0.2
|
mobx_codegen: ^2.0.2
|
||||||
freezed: ^0.14.1+2
|
freezed: ^0.14.1+2
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue