mirror of
https://github.com/zapstore/zapstore.git
synced 2026-10-05 20:48:24 +00:00
install/updates wip
This commit is contained in:
@@ -34,7 +34,7 @@ class FileMetadata extends ZapstoreEvent<FileMetadata> with BaseFileMetadata {
|
||||
|
||||
final uri = Uri.parse(url);
|
||||
final response = await http.get(uri);
|
||||
final dir = await getApplicationDocumentsDirectory();
|
||||
final dir = await getApplicationSupportDirectory();
|
||||
final file = File(path.join(dir.path, path.basename(url)));
|
||||
await file.writeAsBytes(response.bodyBytes);
|
||||
|
||||
@@ -53,8 +53,6 @@ class FileMetadata extends ZapstoreEvent<FileMetadata> with BaseFileMetadata {
|
||||
throw Exception(
|
||||
'installation error: ${code != null ? PackageInstallerStatus.byCode(code) : ''}');
|
||||
}
|
||||
// final apps = await packageManager.getInstalledPackages();
|
||||
// apps?.firstWhere((e) => e.packageName == release.value!.identifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +164,9 @@ class AppDetailScreen extends HookConsumerWidget {
|
||||
foregroundColor: Colors.white,
|
||||
minimumSize: const Size.fromHeight(50),
|
||||
),
|
||||
onPressed: () {},
|
||||
onPressed: () {
|
||||
app.releases.first.artifacts.first.install();
|
||||
},
|
||||
child: const Text('Install'),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_data/flutter_data.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:zapstore/main.data.dart';
|
||||
import 'package:zapstore/utils/extensions.dart';
|
||||
|
||||
class SettingsScreen extends HookConsumerWidget {
|
||||
const SettingsScreen({super.key});
|
||||
@@ -12,18 +14,24 @@ class SettingsScreen extends HookConsumerWidget {
|
||||
final controller = useTextEditingController();
|
||||
return Column(
|
||||
children: [
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
ref.apps.logLevel = 2;
|
||||
await ref.apps.clearLocal();
|
||||
},
|
||||
child: Text('clear all'),
|
||||
Text(
|
||||
'Share your feedback with us',
|
||||
style: context.theme.textTheme.headlineLarge,
|
||||
),
|
||||
Gap(20),
|
||||
TextField(
|
||||
controller: controller,
|
||||
autofocus: true,
|
||||
maxLines: 10,
|
||||
),
|
||||
Gap(20),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
ref.apps.logLevel = 2;
|
||||
await ref.apps.clearLocal();
|
||||
},
|
||||
child: Text('Send'),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,19 +1,70 @@
|
||||
import 'package:android_package_manager/android_package_manager.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:flutter_data/flutter_data.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:zapstore/main.data.dart';
|
||||
import 'package:zapstore/models/app.dart';
|
||||
import 'package:zapstore/widgets/card.dart';
|
||||
|
||||
final testApp = {
|
||||
"id": "945b30320b5b9ca315adecda68b1e18effd10e8933d2fd770cd04c014af153a4",
|
||||
"pubkey": "78ce6faa72264387284e647ba6938995735ec8c7d5c5a65737e55130f026307d",
|
||||
"sig":
|
||||
"c5d4d8a0dfe4a3e52a45866f4c29e3ae063cbc3a5607a6a01979d30a31655cc6a567e7f3388f3f0772fddb6ad6702b181fc24d3d9e9cdff795af8edec6122af5",
|
||||
"kind": 32267,
|
||||
"created_at": 1714425637,
|
||||
"content":
|
||||
"Primal is a Nostr client featuring:\n\n- Easy onboarding\\\n- Smooth, fast and rich feeds\\\n- Content discovery\n",
|
||||
"tags": [
|
||||
["d", "net.primal.android"],
|
||||
["name", "Primal"],
|
||||
["repository", "https://github.com/PrimalHQ/primal-android-app"],
|
||||
[
|
||||
"icon",
|
||||
"https://cdn.zap.store/778bc7fc496a95187b9dcc7c2ba8325a156912d64a2e22e91ed52d0dbf00716c.png"
|
||||
],
|
||||
]
|
||||
};
|
||||
|
||||
final installedAppsStateProvider = StateNotifierProvider.autoDispose<
|
||||
DataStateNotifier<List<App>>, DataState<List<App>>>((ref) {
|
||||
final packageManager = AndroidPackageManager();
|
||||
final n = DataStateNotifier(
|
||||
data: DataState<List<App>>(
|
||||
[],
|
||||
// ref.apps.deserialize(testApp).models,
|
||||
isLoading: true,
|
||||
));
|
||||
|
||||
() async {
|
||||
final infos = await packageManager.getInstalledPackages();
|
||||
final ids = infos!
|
||||
.map((i) => i.packageName)
|
||||
.nonNulls
|
||||
.where((n) => !n.startsWith('android') || !n.startsWith('com.android'))
|
||||
.toSet();
|
||||
print('querying for $ids');
|
||||
final apps = await ref.apps.findAll(params: {'#d': ids});
|
||||
print('got ${apps.length}');
|
||||
n.updateWith(model: apps);
|
||||
}();
|
||||
return n;
|
||||
});
|
||||
|
||||
class UpdatesScreen extends HookConsumerWidget {
|
||||
const UpdatesScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final controller = useTextEditingController();
|
||||
return Expanded(
|
||||
child: TextField(
|
||||
controller: controller,
|
||||
autofocus: true,
|
||||
maxLines: 10,
|
||||
),
|
||||
final state = ref.watch(installedAppsStateProvider);
|
||||
|
||||
return ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: state.model.length,
|
||||
itemBuilder: (context, index) {
|
||||
final app = state.model[index];
|
||||
return CardWidget(app: app);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,19 +29,6 @@ class AppDrawer extends HookConsumerWidget {
|
||||
},
|
||||
child: Text('Log in'),
|
||||
),
|
||||
// ElevatedButton(
|
||||
// onPressed: () async {
|
||||
// ref.read(loggedInUser.notifier).state = null;
|
||||
// controller.clear();
|
||||
// // final as = await packageManager.getInstalledApplications();
|
||||
// // for (final a in as!) {
|
||||
// // if (!a.packageName!.contains('android')) {
|
||||
// // print(a.packageName);
|
||||
// // }
|
||||
// // }
|
||||
// },
|
||||
// child: Text('check'),
|
||||
// ),
|
||||
if (u2 != null)
|
||||
Expanded(
|
||||
child: Column(
|
||||
|
||||
Reference in New Issue
Block a user