Skip to content
Snippets Groups Projects
Commit c6ea1e65 authored by vjrj's avatar vjrj
Browse files

PWA wip

parent da884534
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ import 'dart:io';
import 'package:connectivity_wrapper/connectivity_wrapper.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:filesystem_picker/filesystem_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
......@@ -12,6 +13,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:introduction_screen/introduction_screen.dart';
import 'package:once/once.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pwa_install/pwa_install.dart';
import 'package:responsive_framework/responsive_wrapper.dart';
import 'package:responsive_framework/utils/scroll_behavior.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
......@@ -37,6 +39,8 @@ import 'ui/screens/skeleton_screen.dart';
import 'ui/ui_helpers.dart';
void main() async {
Bloc.observer = AppBlocObserver();
/// Initialize packages
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
......@@ -56,9 +60,9 @@ void main() async {
await shared.getWallet();
assert(shared.getPubKey() != null);
await Hive.initFlutter();
if (kIsWeb) {
// It seems is redundant
// await Hive.initFlutter();
HydratedBloc.storage = await HydratedStorage.build(
storageDirectory: HydratedStorage.webStorageDirectory);
} else {
......@@ -68,14 +72,16 @@ void main() async {
await HydratedStorage.build(storageDirectory: tmpDir);
}
Bloc.observer = AppBlocObserver();
// Reset hive during developing
if (!kReleaseMode) {
// Once.clearAll();
// await HydratedBloc.storage.clear();
}
PWAInstall().setup(installCallback: () {
logger('APP INSTALLED!');
});
void appRunner() => runApp(
EasyLocalization(
path: 'assets/translations',
......@@ -287,43 +293,52 @@ class _GinkgoAppState extends State<GinkgoApp> {
}, duration: const Duration(minutes: 10));
fetchTransactions(context);
return ConnectivityAppWrapper(
app: MaterialApp(
/// Localization is not available for the title.
title: 'Ğ1nkgo',
theme: ThemeData(useMaterial3: true, colorScheme: lightColorScheme),
darkTheme: ThemeData(useMaterial3: true, colorScheme: darkColorScheme),
/// Theme stuff
/// Localization stuff
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
debugShowCheckedModeBanner: false,
home: context.read<AppCubit>().isIntroViewed
? const SkeletonScreen()
: const AppIntro(),
builder: (BuildContext buildContext, Widget? widget) {
return ResponsiveWrapper.builder(
BouncingScrollWrapper.builder(
context,
ConnectivityWidgetWrapper(
message: tr('offline'),
height: 20,
child: widget!,
)),
maxWidth: 480,
minWidth: 480,
// defaultScale: true,
breakpoints: <ResponsiveBreakpoint>[
const ResponsiveBreakpoint.resize(200, name: MOBILE),
const ResponsiveBreakpoint.resize(480, name: TABLET),
const ResponsiveBreakpoint.resize(1000, name: DESKTOP),
],
background: Container(color: const Color(0xFFF5F5F5)),
);
},
));
app: FilesystemPickerDefaultOptions(
fileTileSelectMode: FileTileSelectMode.wholeTile,
theme: FilesystemPickerTheme(
topBar: FilesystemPickerTopBarThemeData(
backgroundColor: Theme.of(context).colorScheme.primary,
),
),
child: MaterialApp(
/// Localization is not available for the title.
title: 'Ğ1nkgo',
theme: ThemeData(
useMaterial3: true, colorScheme: lightColorScheme),
darkTheme:
ThemeData(useMaterial3: true, colorScheme: darkColorScheme),
/// Theme stuff
/// Localization stuff
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
debugShowCheckedModeBanner: false,
home: context.read<AppCubit>().isIntroViewed
? const SkeletonScreen()
: const AppIntro(),
builder: (BuildContext buildContext, Widget? widget) {
return ResponsiveWrapper.builder(
BouncingScrollWrapper.builder(
context,
ConnectivityWidgetWrapper(
message: tr('offline'),
height: 20,
child: widget!,
)),
maxWidth: 480,
minWidth: 480,
// defaultScale: true,
breakpoints: <ResponsiveBreakpoint>[
const ResponsiveBreakpoint.resize(200, name: MOBILE),
const ResponsiveBreakpoint.resize(480, name: TABLET),
const ResponsiveBreakpoint.resize(1000, name: DESKTOP),
],
background: Container(color: const Color(0xFFF5F5F5)),
);
},
)));
});
}
}
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:pwa_install/pwa_install.dart';
import 'package:share_plus/share_plus.dart';
import '../../data/models/app_cubit.dart';
......@@ -24,7 +25,8 @@ class FifthScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<AppCubit, AppState>(
builder: (BuildContext context, AppState state) => Scaffold(
builder: (BuildContext context, AppState state) =>
Scaffold(
appBar: AppBar(title: Text(tr('bottom_nav_fifth'))),
drawer: const CardDrawer(),
body: ListView(
......@@ -87,13 +89,35 @@ class FifthScreen extends StatelessWidget {
GridItem(
title: 'share_your_key',
icon: Icons.share,
onTap: () => Share.share(
SharedPreferencesHelper().getPubKey())),
onTap: () =>
Share.share(
SharedPreferencesHelper().getPubKey())),
GridItem(
title: 'copy_your_key',
icon: Icons.copy,
onTap: () => copyPublicKeyToClipboard(context),
),
if (PWAInstall().installPromptEnabled)
GridItem(
title: 'install_desktop',
icon: Icons.install_desktop,
onTap: () {
try {
PWAInstall().promptInstall_();
} catch (e) {
final String error = e.toString();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(tr(
'error_installing_desktop',
namedArgs: <String, String>{
'error': error
})),
),
);
}
},
),
GridItem(
title: 'export_key',
icon: Icons.download,
......@@ -116,6 +140,7 @@ class FifthScreen extends StatelessWidget {
},
);
}),
]),
if (state.expertMode)
const TextDivider(text: 'technical_info_title'),
......@@ -130,7 +155,7 @@ class FifthScreen extends StatelessWidget {
title: 'code_card_title',
icon: Icons.code_rounded,
url:
Uri.parse('https://git.duniter.org/vjrj/ginkgo')),
Uri.parse('https://git.duniter.org/vjrj/ginkgo')),
const BottomWidget(),
SwitchListTile(
title: Text(tr('expert_mode')),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment