encrypt_secret_screen.dart 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import 'package:appflowy/generated/locale_keys.g.dart';
  2. import 'package:appflowy/startup/startup.dart';
  3. import 'package:appflowy/user/presentation/helpers/helpers.dart';
  4. import 'package:appflowy/workspace/presentation/widgets/dialogs.dart';
  5. import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart';
  6. import 'package:easy_localization/easy_localization.dart';
  7. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  8. import 'package:flowy_infra_ui/widget/buttons/secondary_button.dart';
  9. import 'package:flutter/material.dart';
  10. import 'package:flutter_bloc/flutter_bloc.dart';
  11. import '../../application/encrypt_secret_bloc.dart';
  12. class EncryptSecretScreen extends StatefulWidget {
  13. static const routeName = "/EncryptSecretScreen";
  14. final UserProfilePB user;
  15. const EncryptSecretScreen({required this.user, super.key});
  16. @override
  17. State<EncryptSecretScreen> createState() => _EncryptSecretScreenState();
  18. }
  19. class _EncryptSecretScreenState extends State<EncryptSecretScreen> {
  20. final TextEditingController _textEditingController = TextEditingController();
  21. @override
  22. Widget build(BuildContext context) {
  23. return Scaffold(
  24. body: BlocProvider(
  25. create: (context) => EncryptSecretBloc(user: widget.user),
  26. child: MultiBlocListener(
  27. listeners: [
  28. BlocListener<EncryptSecretBloc, EncryptSecretState>(
  29. listenWhen: (previous, current) =>
  30. previous.isSignOut != current.isSignOut,
  31. listener: (context, state) async {
  32. if (state.isSignOut) {
  33. await runAppFlowy();
  34. }
  35. },
  36. ),
  37. BlocListener<EncryptSecretBloc, EncryptSecretState>(
  38. listenWhen: (previous, current) =>
  39. previous.successOrFail != current.successOrFail,
  40. listener: (context, state) async {
  41. state.successOrFail.fold(
  42. () {},
  43. (result) {
  44. result.fold(
  45. (unit) async {
  46. await runAppFlowy();
  47. },
  48. (error) {
  49. handleOpenWorkspaceError(context, error);
  50. },
  51. );
  52. },
  53. );
  54. },
  55. ),
  56. ],
  57. child: BlocBuilder<EncryptSecretBloc, EncryptSecretState>(
  58. builder: (context, state) {
  59. final indicator = state.loadingState?.when(
  60. loading: () => const Center(
  61. child: CircularProgressIndicator.adaptive(),
  62. ),
  63. finish: (result) => const SizedBox.shrink(),
  64. ) ??
  65. const SizedBox.shrink();
  66. return Center(
  67. child: SizedBox(
  68. width: 300,
  69. height: 160,
  70. child: Column(
  71. crossAxisAlignment: CrossAxisAlignment.start,
  72. children: [
  73. Opacity(
  74. opacity: 0.6,
  75. child: FlowyText.medium(
  76. "${LocaleKeys.settings_menu_inputEncryptPrompt.tr()} ${widget.user.email}",
  77. fontSize: 14,
  78. maxLines: 10,
  79. ),
  80. ),
  81. const VSpace(6),
  82. SizedBox(
  83. width: 300,
  84. child: FlowyTextField(
  85. controller: _textEditingController,
  86. hintText:
  87. LocaleKeys.settings_menu_inputTextFieldHint.tr(),
  88. onChanged: (p0) {},
  89. ),
  90. ),
  91. OkCancelButton(
  92. alignment: MainAxisAlignment.end,
  93. onOkPressed: () {
  94. context.read<EncryptSecretBloc>().add(
  95. EncryptSecretEvent.setEncryptSecret(
  96. _textEditingController.text,
  97. ),
  98. );
  99. },
  100. onCancelPressed: () {
  101. context.read<EncryptSecretBloc>().add(
  102. const EncryptSecretEvent.cancelInputSecret(),
  103. );
  104. },
  105. mode: TextButtonMode.normal,
  106. ),
  107. const VSpace(6),
  108. indicator,
  109. ],
  110. ),
  111. ),
  112. );
  113. },
  114. ),
  115. ),
  116. ),
  117. );
  118. }
  119. }