feat(app): 完成 P0 钱包解锁、下载落盘与手机号登录

This commit is contained in:
Zhou Weidong committed 2026-10-19 23:46:47 +08:00
1 parent de941c841c
commit 136ee74618
47 files changed
+3264 -70

No files matched your search

+32 -1
View File
@@ -476,5 +476,36 @@
"accountCancelDeactivation": "Cancel deletion request",
"accountCancelSucceeded": "Deletion request cancelled.",
"accountDeactivateFailed": "Could not request account deletion.",
"accountCancelFailed": "Could not cancel the deletion request."
"accountCancelFailed": "Could not cancel the deletion request.",
"authPhoneTitle": "Continue with phone",
"authPhoneSignUp": "Create an account with phone",
"authPhoneLabel": "Phone number",
"authPhoneHint": "0812 3456 7890",
"authPhoneInvalid": "Enter a valid phone number",
"authCodeLabel": "Verification code",
"authCodeHint": "6-digit code",
"authCodeRequired": "Enter the verification code",
"authSendCode": "Send code",
"authResendCode": "Resend in {seconds}s",
"@authResendCode": { "placeholders": { "seconds": { "type": "int" } } },
"authCodeSent": "Verification code sent.",
"authPhoneSignInAction": "Sign in",
"authPhoneSignUpAction": "Create account",
"unlockWithCoins": "Unlock with coins",
"unlockFailed": "Could not unlock this episode.",
"wallet": "Wallet",
"coinBalance": "Coin balance",
"coinLedger": "Coin activity",
"noCoinLedger": "No coin activity yet.",
"walletLoadFailed": "Could not load your wallet.",
"walletBalanceShort": "{coins} coins",
"@walletBalanceShort": { "placeholders": { "coins": { "type": "int" } } },
"insufficientCoins": "Not enough coins.",
"rechargeUnavailable": "Top-up is not available yet.",
"totalRecharged": "Total recharged",
"totalConsumed": "Total spent",
"ledgerUnlock": "Episode unlock",
"ledgerRecharge": "Coin top-up",
"ledgerRefund": "Refund",
"ledgerAdjustment": "Adjustment"
}
+30 -1
View File
@@ -476,5 +476,34 @@
"accountCancelDeactivation": "Batalkan permintaan penghapusan",
"accountCancelSucceeded": "Permintaan penghapusan dibatalkan.",
"accountDeactivateFailed": "Permintaan penghapusan gagal dikirim.",
"accountCancelFailed": "Permintaan penghapusan gagal dibatalkan."
"accountCancelFailed": "Permintaan penghapusan gagal dibatalkan.",
"authPhoneTitle": "Lanjutkan dengan nomor HP",
"authPhoneSignUp": "Buat akun dengan nomor HP",
"authPhoneLabel": "Nomor HP",
"authPhoneHint": "0812 3456 7890",
"authPhoneInvalid": "Masukkan nomor HP yang valid",
"authCodeLabel": "Kode verifikasi",
"authCodeHint": "Kode 6 digit",
"authCodeRequired": "Masukkan kode verifikasi",
"authSendCode": "Kirim kode",
"authResendCode": "Kirim ulang dalam {seconds} detik",
"authCodeSent": "Kode verifikasi telah dikirim.",
"authPhoneSignInAction": "Masuk",
"authPhoneSignUpAction": "Buat akun",
"unlockWithCoins": "Buka dengan koin",
"unlockFailed": "Gagal membuka episode ini.",
"wallet": "Dompet",
"coinBalance": "Saldo koin",
"coinLedger": "Riwayat koin",
"noCoinLedger": "Belum ada aktivitas koin.",
"walletLoadFailed": "Gagal memuat dompet.",
"walletBalanceShort": "{coins} koin",
"insufficientCoins": "Koin tidak cukup.",
"rechargeUnavailable": "Isi ulang belum tersedia.",
"totalRecharged": "Total isi ulang",
"totalConsumed": "Total pemakaian",
"ledgerUnlock": "Buka episode",
"ledgerRecharge": "Isi ulang koin",
"ledgerRefund": "Pengembalian",
"ledgerAdjustment": "Penyesuaian"
}
+174
View File
@@ -2121,6 +2121,180 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Could not cancel the deletion request.'**
String get accountCancelFailed;
/// No description provided for @authPhoneTitle.
///
/// In en, this message translates to:
/// **'Continue with phone'**
String get authPhoneTitle;
/// No description provided for @authPhoneSignUp.
///
/// In en, this message translates to:
/// **'Create an account with phone'**
String get authPhoneSignUp;
/// No description provided for @authPhoneLabel.
///
/// In en, this message translates to:
/// **'Phone number'**
String get authPhoneLabel;
/// No description provided for @authPhoneHint.
///
/// In en, this message translates to:
/// **'0812 3456 7890'**
String get authPhoneHint;
/// No description provided for @authPhoneInvalid.
///
/// In en, this message translates to:
/// **'Enter a valid phone number'**
String get authPhoneInvalid;
/// No description provided for @authCodeLabel.
///
/// In en, this message translates to:
/// **'Verification code'**
String get authCodeLabel;
/// No description provided for @authCodeHint.
///
/// In en, this message translates to:
/// **'6-digit code'**
String get authCodeHint;
/// No description provided for @authCodeRequired.
///
/// In en, this message translates to:
/// **'Enter the verification code'**
String get authCodeRequired;
/// No description provided for @authSendCode.
///
/// In en, this message translates to:
/// **'Send code'**
String get authSendCode;
/// No description provided for @authResendCode.
///
/// In en, this message translates to:
/// **'Resend in {seconds}s'**
String authResendCode(int seconds);
/// No description provided for @authCodeSent.
///
/// In en, this message translates to:
/// **'Verification code sent.'**
String get authCodeSent;
/// No description provided for @authPhoneSignInAction.
///
/// In en, this message translates to:
/// **'Sign in'**
String get authPhoneSignInAction;
/// No description provided for @authPhoneSignUpAction.
///
/// In en, this message translates to:
/// **'Create account'**
String get authPhoneSignUpAction;
/// No description provided for @unlockWithCoins.
///
/// In en, this message translates to:
/// **'Unlock with coins'**
String get unlockWithCoins;
/// No description provided for @unlockFailed.
///
/// In en, this message translates to:
/// **'Could not unlock this episode.'**
String get unlockFailed;
/// No description provided for @wallet.
///
/// In en, this message translates to:
/// **'Wallet'**
String get wallet;
/// No description provided for @coinBalance.
///
/// In en, this message translates to:
/// **'Coin balance'**
String get coinBalance;
/// No description provided for @coinLedger.
///
/// In en, this message translates to:
/// **'Coin activity'**
String get coinLedger;
/// No description provided for @noCoinLedger.
///
/// In en, this message translates to:
/// **'No coin activity yet.'**
String get noCoinLedger;
/// No description provided for @walletLoadFailed.
///
/// In en, this message translates to:
/// **'Could not load your wallet.'**
String get walletLoadFailed;
/// No description provided for @walletBalanceShort.
///
/// In en, this message translates to:
/// **'{coins} coins'**
String walletBalanceShort(int coins);
/// No description provided for @insufficientCoins.
///
/// In en, this message translates to:
/// **'Not enough coins.'**
String get insufficientCoins;
/// No description provided for @rechargeUnavailable.
///
/// In en, this message translates to:
/// **'Top-up is not available yet.'**
String get rechargeUnavailable;
/// No description provided for @totalRecharged.
///
/// In en, this message translates to:
/// **'Total recharged'**
String get totalRecharged;
/// No description provided for @totalConsumed.
///
/// In en, this message translates to:
/// **'Total spent'**
String get totalConsumed;
/// No description provided for @ledgerUnlock.
///
/// In en, this message translates to:
/// **'Episode unlock'**
String get ledgerUnlock;
/// No description provided for @ledgerRecharge.
///
/// In en, this message translates to:
/// **'Coin top-up'**
String get ledgerRecharge;
/// No description provided for @ledgerRefund.
///
/// In en, this message translates to:
/// **'Refund'**
String get ledgerRefund;
/// No description provided for @ledgerAdjustment.
///
/// In en, this message translates to:
/// **'Adjustment'**
String get ledgerAdjustment;
}
class _AppLocalizationsDelegate
+91
View File
@@ -1083,4 +1083,95 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get accountCancelFailed => 'Could not cancel the deletion request.';
@override
String get authPhoneTitle => 'Continue with phone';
@override
String get authPhoneSignUp => 'Create an account with phone';
@override
String get authPhoneLabel => 'Phone number';
@override
String get authPhoneHint => '0812 3456 7890';
@override
String get authPhoneInvalid => 'Enter a valid phone number';
@override
String get authCodeLabel => 'Verification code';
@override
String get authCodeHint => '6-digit code';
@override
String get authCodeRequired => 'Enter the verification code';
@override
String get authSendCode => 'Send code';
@override
String authResendCode(int seconds) {
return 'Resend in ${seconds}s';
}
@override
String get authCodeSent => 'Verification code sent.';
@override
String get authPhoneSignInAction => 'Sign in';
@override
String get authPhoneSignUpAction => 'Create account';
@override
String get unlockWithCoins => 'Unlock with coins';
@override
String get unlockFailed => 'Could not unlock this episode.';
@override
String get wallet => 'Wallet';
@override
String get coinBalance => 'Coin balance';
@override
String get coinLedger => 'Coin activity';
@override
String get noCoinLedger => 'No coin activity yet.';
@override
String get walletLoadFailed => 'Could not load your wallet.';
@override
String walletBalanceShort(int coins) {
return '$coins coins';
}
@override
String get insufficientCoins => 'Not enough coins.';
@override
String get rechargeUnavailable => 'Top-up is not available yet.';
@override
String get totalRecharged => 'Total recharged';
@override
String get totalConsumed => 'Total spent';
@override
String get ledgerUnlock => 'Episode unlock';
@override
String get ledgerRecharge => 'Coin top-up';
@override
String get ledgerRefund => 'Refund';
@override
String get ledgerAdjustment => 'Adjustment';
}
+91
View File
@@ -1082,4 +1082,95 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get accountCancelFailed => 'Permintaan penghapusan gagal dibatalkan.';
@override
String get authPhoneTitle => 'Lanjutkan dengan nomor HP';
@override
String get authPhoneSignUp => 'Buat akun dengan nomor HP';
@override
String get authPhoneLabel => 'Nomor HP';
@override
String get authPhoneHint => '0812 3456 7890';
@override
String get authPhoneInvalid => 'Masukkan nomor HP yang valid';
@override
String get authCodeLabel => 'Kode verifikasi';
@override
String get authCodeHint => 'Kode 6 digit';
@override
String get authCodeRequired => 'Masukkan kode verifikasi';
@override
String get authSendCode => 'Kirim kode';
@override
String authResendCode(int seconds) {
return 'Kirim ulang dalam $seconds detik';
}
@override
String get authCodeSent => 'Kode verifikasi telah dikirim.';
@override
String get authPhoneSignInAction => 'Masuk';
@override
String get authPhoneSignUpAction => 'Buat akun';
@override
String get unlockWithCoins => 'Buka dengan koin';
@override
String get unlockFailed => 'Gagal membuka episode ini.';
@override
String get wallet => 'Dompet';
@override
String get coinBalance => 'Saldo koin';
@override
String get coinLedger => 'Riwayat koin';
@override
String get noCoinLedger => 'Belum ada aktivitas koin.';
@override
String get walletLoadFailed => 'Gagal memuat dompet.';
@override
String walletBalanceShort(int coins) {
return '$coins koin';
}
@override
String get insufficientCoins => 'Koin tidak cukup.';
@override
String get rechargeUnavailable => 'Isi ulang belum tersedia.';
@override
String get totalRecharged => 'Total isi ulang';
@override
String get totalConsumed => 'Total pemakaian';
@override
String get ledgerUnlock => 'Buka episode';
@override
String get ledgerRecharge => 'Isi ulang koin';
@override
String get ledgerRefund => 'Pengembalian';
@override
String get ledgerAdjustment => 'Penyesuaian';
}
+91
View File
@@ -1061,4 +1061,95 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get accountCancelFailed => '注销申请撤销失败。';
@override
String get authPhoneTitle => '使用手机号继续';
@override
String get authPhoneSignUp => '使用手机号注册';
@override
String get authPhoneLabel => '手机号';
@override
String get authPhoneHint => '0812 3456 7890';
@override
String get authPhoneInvalid => '请输入有效手机号';
@override
String get authCodeLabel => '验证码';
@override
String get authCodeHint => '6 位验证码';
@override
String get authCodeRequired => '请输入验证码';
@override
String get authSendCode => '发送验证码';
@override
String authResendCode(int seconds) {
return '$seconds 秒后重发';
}
@override
String get authCodeSent => '验证码已发送。';
@override
String get authPhoneSignInAction => '登录';
@override
String get authPhoneSignUpAction => '注册';
@override
String get unlockWithCoins => '金币解锁';
@override
String get unlockFailed => '解锁失败,请稍后重试。';
@override
String get wallet => '钱包';
@override
String get coinBalance => '金币余额';
@override
String get coinLedger => '金币流水';
@override
String get noCoinLedger => '暂无金币流水。';
@override
String get walletLoadFailed => '钱包加载失败。';
@override
String walletBalanceShort(int coins) {
return '$coins 金币';
}
@override
String get insufficientCoins => '金币余额不足。';
@override
String get rechargeUnavailable => '充值暂未开放。';
@override
String get totalRecharged => '累计充值';
@override
String get totalConsumed => '累计消费';
@override
String get ledgerUnlock => '剧集解锁';
@override
String get ledgerRecharge => '金币充值';
@override
String get ledgerRefund => '退款';
@override
String get ledgerAdjustment => '余额调整';
}
+30 -1
View File
@@ -438,5 +438,34 @@
"accountCancelDeactivation": "撤销注销申请",
"accountCancelSucceeded": "注销申请已撤销。",
"accountDeactivateFailed": "注销申请提交失败。",
"accountCancelFailed": "注销申请撤销失败。"
"accountCancelFailed": "注销申请撤销失败。",
"authPhoneTitle": "使用手机号继续",
"authPhoneSignUp": "使用手机号注册",
"authPhoneLabel": "手机号",
"authPhoneHint": "0812 3456 7890",
"authPhoneInvalid": "请输入有效手机号",
"authCodeLabel": "验证码",
"authCodeHint": "6 位验证码",
"authCodeRequired": "请输入验证码",
"authSendCode": "发送验证码",
"authResendCode": "{seconds} 秒后重发",
"authCodeSent": "验证码已发送。",
"authPhoneSignInAction": "登录",
"authPhoneSignUpAction": "注册",
"unlockWithCoins": "金币解锁",
"unlockFailed": "解锁失败,请稍后重试。",
"wallet": "钱包",
"coinBalance": "金币余额",
"coinLedger": "金币流水",
"noCoinLedger": "暂无金币流水。",
"walletLoadFailed": "钱包加载失败。",
"walletBalanceShort": "{coins} 金币",
"insufficientCoins": "金币余额不足。",
"rechargeUnavailable": "充值暂未开放。",
"totalRecharged": "累计充值",
"totalConsumed": "累计消费",
"ledgerUnlock": "剧集解锁",
"ledgerRecharge": "金币充值",
"ledgerRefund": "退款",
"ledgerAdjustment": "余额调整"
}