From e7896adbd82785479f92a552f2c912dfdf5047b8 Mon Sep 17 00:00:00 2001 From: Dominique FIUME Date: Tue, 19 Aug 2025 13:53:36 +0200 Subject: [PATCH] fixing accent removal --- lib/src/country_code.dart | 14 +++++++----- lib/src/selection_dialog.dart | 41 +++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/lib/src/country_code.dart b/lib/src/country_code.dart index cf10c9a..069f0e8 100644 --- a/lib/src/country_code.dart +++ b/lib/src/country_code.dart @@ -1,5 +1,4 @@ import 'package:collection/collection.dart' show IterableExtension; -import 'package:diacritic/diacritic.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart' show kDebugMode; @@ -45,7 +44,9 @@ class CountryCode { try { return CountryCode.fromCountryCode(countryCode); } catch (e) { - if (kDebugMode) print('Failed to recognize country from countryCode: $countryCode'); + if (kDebugMode) { + print('Failed to recognize country from countryCode: $countryCode'); + } return null; } } @@ -61,20 +62,21 @@ class CountryCode { try { return CountryCode.fromDialCode(dialCode); } catch (e) { - if (kDebugMode) print('Failed to recognize country from dialCode: $dialCode'); + if (kDebugMode) { + print('Failed to recognize country from dialCode: $dialCode'); + } return null; } } CountryCode localize(BuildContext context) { final nam = CountryLocalizations.of(context)?.translate(code) ?? name; - return this - ..name = nam == null? name : removeDiacritics(nam); + return this..name = nam ?? name; } factory CountryCode.fromJson(Map json) { return CountryCode( - name: removeDiacritics(json['name']), + name: json['name'], code: json['code'], dialCode: json['dial_code'], flagUri: 'flags/${json['code'].toLowerCase()}.png', diff --git a/lib/src/selection_dialog.dart b/lib/src/selection_dialog.dart index 46cc466..050d359 100644 --- a/lib/src/selection_dialog.dart +++ b/lib/src/selection_dialog.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:diacritic/diacritic.dart'; import 'country_code.dart'; import 'country_localizations.dart'; @@ -50,7 +51,7 @@ class SelectionDialog extends StatefulWidget { InputDecoration searchDecoration = const InputDecoration(), this.searchStyle, this.textStyle, - required this.topBarPadding, + required this.topBarPadding, this.headerText, this.boxDecoration, this.showFlag, @@ -62,9 +63,12 @@ class SelectionDialog extends StatefulWidget { this.hideSearch = false, this.hideCloseIcon = false, this.closeIcon, - this.dialogItemPadding = const EdgeInsets.symmetric(horizontal: 24, vertical: 8), + this.dialogItemPadding = + const EdgeInsets.symmetric(horizontal: 24, vertical: 8), this.searchPadding = const EdgeInsets.symmetric(horizontal: 24), - }) : searchDecoration = searchDecoration.prefixIcon == null ? searchDecoration.copyWith(prefixIcon: const Icon(Icons.search)) : searchDecoration, + }) : searchDecoration = searchDecoration.prefixIcon == null + ? searchDecoration.copyWith(prefixIcon: const Icon(Icons.search)) + : searchDecoration, super(key: key); @override @@ -81,7 +85,8 @@ class _SelectionDialogState extends State { child: Container( clipBehavior: Clip.hardEdge, width: widget.size?.width ?? MediaQuery.of(context).size.width, - height: widget.size?.height ?? MediaQuery.of(context).size.height * 0.85, + height: + widget.size?.height ?? MediaQuery.of(context).size.height * 0.85, decoration: widget.boxDecoration ?? BoxDecoration( color: widget.backgroundColor ?? Colors.white, @@ -100,7 +105,9 @@ class _SelectionDialogState extends State { crossAxisAlignment: CrossAxisAlignment.end, children: [ Padding( - padding:!widget.hideHeaderText? widget.topBarPadding: EdgeInsets.zero, + padding: !widget.hideHeaderText + ? widget.topBarPadding + : EdgeInsets.zero, child: Row( mainAxisAlignment: widget.headerAlignment, children: [ @@ -177,11 +184,14 @@ class _SelectionDialogState extends State { if (widget.showFlag!) Flexible( child: Container( - margin: Directionality.of(context) == TextDirection.ltr // Here Adding padding depending on the locale language direction + margin: Directionality.of(context) == + TextDirection + .ltr // Here Adding padding depending on the locale language direction ? const EdgeInsets.only(right: 16.0) : const EdgeInsets.only(left: 16.0), decoration: widget.flagDecoration, - clipBehavior: widget.flagDecoration == null ? Clip.none : Clip.hardEdge, + clipBehavior: + widget.flagDecoration == null ? Clip.none : Clip.hardEdge, child: Image.asset( e.flagUri!, package: 'country_code_picker', @@ -192,7 +202,9 @@ class _SelectionDialogState extends State { Expanded( flex: 4, child: Text( - widget.showCountryOnly! ? e.toCountryStringOnly() : e.toLongString(), + widget.showCountryOnly! + ? e.toCountryStringOnly() + : e.toLongString(), overflow: TextOverflow.fade, style: widget.textStyle, ), @@ -208,7 +220,8 @@ class _SelectionDialogState extends State { } return Center( - child: Text(CountryLocalizations.of(context)?.translate('no_country') ?? 'No country found'), + child: Text(CountryLocalizations.of(context)?.translate('no_country') ?? + 'No country found'), ); } @@ -219,9 +232,15 @@ class _SelectionDialogState extends State { } void _filterElements(String s) { - s = s.toUpperCase(); + final normalizedSearch = removeDiacritics(s.toUpperCase()); setState(() { - filteredElements = widget.elements.where((e) => e.code!.contains(s) || e.dialCode!.contains(s) || e.name!.toUpperCase().contains(s)).toList(); + filteredElements = widget.elements + .where((e) => + e.code!.contains(normalizedSearch) || + e.dialCode!.contains(normalizedSearch) || + removeDiacritics(e.name!.toUpperCase()) + .contains(normalizedSearch)) + .toList(); }); }