diff --git a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
index 50277a72b..02c73fa12 100644
--- a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
+++ b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
@@ -20,12 +20,16 @@ class HtmlContentViewerOnWeb extends StatefulWidget {
/// Handler for mailto: links
final Function(Uri?)? mailtoDelegate;
+ // if widthContent is bigger than width of htmlContent, set this to true let widget able to resize to width of htmlContent
+ final bool allowResizeToDocumentSize;
+
const HtmlContentViewerOnWeb({
Key? key,
required this.contentHtml,
required this.widthContent,
required this.heightContent,
required this.controller,
+ this.allowResizeToDocumentSize = true,
this.mailtoDelegate,
}) : super(key: key);
@@ -58,6 +62,24 @@ class _HtmlContentViewerOnWebState extends State {
_setUpWeb();
}
+ @override
+ void didUpdateWidget(covariant HtmlContentViewerOnWeb oldWidget) {
+ super.didUpdateWidget(oldWidget);
+ if (widget.contentHtml != oldWidget.contentHtml) {
+ createdViewId = _getRandString(10);
+ widget.controller.viewId = createdViewId;
+ _setUpWeb();
+ }
+
+ if (widget.heightContent != oldWidget.heightContent) {
+ actualHeight = widget.heightContent;
+ }
+
+ if (widget.widthContent != oldWidget.widthContent) {
+ actualWidth = widget.widthContent;
+ }
+ }
+
String _getRandString(int len) {
var random = math.Random.secure();
var values = List.generate(len, (i) => random.nextInt(255));
@@ -195,7 +217,7 @@ class _HtmlContentViewerOnWebState extends State {
if (data['type'] != null && data['type'].contains('toDart: htmlWidth') && data['view'] == createdViewId) {
final docWidth = data['width'] ?? actualWidth;
if (docWidth != null && mounted) {
- if (docWidth > minWidth) {
+ if (docWidth > minWidth && widget.allowResizeToDocumentSize) {
setState(() {
actualWidth = docWidth;
});
diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder_web.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder_web.dart
new file mode 100644
index 000000000..c19b5a038
--- /dev/null
+++ b/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder_web.dart
@@ -0,0 +1,82 @@
+import 'package:core/presentation/extensions/color_extension.dart';
+import 'package:flutter/material.dart';
+import 'package:get/get_state_manager/get_state_manager.dart';
+import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart';
+import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_of_identity_builder.dart';
+
+import 'identity_list_tile_builder.dart';
+
+class IdentitiesRadioListBuilder extends StatefulWidget {
+ const IdentitiesRadioListBuilder({
+ Key? key,
+ required this.controller,
+ }) : super(key: key);
+
+ final IdentitiesController controller;
+
+ @override
+ State createState() => _IdentitiesRadioListBuilderState();
+}
+
+class _IdentitiesRadioListBuilderState extends State {
+ int? selected;
+ late final allIdentities = widget.controller.listAllIdentities.value;
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ height: 256,
+ foregroundDecoration: BoxDecoration(
+ border: Border.all(color: AppColor.colorBorderIdentityInfo, width: 1),
+ borderRadius: const BorderRadius.all(Radius.circular(16.0)),
+ ),
+ child: Obx(() => Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ if(widget.controller.isSignatureShow())...[
+ _buildListViewContainer(),
+ Expanded(
+ child: Obx(() => SignatureOfIdentityBuilder(identity: widget.controller.identitySelected.value!)),
+ )
+ ] else
+ Expanded(child: _buildListViewContainer())
+ ],
+ )),
+ );
+ }
+
+ Widget _buildListViewContainer() {
+ return Container(
+ key: const Key('identities_checkbox_list'),
+ width: 320,
+ foregroundDecoration: BoxDecoration(
+ gradient: LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [0, 0.5, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 1].map((e)
+ => Colors.white.withOpacity(e.toDouble())).toList(),
+ stops: const [0.8, 0.82, 0.84, 0.86, 0.88, 0.90, 0.92, 0.94, 0.96, 0.98, 1],// Gradient from https://learnui.design/tools/gradient-generator.html
+ tileMode: TileMode.mirror,
+ ),
+ border: widget.controller.isSignatureShow() ? const Border(right: BorderSide(color: AppColor.colorBorderIdentityInfo)): null,
+ ),
+ padding: const EdgeInsets.only(left: 12.0, bottom: 12.0, top: 12.0, right: 4.0),
+ child: Scrollbar(
+ controller: ScrollController(),
+ radius: const Radius.circular(5.0),
+ thickness: 2.0,
+ child: Obx(() => ListView.builder(
+ padding: const EdgeInsets.only(right: 12.0),
+ itemCount: widget.controller.listAllIdentities.value.length,
+ itemBuilder: ((context, index) {
+ return IdentityListTileBuilder(
+ controller: widget.controller,
+ index: index,
+ selected: widget.controller.selectedIndex.value,
+ );
+ }),
+ ),
+ ))
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/features/manage_account/presentation/profiles/profiles_view.dart b/lib/features/manage_account/presentation/profiles/profiles_view.dart
index 142b695e0..f0f3a6c80 100644
--- a/lib/features/manage_account/presentation/profiles/profiles_view.dart
+++ b/lib/features/manage_account/presentation/profiles/profiles_view.dart
@@ -3,9 +3,9 @@ import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
-import 'package:tmail_ui_user/features/manage_account/presentation/model/profiles_tab_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_controller.dart';
+import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ProfilesView extends GetWidget {
@@ -17,60 +17,52 @@ class ProfilesView extends GetWidget {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: SettingsUtils.getBackgroundColor(context, _responsiveUtils),
- body: Container(
- margin: _responsiveUtils.isWebDesktop(context)
- ? const EdgeInsets.all(16)
- : EdgeInsets.symmetric(horizontal: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)),
- color: _responsiveUtils.isWebDesktop(context) ? null : Colors.white,
- decoration: _responsiveUtils.isWebDesktop(context)
- ? BoxDecoration(
- borderRadius: BorderRadius.circular(16),
- border: Border.all(color: AppColor.colorBorderSettingContentWeb, width: 1),
- color: Colors.white)
- : null,
- child: ClipRRect(
- borderRadius: BorderRadius.circular(
- _responsiveUtils.isWebDesktop(context) ? 16 : 0),
- child: Padding(
- padding: const EdgeInsets.only(left: 10, right: 10, bottom: 10),
- child: DefaultTabController(
- initialIndex: 0,
- length: 1,
- child: Scaffold(
- appBar: TabBar(
- unselectedLabelColor: AppColor.colorTextButtonHeaderThread,
- unselectedLabelStyle: const TextStyle(
- fontSize: 15,
- fontWeight: FontWeight.normal,
- color: AppColor.colorTextButtonHeaderThread),
- labelStyle: const TextStyle(
- fontSize: 15,
- fontWeight: FontWeight.w500,
- color: AppColor.primaryColor),
- labelColor: AppColor.primaryColor,
- indicatorSize: TabBarIndicatorSize.label,
- isScrollable: true,
- indicator: const CustomIndicator(
- indicatorHeight: 4,
- indicatorColor: AppColor.primaryColor,
- indicatorSize: CustomIndicatorSize.full),
- onTap: (index) {},
- tabs: [
- Tab(text: ProfilesTabType.identities.getName(context)),
- ]),
- body: Column(children: [
- const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
- Expanded(child: TabBarView(
- children: [
- IdentitiesView(),
- ],
- ))
- ]),
- )
- ),
- ),
- ),
+ body: ResponsiveWidget(
+ responsiveUtils: _responsiveUtils,
+ mobile: IdentitiesView(),
+ desktop: _buildProfilesWeb(context))
+ );
+ }
+
+ Widget _buildProfilesWeb(BuildContext context) {
+ return Container(
+ decoration: BoxDecoration(
+ borderRadius: const BorderRadius.all(Radius.circular(16.0)),
+ border: Border.all(color: AppColor.colorBorderIdentityInfo),
+ color: Colors.white,
+ ),
+ margin: const EdgeInsets.all(16.0),
+ padding: const EdgeInsets.all(16.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ for(var widget in _buildProfilesTitle(context))
+ widget,
+ const Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2),
+ Expanded(child: IdentitiesView()),
+ ],
),
);
}
+
+ List _buildProfilesTitle(BuildContext context) {
+ return [
+ Text(
+ AppLocalizations.of(context).profiles.inCaps,
+ style: const TextStyle(
+ fontWeight: FontWeight.w700,
+ fontSize: 20,
+ fontFamily: 'Inter',
+ color: Colors.black)),
+ const SizedBox(height: 4.0),
+ Text(
+ AppLocalizations.of(context).profiles_description,
+ style: const TextStyle(
+ fontSize: 16,
+ fontWeight: FontWeight.normal,
+ color: AppColor.colorContentEmail),
+ ),
+ const SizedBox(height: 16.0),
+ ];
+ }
}
\ No newline at end of file