241223 TIL

λ‚˜κ³ μˆ˜Β·2024λ…„ 12μ›” 24일
0

2024 TIL

λͺ©λ‘ 보기
93/94
post-thumbnail

이λͺ¨μ§€πŸŽ„πŸ§‘β€πŸŽ„πŸŽŠπŸ§‘β€πŸ§‘β€πŸ§’β€πŸ§’ μž…λ ₯ μ‹œ κΈ€μž 길이 2κΈ€μž μ΄μƒμœΌλ‘œ μž‘νžˆλŠ” 버그

ν˜„μƒ

이λͺ¨μ§€ μž…λ ₯ μ‹œ ν…μŠ€νŠΈν•„λ“œμ—μ„œ κΈ€μžκΈΈμ΄κ°€ 2자 μ΄μƒμœΌλ‘œ 작힘

이유

  • dartμ—μ„œλŠ” λ¬Έμžμ—΄μ„ utf-16으둜 인코딩함
  • μ›λž˜λŠ” ν•œ κΈ€μžκ°€ ν•œ μ½”λ“œμœ λ‹›(16λΉ„νŠΈ) λ‹¨μœ„λ‘œ 인코딩 λ˜μ–΄μ•Όν•˜λŠ”λ°
  • 이λͺ¨μ§€μ˜ 경우 2개~μ—¬λŸ¬κ°œμ˜ μ½”λ“œμœ λ‹›λ‹¨μœ„λ‘œ μ €μž₯됨
    μ™œλƒλ©΄ utf-16은 2^16=65,536개의 κΈ€μžλ₯Ό ꡬ뢄할 수 μžˆλŠ”λ° 이λͺ¨μ§€λŠ” κ·Έ λ²”μœ„μ— λ“€μ–΄κ°€μ§€ μ•Šμ•„μ„œ 32λΉ„νŠΈ,64λΉ„νŠΈμ— μ €μž₯λ˜λŠ” λ“± μ›λž˜ κ·œμΉ™(16λΉ„νŠΈ λ‹¨μœ„)을 벗어남
  • λ”°λΌμ„œ, λ‹¨μˆœνžˆ .length 이용 μ‹œ μ½”λ“œμœ λ‹›λ‹¨μœ„λ₯Ό λ°˜ν™˜ (이λͺ¨μ§€λŠ” ν•œκΈ€μžμΈλ° 2μ΄μƒμ˜ μˆ«μžκ°€ λ°˜ν™˜λ  수 있음)

ν•΄κ²°λ°©μ•ˆ

Characters(text).length;

μœ„ μ½”λ“œλ₯Ό μ΄μš©ν•΄ μ½”λ“œμœ λ‹›μ„ λ°˜ν™˜ν•˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ μ‹€μ œ ν‘œμ‹œλ˜λŠ” 문자 개수λ₯Ό λ°˜ν™˜ν•΄μ•Όν•¨

λ˜ν•œ ν…μŠ€νŠΈν•„λ“œμ—μ„œ κΈ€μžμˆ˜ μ œν•œμ„ 두고 μ‹ΆμœΌλ©΄ λ‹¨μˆœνžˆ maxLength 속성을 μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ μ•„λž˜μ˜ inputFormatterλ₯Ό μ‚¬μš©ν•΄μ•Όν•¨

final maxLength = 100;
  maxLengthWithEmojiFormatter(int maxLength) => [
        TextInputFormatter.withFunction((oldValue, newValue) {
          final count = Characters(newValue.text).length;
          if (count > maxLength) {
            return oldValue;
          }
          return newValue;
        }),
      ];
profile
λ˜κ³ μ‹Άλ‹€

0개의 λŒ“κΈ€