commit
4d155651de
12
l10n-missing-translation.json
Normal file
12
l10n-missing-translation.json
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"hi": [
|
||||||
|
"sign_up",
|
||||||
|
"log_in",
|
||||||
|
"oops",
|
||||||
|
"start_backup",
|
||||||
|
"auth_session_expired",
|
||||||
|
"auth_login_again",
|
||||||
|
"auth_logging_out",
|
||||||
|
"email_already_claimed"
|
||||||
|
]
|
||||||
|
}
|
4
l10n.yaml
Normal file
4
l10n.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
arb-dir: lib/l10n
|
||||||
|
template-arb-file: app_en.arb
|
||||||
|
output-localization-file: app_localizations.dart
|
||||||
|
untranslated-messages-file: l10n-missing-translation.json
|
17
lib/l10n/app_en.arb
Normal file
17
lib/l10n/app_en.arb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"sign_up": "sign up",
|
||||||
|
"@sign_up": {
|
||||||
|
"description": "Text on the sign up button used during registration"
|
||||||
|
},
|
||||||
|
"log_in": "log in",
|
||||||
|
"ok": "ok",
|
||||||
|
"oops": "oops",
|
||||||
|
"@oops": {
|
||||||
|
"description": "Usage: 'oops, I'm sorry!' or 'oops, verification failed'"
|
||||||
|
},
|
||||||
|
"start_backup": "start backup",
|
||||||
|
"auth_session_expired": "session expired",
|
||||||
|
"auth_login_again": "please login again",
|
||||||
|
"auth_logging_out": "logging out...",
|
||||||
|
"email_already_claimed": "this email is already in use"
|
||||||
|
}
|
3
lib/l10n/app_hi.arb
Normal file
3
lib/l10n/app_hi.arb
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"ok": "ok"
|
||||||
|
}
|
8
lib/l10n/l10n.dart
Normal file
8
lib/l10n/l10n.dart
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
class L10n {
|
||||||
|
static final all = [
|
||||||
|
const Locale('en'),
|
||||||
|
const Locale('hi'),
|
||||||
|
];
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import 'package:background_fetch/background_fetch.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:in_app_purchase/in_app_purchase.dart';
|
import 'package:in_app_purchase/in_app_purchase.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
@ -27,6 +28,9 @@ import 'package:photos/utils/crypto_util.dart';
|
||||||
import 'package:photos/utils/file_uploader.dart';
|
import 'package:photos/utils/file_uploader.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:super_logging/super_logging.dart';
|
import 'package:super_logging/super_logging.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
import 'l10n/l10n.dart';
|
||||||
|
|
||||||
final _logger = Logger("main");
|
final _logger = Logger("main");
|
||||||
|
|
||||||
|
@ -241,6 +245,13 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
|
||||||
home: EnteApp._homeWidget,
|
home: EnteApp._homeWidget,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
builder: EasyLoading.init(),
|
builder: EasyLoading.init(),
|
||||||
|
supportedLocales: L10n.all,
|
||||||
|
localizationsDelegates: [
|
||||||
|
AppLocalizations.delegate,
|
||||||
|
GlobalMaterialLocalizations.delegate,
|
||||||
|
GlobalCupertinoLocalizations.delegate,
|
||||||
|
GlobalWidgetsLocalizations.delegate,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ import 'package:photos/utils/crypto_util.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/navigation_util.dart';
|
import 'package:photos/utils/navigation_util.dart';
|
||||||
import 'package:photos/utils/toast_util.dart';
|
import 'package:photos/utils/toast_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
class UserService {
|
class UserService {
|
||||||
final _dio = Network.instance.getDio();
|
final _dio = Network.instance.getDio();
|
||||||
final _logger = Logger("UserAuthenticator");
|
final _logger = Logger("UserAuthenticator");
|
||||||
|
@ -71,7 +71,8 @@ class UserService {
|
||||||
} on DioError catch (e) {
|
} on DioError catch (e) {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
if (e.response != null && e.response.statusCode == 403) {
|
if (e.response != null && e.response.statusCode == 403) {
|
||||||
showErrorDialog(context, "oops", "this email is already in use");
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
|
AppLocalizations.of(context).email_already_claimed);
|
||||||
} else {
|
} else {
|
||||||
showGenericErrorDialog(context);
|
showGenericErrorDialog(context);
|
||||||
}
|
}
|
||||||
|
@ -179,13 +180,14 @@ class UserService {
|
||||||
(route) => route.isFirst,
|
(route) => route.isFirst,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
showErrorDialog(
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
context, "oops", "verification failed, please try again");
|
"verification failed, please try again");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
_logger.severe(e);
|
_logger.severe(e);
|
||||||
showErrorDialog(context, "oops", "verification failed, please try again");
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
|
"verification failed, please try again");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,11 +219,13 @@ class UserService {
|
||||||
Bus.instance.fire(EmailChangedEvent());
|
Bus.instance.fire(EmailChangedEvent());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
showErrorDialog(context, "oops", "verification failed, please try again");
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
|
"verification failed, please try again");
|
||||||
} on DioError catch (e) {
|
} on DioError catch (e) {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
if (e.response != null && e.response.statusCode == 403) {
|
if (e.response != null && e.response.statusCode == 403) {
|
||||||
showErrorDialog(context, "oops", "this email is already in use");
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
|
AppLocalizations.of(context).email_already_claimed);
|
||||||
} else {
|
} else {
|
||||||
showErrorDialog(context, "incorrect code",
|
showErrorDialog(context, "incorrect code",
|
||||||
"authentication failed, please try again");
|
"authentication failed, please try again");
|
||||||
|
@ -229,7 +233,8 @@ class UserService {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
_logger.severe(e);
|
_logger.severe(e);
|
||||||
showErrorDialog(context, "oops", "verification failed, please try again");
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
|
"verification failed, please try again");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,7 +357,8 @@ class UserService {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
_logger.severe(e);
|
_logger.severe(e);
|
||||||
showErrorDialog(
|
showErrorDialog(
|
||||||
context, "oops", "authentication failed, please try again");
|
context, AppLocalizations.of(context).oops,
|
||||||
|
"authentication failed, please try again");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,12 +399,14 @@ class UserService {
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
showErrorDialog(
|
showErrorDialog(
|
||||||
context, "oops", "something went wrong, please try again");
|
context, AppLocalizations.of(context).oops,
|
||||||
|
"something went wrong, please try again");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
_logger.severe(e);
|
_logger.severe(e);
|
||||||
showErrorDialog(
|
showErrorDialog(
|
||||||
context, "oops", "something went wrong, please try again");
|
context, AppLocalizations.of(context).oops,
|
||||||
|
"something went wrong, please try again");
|
||||||
} finally {
|
} finally {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
}
|
}
|
||||||
|
@ -459,12 +467,14 @@ class UserService {
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
showErrorDialog(
|
showErrorDialog(
|
||||||
context, "oops", "something went wrong, please try again");
|
context, AppLocalizations.of(context).oops,
|
||||||
|
"something went wrong, please try again");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
_logger.severe(e);
|
_logger.severe(e);
|
||||||
showErrorDialog(
|
showErrorDialog(
|
||||||
context, "oops", "something went wrong, please try again");
|
context, AppLocalizations.of(context).oops,
|
||||||
|
"something went wrong, please try again");
|
||||||
} finally {
|
} finally {
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import 'package:photos/ui/web_page.dart';
|
||||||
import 'package:photos/utils/data_util.dart';
|
import 'package:photos/utils/data_util.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/email_util.dart';
|
import 'package:photos/utils/email_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class EmailEntryPage extends StatefulWidget {
|
class EmailEntryPage extends StatefulWidget {
|
||||||
EmailEntryPage({Key key}) : super(key: key);
|
EmailEntryPage({Key key}) : super(key: key);
|
||||||
|
@ -65,7 +66,7 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"sign up",
|
AppLocalizations.of(context).sign_up,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
letterSpacing: 0.6,
|
letterSpacing: 0.6,
|
||||||
|
@ -200,7 +201,7 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
|
||||||
height: 64,
|
height: 64,
|
||||||
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
||||||
child: button(
|
child: button(
|
||||||
"sign up",
|
AppLocalizations.of(context).sign_up,
|
||||||
onPressed: _isFormValid()
|
onPressed: _isFormValid()
|
||||||
? () {
|
? () {
|
||||||
if (!isValidEmail(_email)) {
|
if (!isValidEmail(_email)) {
|
||||||
|
|
|
@ -45,6 +45,7 @@ import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/navigation_util.dart';
|
import 'package:photos/utils/navigation_util.dart';
|
||||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||||
import 'package:uni_links/uni_links.dart';
|
import 'package:uni_links/uni_links.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class HomeWidget extends StatefulWidget {
|
class HomeWidget extends StatefulWidget {
|
||||||
const HomeWidget({Key key}) : super(key: key);
|
const HomeWidget({Key key}) : super(key: key);
|
||||||
|
@ -116,19 +117,19 @@ class _HomeWidgetState extends State<HomeWidget> {
|
||||||
_triggerLogoutEvent =
|
_triggerLogoutEvent =
|
||||||
Bus.instance.on<TriggerLogoutEvent>().listen((event) async {
|
Bus.instance.on<TriggerLogoutEvent>().listen((event) async {
|
||||||
AlertDialog alert = AlertDialog(
|
AlertDialog alert = AlertDialog(
|
||||||
title: Text("session expired"),
|
title: Text(AppLocalizations.of(context).auth_session_expired),
|
||||||
content: Text("please login again"),
|
content: Text(AppLocalizations.of(context).auth_login_again),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
child: Text(
|
child: Text(
|
||||||
"ok",
|
AppLocalizations.of(context).ok,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Theme.of(context).buttonColor,
|
color: Theme.of(context).buttonColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Navigator.of(context, rootNavigator: true).pop('dialog');
|
Navigator.of(context, rootNavigator: true).pop('dialog');
|
||||||
final dialog = createProgressDialog(context, "logging out...");
|
final dialog = createProgressDialog(context, AppLocalizations.of(context).auth_logging_out);
|
||||||
await dialog.show();
|
await dialog.show();
|
||||||
await Configuration.instance.logout();
|
await Configuration.instance.logout();
|
||||||
await dialog.hide();
|
await dialog.hide();
|
||||||
|
@ -388,7 +389,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
||||||
height: 64,
|
height: 64,
|
||||||
padding: const EdgeInsets.fromLTRB(60, 0, 60, 0),
|
padding: const EdgeInsets.fromLTRB(60, 0, 60, 0),
|
||||||
child: button(
|
child: button(
|
||||||
"start backup",
|
AppLocalizations.of(context).start_backup,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
lineHeight: 1.5,
|
lineHeight: 1.5,
|
||||||
padding: EdgeInsets.only(bottom: 4),
|
padding: EdgeInsets.only(bottom: 4),
|
||||||
|
@ -401,7 +402,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
||||||
context,
|
context,
|
||||||
BackupFolderSelectionPage(
|
BackupFolderSelectionPage(
|
||||||
shouldSelectAll: true,
|
shouldSelectAll: true,
|
||||||
buttonText: "start backup",
|
buttonText: AppLocalizations.of(context).start_backup,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import 'package:photos/ui/login_page.dart';
|
||||||
import 'package:photos/ui/password_entry_page.dart';
|
import 'package:photos/ui/password_entry_page.dart';
|
||||||
import 'package:photos/ui/password_reentry_page.dart';
|
import 'package:photos/ui/password_reentry_page.dart';
|
||||||
import 'package:photos/ui/payment/subscription.dart';
|
import 'package:photos/ui/payment/subscription.dart';
|
||||||
import 'package:photos/ui/payment/subscription_page.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class LandingPageWidget extends StatefulWidget {
|
class LandingPageWidget extends StatefulWidget {
|
||||||
const LandingPageWidget({Key key}) : super(key: key);
|
const LandingPageWidget({Key key}) : super(key: key);
|
||||||
|
@ -110,7 +110,7 @@ class _LandingPageWidgetState extends State<LandingPageWidget> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
|
@ -153,7 +153,7 @@ class _LandingPageWidgetState extends State<LandingPageWidget> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"sign up",
|
AppLocalizations.of(context).sign_up,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:photos/ui/common_elements.dart';
|
||||||
import 'package:photos/ui/web_page.dart';
|
import 'package:photos/ui/web_page.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/email_util.dart';
|
import 'package:photos/utils/email_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class LoginPage extends StatefulWidget {
|
class LoginPage extends StatefulWidget {
|
||||||
LoginPage({Key key}) : super(key: key);
|
LoginPage({Key key}) : super(key: key);
|
||||||
|
@ -35,7 +36,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
letterSpacing: 0.6,
|
letterSpacing: 0.6,
|
||||||
|
@ -137,7 +138,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
height: 64,
|
height: 64,
|
||||||
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
||||||
child: button(
|
child: button(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
onPressed: _email != null && _email.isNotEmpty
|
onPressed: _email != null && _email.isNotEmpty
|
||||||
? () {
|
? () {
|
||||||
if (!isValidEmail(_email)) {
|
if (!isValidEmail(_email)) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:photos/events/subscription_purchased_event.dart';
|
||||||
import 'package:photos/ui/common_elements.dart';
|
import 'package:photos/ui/common_elements.dart';
|
||||||
import 'package:photos/ui/recovery_page.dart';
|
import 'package:photos/ui/recovery_page.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class PasswordReentryPage extends StatefulWidget {
|
class PasswordReentryPage extends StatefulWidget {
|
||||||
PasswordReentryPage({Key key}) : super(key: key);
|
PasswordReentryPage({Key key}) : super(key: key);
|
||||||
|
@ -92,7 +93,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 64,
|
height: 64,
|
||||||
child: button(
|
child: button(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
onPressed: _passwordController.text.isNotEmpty
|
onPressed: _passwordController.text.isNotEmpty
|
||||||
? () async {
|
? () async {
|
||||||
|
|
|
@ -18,6 +18,7 @@ import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/email_util.dart';
|
import 'package:photos/utils/email_util.dart';
|
||||||
import 'package:photos/utils/share_util.dart';
|
import 'package:photos/utils/share_util.dart';
|
||||||
import 'package:photos/utils/toast_util.dart';
|
import 'package:photos/utils/toast_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class SharingDialog extends StatefulWidget {
|
class SharingDialog extends StatefulWidget {
|
||||||
final Collection collection;
|
final Collection collection;
|
||||||
|
@ -156,11 +157,12 @@ class _SharingDialogState extends State<SharingDialog> {
|
||||||
"please enter a valid email address.");
|
"please enter a valid email address.");
|
||||||
return;
|
return;
|
||||||
} else if (email == Configuration.instance.getEmail()) {
|
} else if (email == Configuration.instance.getEmail()) {
|
||||||
showErrorDialog(context, "oops", "you cannot share with yourself");
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
|
"you cannot share with yourself");
|
||||||
return;
|
return;
|
||||||
} else if (widget.collection.sharees.any((user) => user.email == email)) {
|
} else if (widget.collection.sharees.any((user) => user.email == email)) {
|
||||||
showErrorDialog(
|
showErrorDialog(context, AppLocalizations.of(context).oops,
|
||||||
context, "oops", "you're already sharing this with " + email);
|
"you're already sharing this with " + email);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (publicKey == null) {
|
if (publicKey == null) {
|
||||||
|
|
|
@ -337,6 +337,11 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.0"
|
||||||
|
flutter_localizations:
|
||||||
|
dependency: "direct main"
|
||||||
|
description: flutter
|
||||||
|
source: sdk
|
||||||
|
version: "0.0.0"
|
||||||
flutter_native_splash:
|
flutter_native_splash:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -39,6 +39,8 @@ dependencies:
|
||||||
path: thirdparty/extended_image
|
path: thirdparty/extended_image
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
flutter_localizations:
|
||||||
|
sdk: flutter
|
||||||
flutter_cache_manager: ^3.0.1
|
flutter_cache_manager: ^3.0.1
|
||||||
flutter_easyloading: ^3.0.0
|
flutter_easyloading: ^3.0.0
|
||||||
flutter_email_sender: ^5.0.0
|
flutter_email_sender: ^5.0.0
|
||||||
|
@ -144,6 +146,9 @@ flutter:
|
||||||
# the material Icons class.
|
# the material Icons class.
|
||||||
uses-material-design: true
|
uses-material-design: true
|
||||||
|
|
||||||
|
# Flutter localization
|
||||||
|
generate: true
|
||||||
|
|
||||||
# To add assets to your application, add an assets section, like this:
|
# To add assets to your application, add an assets section, like this:
|
||||||
# assets:
|
# assets:
|
||||||
# - images/a_dot_burr.jpeg
|
# - images/a_dot_burr.jpeg
|
||||||
|
|
Loading…
Reference in a new issue