Skip to content

[Linux] Chinese characters is not rendered correctly on Ubuntu. #90951

Open

Description

@boyan01

On Unbuntu 20.04, if system language is not English (eg. Chinese), flutter app will render some language (Chinese, Japanese, Korean) character to rectangle box.

But if you change system language to English, all language characters render correctly.

Steps to Reproduce

  1. change you system language to Chinese.
  2. Run flutter create bug.
  3. Update the main.dart file as follows: ...
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: const [
              Text("Hello World."),
              Text("你好,世界。"),
              Text("こんにちは。"),
              Text("안녕하세요."),
            ],
          ),
        ),
      ),
    );
  }
}
  1. flutter run

Expected results:

en

Actual results:

cn

Logs
[✓] Flutter (Channel master, 2.6.0-12.0.pre.123, on Ubuntu 20.04.3 LTS 5.11.0-36-generic,
    locale en_GB.UTF-8)
    • Flutter version 2.6.0-12.0.pre.123 at /home/boyan/dev/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision d508a247be (21 hours ago), 2021-09-28 10:28:05 -0400
    • Engine revision 520be30122
    • Dart version 2.15.0 (build 2.15.0-156.0.dev)

[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/linux#android-setup for
      detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.


[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.

[✓] Linux toolchain - develop for Linux desktop
    • clang version 10.0.0-4ubuntu1
    • cmake version 3.16.3
    • ninja version 1.10.0
    • pkg-config version 0.29.1

[!] Android Studio (not installed)
    • Android Studio not found; download from
      https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/docs/get-started/install/linux#android-setup for
      detailed instructions).

[✓] IntelliJ IDEA Community Edition (version 2021.2)
    • IntelliJ at /home/boyan/dev/idea-IC-212.5284.40
    • Flutter plugin version 60.1.4
    • Dart plugin version 212.5486

[✓] Connected device (1 available)
    • Linux (desktop) • linux • linux-x64 • Ubuntu 20.04.3 LTS 5.11.0-36-generic

! Doctor found issues in 3 categories.

Activity

  1. TahaTesser commented on Sep 29, 2021

    @TahaTesser
    Contributor

    Hi @boyan01

    Thanks for filing the issue, I have tried multiple languages, only the Chinese system language is causing the issue. In my case, the whole app doesn't render anything, becomes non-responsive after few seconds.

    Reproducible code sample

    complete minimal runnable code sample
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            body: Center(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: const [
                  Text("Hello World."),
                  Text("你好,世界。"),
                  Text("こんにちは。"),
                  Text("안녕하세요."),
                ],
              ),
            ),
          ),
        );
      }
    }

    Preview

    Logs

    logs
    [  +59 ms] Building Linux application... (completed in 4.6s)
    [ +781 ms] Observatory URL on device: http://127.0.0.1:37413/SVEh-v_GCuQ=/
    [   +6 ms] Caching compiled dill
    [  +98 ms] Connecting to service protocol: http://127.0.0.1:37413/SVEh-v_GCuQ=/
    [ +176 ms] Launching a Dart Developer Service (DDS) instance at
    http://127.0.0.1:0, connecting to VM service at
    http://127.0.0.1:37413/SVEh-v_GCuQ=/.
    [ +141 ms] DDS is listening at http://127.0.0.1:36447/8wcxwYmTbFI=/.
    [  +73 ms] Successfully connected to service protocol:
    http://127.0.0.1:37413/SVEh-v_GCuQ=/
    [  +40 ms] DevFS: Creating new filesystem on the device (null)
    [  +16 ms] DevFS: Created new filesystem on the device
    (file:///tmp/triageZVABHL/triage/)
    [   +4 ms] Updating assets
    [ +145 ms] Syncing files to device Linux...
    [   +3 ms] <- reset
    [        ] Compiling dart to kernel with 0 updated files
    [   +5 ms] <- recompile package:triage/main.dart
    2fb4d21c-a2b5-448b-82f2-e585693a220d
    [        ] <- 2fb4d21c-a2b5-448b-82f2-e585693a220d
    [ +148 ms] Updating files.
    [        ] DevFS: Sync finished
    [   +2 ms] Syncing files to device Linux... (completed in 158ms)
    [        ] Synced 0.0MB.
    [   +2 ms] <- accept
    [   +3 ms] Connected to _flutterView/0x150bf10.
    [   +4 ms] Flutter run key commands.
    [   +3 ms] r Hot reload. 🔥🔥🔥
    [   +1 ms] R Hot restart.
    [        ] h List all available interactive commands.
    [        ] d Detach (terminate "flutter run" but leave application running).
    [        ] c Clear the screen
    [        ] q Quit (terminate the application on the device).
    [        ] 💪 Running with sound null safety 💪
    [   +1 ms] An Observatory debugger and profiler on Linux is available at:
               http://127.0.0.1:36447/8wcxwYmTbFI=/
    [ +393 ms] DevTools activation throttled until 2021-09-30 03:46:51.814847.
    [ +376 ms] 
                        ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY
                        ╞═════════════════════════════════════════════════════════
                        The following assertion was thrown during performLayout():
                        RenderParagraph object was given an infinite size during
    layout.
                        This probably means that it is a render object that tries to
    be as big as
                        possible, but it was put
                        inside another render object that allows its children to
    pick their own size.
                        The nearest ancestor providing an unbounded height
    constraint is:
                        RenderFlex#83f9a relayoutBoundary=up2 NEEDS-LAYOUT
    NEEDS-PAINT
                        NEEDS-COMPOSITING-BITS-UPDATE:
                          creator: Column ← Center ← _BodyBuilder ← MediaQuery ←
                          LayoutId-[<_ScaffoldSlot.body>] ←
                            CustomMultiChildLayout ← AnimatedBuilder ←
    DefaultTextStyle ←
                            AnimatedDefaultTextStyle ←
                            _InkFeatures-[GlobalKey#ce223 ink renderer] ←
                            NotificationListener<LayoutChangedNotification> ←
                            PhysicalModel ← ⋯
                          parentData: offset=Offset(0.0, 0.0) (can use size)
                          constraints: BoxConstraints(0.0<=w<=1280.0, 0.0<=h<=720.0)
                          size: MISSING
                          direction: vertical
                          mainAxisAlignment: start
                          mainAxisSize: min
                          crossAxisAlignment: center
                          verticalDirection: down
                        The constraints that applied to the RenderParagraph were:
                          BoxConstraints(0.0<=w<=1280.0, 0.0<=h<=Infinity)
                        The exact size it was given was:
                          Size(0.0, Infinity)
                        See
    https://flutter.dev/docs/development/ui/layout/box-constraints for more
                        information.
                        
                        The relevant error-causing widget was:
                          Text
    Text:file:///home/taha/StudioProjects/triage/lib/main.dart:23:15
                        
                        When the exception was thrown, this was the stack:
                        #0      RenderBox.debugAssertDoesMeetConstraints.<anonymous
    closure>
                        (package:flutter/src/rendering/box.dart:2205:9)
                        #1      RenderBox.debugAssertDoesMeetConstraints
                        (package:flutter/src/rendering/box.dart:2299:6)
                        #2      RenderBox.size=.<anonymous closure>
                        (package:flutter/src/rendering/box.dart:1991:7)
                        #3      RenderBox.size=
    (package:flutter/src/rendering/box.dart:1993:6)
                        #4      RenderParagraph.performLayout
                        (package:flutter/src/rendering/paragraph.dart:640:5)
                        #5      RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #6      ChildLayoutHelper.layoutChild
                        (package:flutter/src/rendering/layout_helper.dart:56:11)
                        #7      RenderFlex._computeSizes
                        (package:flutter/src/rendering/flex.dart:829:43)
                        #8      RenderFlex.performLayout
                        (package:flutter/src/rendering/flex.dart:931:32)
                        #9      RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #10     RenderPositionedBox.performLayout
                        (package:flutter/src/rendering/shifted_box.dart:437:14)
                        #11     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #12     MultiChildLayoutDelegate.layoutChild
                        (package:flutter/src/rendering/custom_layout.dart:171:12)
                        #13     _ScaffoldLayout.performLayout
                        (package:flutter/src/material/scaffold.dart:1005:7)
                        #14     MultiChildLayoutDelegate._callPerformLayout
                        (package:flutter/src/rendering/custom_layout.dart:240:7)
                        #15     RenderCustomMultiChildLayoutBox.performLayout
                        (package:flutter/src/rendering/custom_layout.dart:404:14)
                        #16     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #17     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #18     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #19     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #20     _RenderCustomClip.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:1376:11)
                        #21     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #22     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #23     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #24     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #25     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #26     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #27     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #28     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #29     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #30     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #31     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #32     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #33     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #34     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #35     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #36     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #37     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #38     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #39     RenderOffstage.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:3410:13)
                        #40     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #41     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #42     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #43     _RenderTheatre.performLayout
                        (package:flutter/src/widgets/overlay.dart:751:15)
                        #44     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #45     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #46     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #47     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #48     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #49     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #50     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #51     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #52     RenderCustomPaint.performLayout
                        (package:flutter/src/rendering/custom_paint.dart:545:11)
                        #53     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #54     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #55     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #56     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #57     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #58     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #59     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #60     RenderProxyBoxMixin.performLayout
                        (package:flutter/src/rendering/proxy_box.dart:116:14)
                        #61     RenderObject.layout
    (package:flutter/src/rendering/object.dart:1858:7)
                        #62     RenderView.performLayout
                        (package:flutter/src/rendering/view.dart:165:14)
                        #63     RenderObject._layoutWithoutResize
                        (package:flutter/src/rendering/object.dart:1713:7)
                        #64     PipelineOwner.flushLayout
                        (package:flutter/src/rendering/object.dart:885:18)
                        #65     RendererBinding.drawFrame
                        (package:flutter/src/rendering/binding.dart:453:19)
                        #66     WidgetsBinding.drawFrame
                        (package:flutter/src/widgets/binding.dart:883:13)
                        #67     RendererBinding._handlePersistentFrameCallback
                        (package:flutter/src/rendering/binding.dart:319:5)
                        #68     SchedulerBinding._invokeFrameCallback
                        (package:flutter/src/scheduler/binding.dart:1145:15)
                        #69     SchedulerBinding.handleDrawFrame
                        (package:flutter/src/scheduler/binding.dart:1082:9)
                        #70     SchedulerBinding.scheduleWarmUpFrame.<anonymous
    closure>
                        (package:flutter/src/scheduler/binding.dart:863:7)
                        (elided 11 frames from class _RawReceivePortImpl, class
    _Timer, dart:async, and
                        dart:async-patch)
                        
                        The following RenderObject was being processed when the
    exception was fired:
                        RenderParagraph#82488 relayoutBoundary=up3 NEEDS-LAYOUT
    NEEDS-PAINT:
                          creator: RichText ← Text ← Column ← Center ← _BodyBuilder
    ← MediaQuery ←
                            LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout
    ← AnimatedBuilder ←
                            DefaultTextStyle ←
                            AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#ce223
    ink renderer] ← ⋯
                          parentData: offset=Offset(0.0, 0.0); flex=null; fit=null
    (can use size)
                          constraints: BoxConstraints(0.0<=w<=1280.0,
    0.0<=h<=Infinity)
                          size: Size(0.0, Infinity)
                          textAlign: start
                          textDirection: ltr
                          softWrap: wrapping at box width
                          overflow: clip
                          textScaleFactor: 1.3
                          locale: en_US
                          maxLines: unlimited
                        This RenderObject had the following child:
                            text: TextSpan
    
    ════════════════════════════════════════════════════════════════════════════════
                        ════════════════════
    [ +156 ms] 
                        Another exception was thrown: RenderParagraph object was
    given an infinite size
                        during layout.
    [ +628 ms] 
                        Another exception was thrown: A RenderFlex overflowed by
    Infinity pixels on the
                        bottom.
    [  +99 ms] 
               Another exception was thrown: SemanticsNode#5(Rect.fromLTRB(0.0, 0.0,
    0.0, 0.0),
               invisible) (with null) tried to set a non-finite rect.
    [  +84 ms] 
               Another exception was thrown:
    'package:flutter/src/widgets/binding.dart': Failed
               assertion: line 857 pos 14: '!_firstFrameCompleter.isCompleted': is
    not true.
    [  +12 ms] The Flutter DevTools debugger and profiler on Linux is available at:
               http://127.0.0.1:9101?uri=http://127.0.0.1:36447/8wcxwYmTbFI=/
    stable master
    ❗️ ❗️

    Check flutter doctor -v outputs for each channel below

    flutter doctor -v
    [✓] Flutter (Channel stable, 2.5.1, on Zorin OS 16 5.11.0-37-generic, locale zh_CN.UTF-8)
        • Flutter version 2.5.1 at /home/taha/Code/flutter_stable
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision ffb2ecea52 (12 天前), 2021-09-17 15:26:33 -0400
        • Engine revision b3af521a05
        • Dart version 2.14.2
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
        • Android SDK at /home/taha/Code/android-sdk
        • Platform android-31, build-tools 31.0.0
        • ANDROID_SDK_ROOT = /home/taha/Code/android-sdk
        • Java binary at: /home/taha/Code/android-studio/jre/bin/java
        • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
        • All Android licenses accepted.
    
    [✓] Chrome - develop for the web
        • Chrome at google-chrome
    
    [✓] Linux toolchain - develop for Linux desktop
        • clang version 10.0.0-4ubuntu1
        • cmake version 3.16.3
        • ninja version 1.8.2
        • pkg-config version 0.29.1
    
    [✓] Android Studio (version 2020.3)
        • Android Studio at /home/taha/Code/android-studio
        • Flutter plugin version 60.1.2
        • Dart plugin version 203.8292
        • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    
    [✓] VS Code
        • VS Code at /snap/code/current
        • Flutter extension version 3.26.0
    
    [✓] Connected device (2 available)
        • Linux (desktop) • linux  • linux-x64      • Zorin OS 16 5.11.0-37-generic
        • Chrome (web)    • chrome • web-javascript • Google Chrome 94.0.4606.61
    
    • No issues found!
    
    [✓] Flutter (Channel master, 2.6.0-12.0.pre.136, on Zorin OS 16 5.11.0-37-generic, locale zh_CN.UTF-8)
        • Flutter version 2.6.0-12.0.pre.136 at /home/taha/Code/flutter_master
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision aaa14b8004 (3 小时前), 2021-09-29 06:03:04 -0400
        • Engine revision bccb3a57eb
        • Dart version 2.15.0 (build 2.15.0-156.0.dev)
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
        • Android SDK at /home/taha/Code/android-sdk
        • Platform android-31, build-tools 31.0.0
        • ANDROID_SDK_ROOT = /home/taha/Code/android-sdk
        • Java binary at: /home/taha/Code/android-studio/jre/bin/java
        • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
        • All Android licenses accepted.
    
    [✓] Chrome - develop for the web
        • Chrome at google-chrome
    
    [✓] Linux toolchain - develop for Linux desktop
        • clang version 10.0.0-4ubuntu1
        • cmake version 3.16.3
        • ninja version 1.8.2
        • pkg-config version 0.29.1
    
    [✓] Android Studio (version 2020.3)
        • Android Studio at /home/taha/Code/android-studio
        • Flutter plugin version 60.1.2
        • Dart plugin version 203.8292
        • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    
    [✓] VS Code
        • VS Code at /snap/code/current
        • Flutter extension version 3.26.0
    
    [✓] Connected device (2 available)
        • Linux (desktop) • linux  • linux-x64      • Zorin OS 16 5.11.0-37-generic
        • Chrome (web)    • chrome • web-javascript • Google Chrome 94.0.4606.61
    
    • No issues found!

    ✅: No Issue ❗️: Issue reproduced

    Thanks for filing the issue

    Can you please try the following code sample?

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(
            home: Scaffold(
                body: Text(
          '測試',
          style: TextStyle(inherit: false),
        )));
      }
    }

    This code samples also comes blank for me

  2. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Sep 29, 2021
  3. boyan01 commented on Sep 29, 2021

    @boyan01
    ContributorAuthor

    Can you please try the following code sample?

    I tested it, this code samples comes blank for me too, regardless of whether the system language is Chinese or English

    en

  4. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Sep 29, 2021
  5. boyan01 commented on Sep 29, 2021

    @boyan01
    ContributorAuthor

    Can you please try the following code sample?

    I tested it, this code samples comes blank for me too, regardless of whether the system language is Chinese or English

    en

    oh, I was wrong. It shows correctly on English. I'll going to check Chinese again.


    update:

    Because the text and background colors are too close, I made a mistake just now. I changed the background color to black to make it easier to distinguish.

    After retesting, when the system language is changed to Chinese, the text are still rendering to the box, but if in English, the text rendering is normal.

    English system lang

    en

    Chinese system lang

    cn

  6. TahaTesser commented on Sep 30, 2021

    @TahaTesser
    Contributor

    Hi @boyan01
    Thanks for the details, for me, nothing renders when using Chinese text in the Chinese system language #90951 (comment)

    I am using Zorin OS (based on Ubuntu 20.04 LTS)

  7. added
    a: internationalizationSupporting other languages or locales. (aka i18n)
    a: typographyText rendering, possibly libtxt
    engineflutter/engine related. See also e: labels.
    has reproducible stepsThe issue has been confirmed reproducible and is ready to work on
    and removed
    in triagePresently being triaged by the triage team
    on Sep 30, 2021
  8. 13 remaining items

  9. flutter-triage-bot commented on Jun 6, 2024

    @flutter-triage-bot

    The triaged-desktop label is irrelevant if there is no team-desktop label or fyi-desktop label.

  10. LFRon commented on Jul 18, 2025

    @LFRon

    I tried on Debian Testing,which x86-64 architecture rendered correctly but ARM64 does not,could developer fix it?

  11. qingzt commented on Oct 18, 2025

    @qingzt

    Same problem. I got it on Arm64 Fedora.

  12. HonestQiao commented on Oct 20, 2025

    @HonestQiao

    Same problem. I got it on Arm64 Ubuntu25.04.
    My board is Radxa Orion O6. The core is ArmV9.

    Image
    1. snap-store: broken
    2. security enter: broken
    3. gnome-software: ok
  13. LFRon commented on Oct 21, 2025

    @LFRon

    Same problem. I got it on Arm64 Ubuntu25.04. My board is Radxa Orion O6. The core is ArmV9.
    Image

    1. snap-store: broken
    
    2. security enter: broken
    
    3. gnome-software: ok
    

    It is because Flutter doesn't support rendering CJK Fonts on Linux ARM64 desktop,I recommend change system-wide font to SC Fonts like HarmonyOS Sans SC or Noto Sans SC

  14. qingzt commented on Oct 22, 2025

    @qingzt

    Same problem. I got it on Arm64 Ubuntu25.04. My board is Radxa Orion O6. The core is ArmV9.
    Image

    1. snap-store: broken
    
    2. security enter: broken
    
    3. gnome-software: ok
    

    It is because Flutter doesn't support rendering CJK Fonts on Linux ARM64 desktop,I recommend change system-wide font to SC Fonts like HarmonyOS Sans SC or Noto Sans SC

    I tried Noto Sans SC and HarmonyOS Sans CS, it didn't take effect.

  15. krystic commented on Dec 19, 2025

    @krystic
    Contributor

    TL;DR: The root cause of CJK characters displaying as squares (□□□) in Flutter apps on ARM64 Linux has been identified: the official ARM64 libflutter_linux_gtk.so does not have fontconfig enabled, preventing proper fallback to system fonts. We provide a universal solution by "replacing with fixed Engine SO", with "font mapping" as a temporary backup.

    Project repository: 👉 https://github.com/krystic/flutter-arm-cjk-fix

    Root Cause & Solutions

    • Root cause: Official ARM64 Flutter Engine is not linked with fontconfig (especially when running in Snap sandbox), causing CJK fallback failure.
    • Solution 1 (Recommended, universal root fix): Replace with our compiled libflutter_linux_gtk.so with fontconfig enabled.
    • Solution 2 (Fallback, temporary fix): Use mount --bind to map system Noto Sans CJK fonts to the app's font directory.

    Available Versions (Linux ARM64)

    • Currently available: 3.24.3, 3.32.7, 3.35.3, 3.38.1 (all with fontconfig enabled)
    • Building automatically: 3.38.5 (Actions will trigger build and release upon detecting new tags)

    Quick Start

    1. One-command installation (recommended, auto-detects ARM64 architecture and completes setup):

      curl -fsSL https://raw.githubusercontent.com/krystic/flutter-arm-cjk-fix/main/install.sh | sudo bash
    2. Fix an app (tries "SO root fix" first, auto-fallback to font mapping):

      sudo flutter-font-fix -a <your_app_name>
      # Example: sudo flutter-font-fix -a snap-store
    3. View fix method and status (will show SO / font / unknown):

      sudo flutter-font-fix -d

    Or manually clone repository for installation:

    git clone https://github.com/krystic/flutter-arm-cjk-fix.git
    cd flutter-arm-cjk-fix
    sudo ./flutter-font-fix -a <your_app_name>

    Compatibility & Security

    • Does not modify Snap read-only images; SO replacement uses system-level mounting, maintained by systemd after boot.
    • If official fix is released later, this tool can be uninstalled with one command to restore original state.

    Conclusion
    This is not a font-missing issue for individual apps, but a systemic problem where Flutter Engine (official build) on ARM64 platform does not have fontconfig enabled. By replacing with an Engine SO that has fontconfig enabled, we can fix all affected Flutter desktop apps at the root cause level; when SO is temporarily unavailable, font mapping provides a reliable temporary alternative.

    Testing and feedback are welcome. We will continue to track and maintain the latest versions.

  16. AsciiWolf commented on Feb 14, 2026

    @AsciiWolf

    Any progress?

  17. qjebbs commented on May 21, 2026

    @qjebbs

    #90951 (comment)

    Thank you! It really solved the problem. It's truly regrettable that the official team hasn't responded for so many years.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: desktopRunning on desktopa: internationalizationSupporting other languages or locales. (aka i18n)a: typographyText rendering, possibly libtxtc: renderingUI glitches reported at the engine/skia or impeller rendering levelengineflutter/engine related. See also e: labels.found in release: 2.5Found to occur in 2.5found in release: 2.6Found to occur in 2.6has reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-linuxBuilding on or for Linux specificallyteam-linuxOwned by the Linux platform teamtriaged-linuxTriaged by the Linux platform team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions