Slight tweak to import/export buttons

This commit is contained in:
Imran Remtulla
2022-09-17 17:54:50 -04:00
parent 53513bfdd1
commit 911b06bfb6

View File

@@ -26,6 +26,16 @@ class _ImportExportPageState extends State<ImportExportPage> {
SourceProvider sourceProvider = SourceProvider(); SourceProvider sourceProvider = SourceProvider();
var settingsProvider = context.read<SettingsProvider>(); var settingsProvider = context.read<SettingsProvider>();
var appsProvider = context.read<AppsProvider>(); var appsProvider = context.read<AppsProvider>();
var outlineButtonStyle = ButtonStyle(
shape: MaterialStateProperty.all(
StadiumBorder(
side: BorderSide(
width: 1,
color: Theme.of(context).colorScheme.primary,
),
),
),
);
Future<List<List<String>>> addApps(List<String> urls) async { Future<List<List<String>>> addApps(List<String> urls) async {
await settingsProvider.getInstallPermission(); await settingsProvider.getInstallPermission();
@@ -53,40 +63,58 @@ class _ImportExportPageState extends State<ImportExportPage> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
ElevatedButton( Row(
onPressed: appsProvider.apps.isEmpty || importInProgress children: [
Expanded(
child: TextButton(
style: outlineButtonStyle,
onPressed: appsProvider.apps.isEmpty ||
importInProgress
? null ? null
: () { : () {
HapticFeedback.selectionClick(); HapticFeedback.selectionClick();
appsProvider.exportApps().then((String path) { appsProvider
ScaffoldMessenger.of(context).showSnackBar( .exportApps()
SnackBar(content: Text('Exported to $path')), .then((String path) {
ScaffoldMessenger.of(context)
.showSnackBar(
SnackBar(
content:
Text('Exported to $path')),
); );
}); });
}, },
child: const Text('Obtainium Export')), child: const Text('Obtainium Export'))),
const SizedBox( const SizedBox(
height: 8, width: 16,
), ),
ElevatedButton( Expanded(
child: TextButton(
style: outlineButtonStyle,
onPressed: importInProgress onPressed: importInProgress
? null ? null
: () { : () {
HapticFeedback.selectionClick(); HapticFeedback.selectionClick();
FilePicker.platform.pickFiles().then((result) { FilePicker.platform
.pickFiles()
.then((result) {
setState(() { setState(() {
importInProgress = true; importInProgress = true;
}); });
if (result != null) { if (result != null) {
String data = File(result.files.single.path!) String data =
File(result.files.single.path!)
.readAsStringSync(); .readAsStringSync();
try { try {
jsonDecode(data); jsonDecode(data);
} catch (e) { } catch (e) {
throw 'Invalid input'; throw 'Invalid input';
} }
appsProvider.importApps(data).then((value) { appsProvider
ScaffoldMessenger.of(context).showSnackBar( .importApps(data)
.then((value) {
ScaffoldMessenger.of(context)
.showSnackBar(
SnackBar( SnackBar(
content: Text( content: Text(
'$value App${value == 1 ? '' : 's'} Imported')), '$value App${value == 1 ? '' : 's'} Imported')),
@@ -96,7 +124,8 @@ class _ImportExportPageState extends State<ImportExportPage> {
// User canceled the picker // User canceled the picker
} }
}).catchError((e) { }).catchError((e) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context)
.showSnackBar(
SnackBar(content: Text(e.toString())), SnackBar(content: Text(e.toString())),
); );
}).whenComplete(() { }).whenComplete(() {
@@ -105,7 +134,9 @@ class _ImportExportPageState extends State<ImportExportPage> {
}); });
}); });
}, },
child: const Text('Obtainium Import')), child: const Text('Obtainium Import')))
],
),
if (importInProgress) if (importInProgress)
Column( Column(
children: const [ children: const [
@@ -171,7 +202,9 @@ class _ImportExportPageState extends State<ImportExportPage> {
} }
}); });
}, },
child: const Text('Import from URL List')), child: const Text(
'Import from URL List',
)),
...sourceProvider.massSources ...sourceProvider.massSources
.map((source) => Column( .map((source) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,