init refilc-plus

This commit is contained in:
skidoodle 2024-10-03 18:47:25 +02:00
commit 6edc2029bd
Signed by: albert
GPG key ID: A06E3070D7D55BF2
37 changed files with 6988 additions and 0 deletions

View file

@ -0,0 +1,242 @@
import 'package:refilc/models/settings.dart';
import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc_mobile_ui/common/panel/panel.dart';
// import 'package:refilc_mobile_ui/common/panel/panel_button.dart';
import 'package:refilc_plus/helpers/app_icon_helper.dart';
// import 'package:refilc_plus/models/premium_scopes.dart';
// import 'package:refilc_plus/providers/plus_provider.dart';
// import 'package:refilc_plus/ui/mobile/plus/upsell.dart';
import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart';
import 'app_icon_screen.i18n.dart';
class PremiumCustomAppIconMenu extends StatelessWidget {
const PremiumCustomAppIconMenu({super.key, required this.settings});
final SettingsProvider settings;
@override
Widget build(BuildContext context) {
// return PanelButton(
// onPressed: () {
// if (!Provider.of<PlusProvider>(context, listen: false)
// .hasScope(PremiumScopes.changeAppIcon)) {
// PlusLockedFeaturePopup.show(
// context: context, feature: PremiumFeature.appiconchange);
// return;
// }
// Navigator.of(context, rootNavigator: true).push(
// CupertinoPageRoute(builder: (context) => const ModifyAppIcon()),
// );
// },
// title: Text('custom_app_icon'.i18n),
// leading: const Icon(FeatherIcons.edit),
// );
return const SizedBox(
width: 0,
height: 0,
);
}
}
class ModifyAppIcon extends StatefulWidget {
const ModifyAppIcon({super.key});
@override
State<ModifyAppIcon> createState() => _ModifyAppIconState();
}
class _ModifyAppIconState extends State<ModifyAppIcon> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
late SettingsProvider settings;
@override
Widget build(BuildContext context) {
settings = Provider.of<SettingsProvider>(context);
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
leading: BackButton(color: AppColors.of(context).text),
title: Text(
"app_icons".i18n,
style: TextStyle(color: AppColors.of(context).text),
),
),
body: Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Panel(
title: Text("basic".i18n),
child: Column(
children: [
AppIconItem(
iconName: 'refilc_default',
iconPath: 'assets/launch_icons/refilc_default.png',
displayName: 'reFilc Default',
description: 'Az alapértelmezett ikon.',
selected: settings.appIcon == 'refilc_default',
selectCallback: () async {
await AppIconHelper.setAppIcon('refilc_default');
settings.update(appIcon: 'refilc_default');
},
),
],
),
),
// const SizedBox(height: 16.0),
// Panel(
// title: Text("seasonal".i18n),
// child: Column(
// children: [
// // AppIconItem(
// // iconName: 'refilc_default',
// // iconPath: 'assets/launch_icons/refilc_default.png',
// // displayName: 'reFilc Default',
// // description: 'Az alapértelmezett ikon.',
// // selected: true,
// // selectCallback: () {},
// // ),
// ],
// ),
// ),
const SizedBox(height: 16.0),
Panel(
title: Text("special".i18n),
child: Column(
children: [
AppIconItem(
iconName: 'refilc_overcomplicated',
iconPath:
'assets/launch_icons/refilc_overcomplicated.png',
displayName: 'Overcomplicated',
// description: 'Egy túlkomplikált ikon.',
selected: settings.appIcon == 'refilc_overcomplicated',
selectCallback: () async {
await AppIconHelper.setAppIcon(
'refilc_overcomplicated');
settings.update(appIcon: 'refilc_overcomplicated');
},
),
AppIconItem(
iconName: 'refilc_concept',
iconPath: 'assets/launch_icons/refilc_concept.png',
displayName: 'Modern Concept',
// description: 'Egy modernebb, letisztultabb ikon.',
selected: settings.appIcon == 'refilc_concept',
selectCallback: () async {
await AppIconHelper.setAppIcon('refilc_concept');
settings.update(appIcon: 'refilc_concept');
},
),
],
),
),
const SizedBox(height: 16.0),
Panel(
title: Text("other".i18n),
child: Column(
children: [
AppIconItem(
iconName: 'refilc_pride',
iconPath: 'assets/launch_icons/refilc_pride.png',
displayName: 'Pride',
// description: '',
selected: settings.appIcon == 'refilc_pride',
selectCallback: () async {
await AppIconHelper.setAppIcon('refilc_pride');
settings.update(appIcon: 'refilc_pride');
},
),
],
),
),
],
),
),
));
}
}
class AppIconItem extends StatelessWidget {
const AppIconItem({
super.key,
required this.iconName,
required this.iconPath,
required this.displayName,
this.description,
required this.selected,
required this.selectCallback,
});
final String iconName;
final String iconPath;
final String displayName;
final String? description;
final bool selected;
final void Function() selectCallback;
@override
Widget build(BuildContext context) {
return ListTile(
minLeadingWidth: 32.0,
dense: true,
contentPadding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 0),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
visualDensity: VisualDensity.compact,
onTap: () {},
leading: Container(
height: 40,
width: 40,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
image: DecorationImage(
image: AssetImage(iconPath),
fit: BoxFit.contain,
),
),
),
title: InkWell(
onTap: selectCallback,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
displayName,
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16,
height: description == null ? 3.2 : 1.8,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
if (description != null)
Text(
description!,
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 14,
color: AppColors.of(context).text.withOpacity(.75),
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
),
),
trailing: selected
? Icon(
FeatherIcons.checkCircle,
color: Theme.of(context).colorScheme.primary,
)
: const SizedBox(),
);
}
}