Skip to content

Invalid Unicode in TextEditingController's text Crashes the App on iOS #179727

Description

@mahmuttaskiran

Steps to reproduce

App crashes on iOS when a TextField contains malformed Unicode (e.g., half of a surrogate pair such as \u{DFFF}).

Expected results

No crash

Actual results

Crash

Code sample

Code sample
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('You have pushed the button this many times:'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            TextField(
              controller: TextEditingController(text: '\u{DFFF}'),
              decoration: const InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Input Text',
                helperText: 'Value: \\u{DFFF}',
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
          Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0xc98c8 __exceptionPreprocess
1  libobjc.A.dylib                0x317c4 objc_exception_throw
2  Foundation                     0x8f3e80 _userInfoForFileAndLine
3  Flutter                        0x4dcfd0 -[FlutterJSONMessageCodec decode:] + 111 (FlutterCodecs.mm:111)
4  Flutter                        0x4dc42c -[FlutterJSONMethodCodec decodeMethodCall:] + 145 (FlutterCodecs.mm:145)
5  Flutter                        0x4d9208 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 312 (FlutterChannels.mm:312)
6  Flutter                        0x6a8e0 invocation function for block in flutter::PlatformMessageHandlerIos::HandlePlatformMessage(std::_fl::unique_ptr<flutter::PlatformMessage, std::_fl::default_delete<flutter::PlatformMessage>>) + 110 (ref_ptr.h:110)
7  libdispatch.dylib              0x1adc _dispatch_call_block_and_release
8  libdispatch.dylib              0x1b7ec _dispatch_client_callout
9  libdispatch.dylib              0x38b24 _dispatch_main_queue_drain.cold.5
10 libdispatch.dylib              0x10ec8 _dispatch_main_queue_drain
11 libdispatch.dylib              0x10e04 _dispatch_main_queue_callback_4CF
12 CoreFoundation                 0x6b520 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
13 CoreFoundation                 0x1dd14 __CFRunLoopRun
14 CoreFoundation                 0x1cc44 _CFRunLoopRunSpecificWithOptions
15 GraphicsServices               0x1498 GSEventRunModal
16 UIKitCore                      0xa9dcc (Missing UUID 17c42b4970d63ee2aac77010bb917cdc)
17 UIKitCore                      0x4eb0c (Missing UUID 17c42b4970d63ee2aac77010bb917cdc)
18 UIKitCore                      0x18a854 (Missing UUID 17c42b4970d63ee2aac77010bb917cdc)
19 Runner                         0x2f344 main (StandaloneAppDelegate.swift)
20 ???                            0x19a0aae28 (Missing)
        

Flutter Doctor output

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.38.3, on macOS 15.6.1 24G90 darwin-arm64, locale en-AE)
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0)
[!] Xcode - develop for iOS and macOS (Xcode 26.1.1)
    ✗ CocoaPods not installed.
        CocoaPods is a package manager for iOS or macOS platform code.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/to/platform-plugins
      For installation instructions, see https://guides.cocoapods.org/using/getting-started.html#installation
[✓] Chrome - develop for the web
[✓] Connected device (3 available)
[✓] Network resources

Activity

  1. changed the title [-]Invalid Unicode in TextEditingController's `text` Crashes the App[/-] [+]Invalid Unicode in TextEditingController's `text` Crashes the App on iOS[/+] on Dec 11, 2025
  2. tirth-patel-nc commented on Dec 11, 2025

    @tirth-patel-nc
    Member

    Thanks for the report. Seeing the same behaviour with latest SDK versions on iOS & macOS.

    It doesn't crash on Android/Web but contains some error logs in the console.

    stable : 3.38.4
    master : 3.40.0-1.0.pre-118
    
    Full Crash - iOS
    Exception Type:    EXC_CRASH (SIGABRT)
    Exception Codes:   0x0000000000000000, 0x0000000000000000
    
    Termination Reason:  Namespace SIGNAL, Code 6, Abort trap: 6
    Terminating Process: Runner [32046]
    
    
    Last Exception Backtrace:
    0   CoreFoundation                	       0x1804f71c4 __exceptionPreprocess + 160
    1   libobjc.A.dylib               	       0x18009c094 objc_exception_throw + 72
    2   Foundation                    	       0x1810280b0 _userInfoForFileAndLine + 0
    3   Flutter                       	       0x106f3176c -[FlutterJSONMessageCodec decode:] + 552
    4   Flutter                       	       0x106f31e50 -[FlutterJSONMethodCodec decodeMethodCall:] + 92
    5   Flutter                       	       0x106f2ff44 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 60
    6   Flutter                       	       0x106a5964c invocation function for block in flutter::PlatformMessageHandlerIos::HandlePlatformMessage(std::_fl::unique_ptr<flutter::PlatformMessage, std::_fl::default_delete<flutter::PlatformMessage>>) + 108
    7   libdispatch.dylib             	       0x1801c07a8 _dispatch_call_block_and_release + 24
    8   libdispatch.dylib             	       0x1801db4b0 _dispatch_client_callout + 12
    9   libdispatch.dylib             	       0x1801f74a0 <deduplicated_symbol> + 24
    10  libdispatch.dylib             	       0x1801d031c _dispatch_main_queue_drain + 1184
    11  libdispatch.dylib             	       0x1801cfe6c _dispatch_main_queue_callback_4CF + 40
    12  CoreFoundation                	       0x180455ed8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    13  CoreFoundation                	       0x1804550b0 __CFRunLoopRun + 1884
    14  CoreFoundation                	       0x18044fcec _CFRunLoopRunSpecificWithOptions + 496
    15  GraphicsServices              	       0x1926be9bc GSEventRunModal + 116
    16  UIKitCore                     	       0x18630f0d8 -[UIApplication _run] + 772
    17  UIKitCore                     	       0x186313300 UIApplicationMain + 124
    18  UIKitCore                     	       0x18554ac38 0x18516f000 + 4045880
    19  Runner.debug.dylib            	       0x104041ba4 static UIApplicationDelegate.main() + 128
    20  Runner.debug.dylib            	       0x104041b14 static AppDelegate.$main() + 44
    21  Runner.debug.dylib            	       0x104041c20 __debug_main_executable_dylib_entry_point + 28
    22  ???                           	       0x1042853d0 ???
    23  dyld                          	       0x104158d54 start + 7184
    
    Kernel Triage:
    VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter
    VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter
    
    
    Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
    0   libsystem_kernel.dylib        	       0x10406c85c __pthread_kill + 8
    1   libsystem_pthread.dylib       	       0x1043462a8 pthread_kill + 264
    2   libsystem_c.dylib             	       0x1801b5994 abort + 100
    3   libc++abi.dylib               	       0x18030326c __abort_message + 128
    4   libc++abi.dylib               	       0x1802f31a4 demangling_terminate_handler() + 268
    5   libobjc.A.dylib               	       0x180077218 _objc_terminate() + 124
    6   libc++abi.dylib               	       0x180302758 std::__terminate(void (*)()) + 12
    7   libc++abi.dylib               	       0x1803057c0 __cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*) + 32
    8   libc++abi.dylib               	       0x1803057a0 __cxa_throw + 88
    9   libobjc.A.dylib               	       0x18009c1cc objc_exception_throw + 384
    10  Foundation                    	       0x1810280b0 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 284
    11  Flutter                       	       0x106f3176c -[FlutterJSONMessageCodec decode:] + 552
    12  Flutter                       	       0x106f31e50 -[FlutterJSONMethodCodec decodeMethodCall:] + 92
    13  Flutter                       	       0x106f2ff44 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 60
    14  Flutter                       	       0x106a5964c invocation function for block in flutter::PlatformMessageHandlerIos::HandlePlatformMessage(std::_fl::unique_ptr<flutter::PlatformMessage, std::_fl::default_delete<flutter::PlatformMessage>>) + 108
    15  libdispatch.dylib             	       0x1801c07a8 _dispatch_call_block_and_release + 24
    16  libdispatch.dylib             	       0x1801db4b0 _dispatch_client_callout + 12
    17  libdispatch.dylib             	       0x1801f74a0 <deduplicated_symbol> + 24
    18  libdispatch.dylib             	       0x1801d031c _dispatch_main_queue_drain + 1184
    19  libdispatch.dylib             	       0x1801cfe6c _dispatch_main_queue_callback_4CF + 40
    20  CoreFoundation                	       0x180455ed8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    21  CoreFoundation                	       0x1804550b0 __CFRunLoopRun + 1884
    22  CoreFoundation                	       0x18044fcec _CFRunLoopRunSpecificWithOptions + 496
    23  GraphicsServices              	       0x1926be9bc GSEventRunModal + 116
    24  UIKitCore                     	       0x18630f0d8 -[UIApplication _run] + 772
    25  UIKitCore                     	       0x186313300 UIApplicationMain + 124
    26  UIKitCore                     	       0x18554ac38 0x18516f000 + 4045880
    27  Runner.debug.dylib            	       0x104041ba4 static UIApplicationDelegate.main() + 128
    28  Runner.debug.dylib            	       0x104041b14 static AppDelegate.$main() + 44
    29  Runner.debug.dylib            	       0x104041c20 __debug_main_executable_dylib_entry_point + 28
    30  ???                           	       0x1042853d0 ???
    31  dyld                          	       0x104158d54 start + 7184
    
    Thread 1:
    
    Thread 2:: com.apple.uikit.eventfetch-thread
    0   libsystem_kernel.dylib        	       0x104064b70 mach_msg2_trap + 8
    1   libsystem_kernel.dylib        	       0x10407590c mach_msg2_internal + 72
    2   libsystem_kernel.dylib        	       0x10406cc10 mach_msg_overwrite + 480
    3   libsystem_kernel.dylib        	       0x104064ee4 mach_msg + 20
    4   CoreFoundation                	       0x180455c04 __CFRunLoopServiceMachPort + 156
    5   CoreFoundation                	       0x180454dbc __CFRunLoopRun + 1128
    6   CoreFoundation                	       0x18044fcec _CFRunLoopRunSpecificWithOptions + 496
    7   Foundation                    	       0x1810e5408 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 208
    8   Foundation                    	       0x1810e5628 -[NSRunLoop(NSRunLoop) runUntilDate:] + 60
    9   UIKitCore                     	       0x186067690 -[UIEventFetcher threadMain] + 392
    10  Foundation                    	       0x18110c2d4 __NSThread__start__ + 716
    11  libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    12  libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 3:: io.flutter.1.raster
    0   libsystem_kernel.dylib        	       0x104064b70 mach_msg2_trap + 8
    1   libsystem_kernel.dylib        	       0x10407590c mach_msg2_internal + 72
    2   libsystem_kernel.dylib        	       0x10406cc10 mach_msg_overwrite + 480
    3   libsystem_kernel.dylib        	       0x104064ee4 mach_msg + 20
    4   CoreFoundation                	       0x180455c04 __CFRunLoopServiceMachPort + 156
    5   CoreFoundation                	       0x180454dbc __CFRunLoopRun + 1128
    6   CoreFoundation                	       0x18044fcec _CFRunLoopRunSpecificWithOptions + 496
    7   Flutter                       	       0x106a8dee8 fml::MessageLoopDarwin::Run() + 92
    8   Flutter                       	       0x106a869b0 fml::MessageLoopImpl::DoRun() + 44
    9   Flutter                       	       0x106a8c590 std::_fl::__function::__func<fml::Thread::Thread(std::_fl::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0, std::_fl::allocator<fml::Thread::Thread(std::_fl::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0>, void ()>::operator()() + 184
    10  Flutter                       	       0x106a8c254 fml::ThreadHandle::ThreadHandle(std::_fl::function<void ()>&&)::$_0::__invoke(void*) + 36
    11  libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    12  libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 4:: io.flutter.1.io
    0   libsystem_kernel.dylib        	       0x104064b70 mach_msg2_trap + 8
    1   libsystem_kernel.dylib        	       0x10407590c mach_msg2_internal + 72
    2   libsystem_kernel.dylib        	       0x10406cc10 mach_msg_overwrite + 480
    3   libsystem_kernel.dylib        	       0x104064ee4 mach_msg + 20
    4   CoreFoundation                	       0x180455c04 __CFRunLoopServiceMachPort + 156
    5   CoreFoundation                	       0x180454dbc __CFRunLoopRun + 1128
    6   CoreFoundation                	       0x18044fcec _CFRunLoopRunSpecificWithOptions + 496
    7   Flutter                       	       0x106a8dee8 fml::MessageLoopDarwin::Run() + 92
    8   Flutter                       	       0x106a869b0 fml::MessageLoopImpl::DoRun() + 44
    9   Flutter                       	       0x106a8c590 std::_fl::__function::__func<fml::Thread::Thread(std::_fl::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0, std::_fl::allocator<fml::Thread::Thread(std::_fl::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0>, void ()>::operator()() + 184
    10  Flutter                       	       0x106a8c254 fml::ThreadHandle::ThreadHandle(std::_fl::function<void ()>&&)::$_0::__invoke(void*) + 36
    11  libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    12  libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 5:: io.flutter.1.profiler
    0   libsystem_kernel.dylib        	       0x104064b70 mach_msg2_trap + 8
    1   libsystem_kernel.dylib        	       0x10407590c mach_msg2_internal + 72
    2   libsystem_kernel.dylib        	       0x10406cc10 mach_msg_overwrite + 480
    3   libsystem_kernel.dylib        	       0x104064ee4 mach_msg + 20
    4   CoreFoundation                	       0x180455c04 __CFRunLoopServiceMachPort + 156
    5   CoreFoundation                	       0x180454dbc __CFRunLoopRun + 1128
    6   CoreFoundation                	       0x18044fcec _CFRunLoopRunSpecificWithOptions + 496
    7   Flutter                       	       0x106a8dee8 fml::MessageLoopDarwin::Run() + 92
    8   Flutter                       	       0x106a869b0 fml::MessageLoopImpl::DoRun() + 44
    9   Flutter                       	       0x106a8c590 std::_fl::__function::__func<fml::Thread::Thread(std::_fl::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0, std::_fl::allocator<fml::Thread::Thread(std::_fl::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0>, void ()>::operator()() + 184
    10  Flutter                       	       0x106a8c254 fml::ThreadHandle::ThreadHandle(std::_fl::function<void ()>&&)::$_0::__invoke(void*) + 36
    11  libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    12  libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 6:: io.worker.1
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346a74 _pthread_cond_wait + 976
    2   Flutter                       	       0x106a5ee38 std::_fl::condition_variable::wait(std::_fl::unique_lock<std::_fl::mutex>&) + 24
    3   Flutter                       	       0x106a83154 fml::ConcurrentMessageLoop::WorkerMain() + 140
    4   Flutter                       	       0x106a837fc void* std::_fl::__thread_proxy[abi:nn210000]<std::_fl::tuple<std::_fl::unique_ptr<std::_fl::__thread_struct, std::_fl::default_delete<std::_fl::__thread_struct>>, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0>>(void*) + 192
    5   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    6   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 7:: io.worker.2
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346a74 _pthread_cond_wait + 976
    2   Flutter                       	       0x106a5ee38 std::_fl::condition_variable::wait(std::_fl::unique_lock<std::_fl::mutex>&) + 24
    3   Flutter                       	       0x106a83154 fml::ConcurrentMessageLoop::WorkerMain() + 140
    4   Flutter                       	       0x106a837fc void* std::_fl::__thread_proxy[abi:nn210000]<std::_fl::tuple<std::_fl::unique_ptr<std::_fl::__thread_struct, std::_fl::default_delete<std::_fl::__thread_struct>>, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0>>(void*) + 192
    5   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    6   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 8:: io.worker.3
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346a74 _pthread_cond_wait + 976
    2   Flutter                       	       0x106a5ee38 std::_fl::condition_variable::wait(std::_fl::unique_lock<std::_fl::mutex>&) + 24
    3   Flutter                       	       0x106a83154 fml::ConcurrentMessageLoop::WorkerMain() + 140
    4   Flutter                       	       0x106a837fc void* std::_fl::__thread_proxy[abi:nn210000]<std::_fl::tuple<std::_fl::unique_ptr<std::_fl::__thread_struct, std::_fl::default_delete<std::_fl::__thread_struct>>, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0>>(void*) + 192
    5   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    6   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 9:: io.worker.4
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346a74 _pthread_cond_wait + 976
    2   Flutter                       	       0x106a5ee38 std::_fl::condition_variable::wait(std::_fl::unique_lock<std::_fl::mutex>&) + 24
    3   Flutter                       	       0x106a83154 fml::ConcurrentMessageLoop::WorkerMain() + 140
    4   Flutter                       	       0x106a837fc void* std::_fl::__thread_proxy[abi:nn210000]<std::_fl::tuple<std::_fl::unique_ptr<std::_fl::__thread_struct, std::_fl::default_delete<std::_fl::__thread_struct>>, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0>>(void*) + 192
    5   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    6   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 10:: dart:io EventHandler
    0   libsystem_kernel.dylib        	       0x10406a65c kevent + 8
    1   Flutter                       	       0x106eebf28 dart::bin::EventHandlerImplementation::EventHandlerEntry(unsigned long) + 304
    2   Flutter                       	       0x106f0800c dart::bin::ThreadStart(void*) + 92
    3   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    4   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 11:: Dart Profiler ThreadInterrupter
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346a74 _pthread_cond_wait + 976
    2   Flutter                       	       0x106f558e8 dart::ConditionVariable::WaitMicros(dart::Mutex*, long long) + 128
    3   Flutter                       	       0x1070bd550 dart::ThreadInterrupter::ThreadMain(unsigned long) + 336
    4   Flutter                       	       0x10706faa8 dart::ThreadStart(void*) + 208
    5   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    6   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 12:: Dart Profiler SampleBlockProcessor
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346aa0 _pthread_cond_wait + 1020
    2   Flutter                       	       0x106f558d8 dart::ConditionVariable::WaitMicros(dart::Mutex*, long long) + 112
    3   Flutter                       	       0x107074a64 dart::SampleBlockProcessor::ThreadMain(unsigned long) + 220
    4   Flutter                       	       0x10706faa8 dart::ThreadStart(void*) + 208
    5   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    6   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 13:: DartWorker
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346aa0 _pthread_cond_wait + 1020
    2   Flutter                       	       0x106f558d8 dart::ConditionVariable::WaitMicros(dart::Mutex*, long long) + 112
    3   Flutter                       	       0x106fb580c dart::MutatorThreadPool::OnEnterIdleLocked(dart::MutexLocker*, dart::ThreadPool::Worker*) + 156
    4   Flutter                       	       0x1070be16c dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) + 124
    5   Flutter                       	       0x1070be450 dart::ThreadPool::Worker::Main(unsigned long) + 116
    6   Flutter                       	       0x10706faa8 dart::ThreadStart(void*) + 208
    7   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    8   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    Thread 14:: DartWorker
    0   libsystem_kernel.dylib        	       0x104068020 __psynch_cvwait + 8
    1   libsystem_pthread.dylib       	       0x104346aa0 _pthread_cond_wait + 1020
    2   Flutter                       	       0x106f558d8 dart::ConditionVariable::WaitMicros(dart::Mutex*, long long) + 112
    3   Flutter                       	       0x1070be2f0 dart::ThreadPool::WorkerLoop(dart::ThreadPool::Worker*) + 512
    4   Flutter                       	       0x1070be450 dart::ThreadPool::Worker::Main(unsigned long) + 116
    5   Flutter                       	       0x10706faa8 dart::ThreadStart(void*) + 208
    6   libsystem_pthread.dylib       	       0x1043465ac _pthread_start + 104
    7   libsystem_pthread.dylib       	       0x104341998 thread_start + 8
    
    
    Thread 0 crashed with ARM Thread State (64-bit):
        x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x0000000000000000
        x4: 0x0000000180306cab   x5: 0x000000016bdf3a80   x6: 0x000000000000006e   x7: 0x0000000000000000
        x8: 0x00000001041fde40   x9: 0xbb51dd3688ea0248  x10: 0x0000000000000002  x11: 0x0000010000000000
       x12: 0x00000000fffffffd  x13: 0x0000000000000000  x14: 0x0000000000000000  x15: 0x0000000000000000
       x16: 0x0000000000000148  x17: 0x0000000000000002  x18: 0x0000000000000000  x19: 0x0000000000000006
       x20: 0x0000000000000103  x21: 0x00000001041fdf20  x22: 0x00000001f2d7c000  x23: 0x00000001e60cc500
       x24: 0x0000600000009260  x25: 0x00006000017416c0  x26: 0x0000000000000000  x27: 0x000000000000005b
       x28: 0x0000000000000114   fp: 0x000000016bdf39f0   lr: 0x00000001043462a8
        sp: 0x000000016bdf39d0   pc: 0x000000010406c85c cpsr: 0x40000000
       far: 0x0000000000000000  esr: 0x56000080 (Syscall)
    
    Binary Images:
           0x104150000 -        0x1041effff dyld (*) <0975afba-c46b-364c-bd84-a75daa9e455a> /usr/lib/dyld
           0x104008000 -        0x10400bfff com.example.dec11 (1.0.0) <90dee168-327d-35d2-bbcf-d7f4e240f084> /Users/USER/Library/Developer/CoreSimulator/Devices/38A254E7-D296-46C5-A230-5978A86CC1BD/data/Containers/Bundle/Application/E94D64FD-2245-4E12-804D-E324F5E6E674/Runner.app/Runner
           0x104040000 -        0x104047fff Runner.debug.dylib (*) <4891c4c5-33e0-3c59-aa97-5bf843e46ff2> /Users/USER/Library/Developer/CoreSimulator/Devices/38A254E7-D296-46C5-A230-5978A86CC1BD/data/Containers/Bundle/Application/E94D64FD-2245-4E12-804D-E324F5E6E674/Runner.app/Runner.debug.dylib
           0x1069f0000 -        0x108867fff io.flutter.flutter (1.0) <4c4c4448-5555-3144-a1b7-c57b4313cd63> /Users/USER/Library/Developer/CoreSimulator/Devices/38A254E7-D296-46C5-A230-5978A86CC1BD/data/Containers/Bundle/Application/E94D64FD-2245-4E12-804D-E324F5E6E674/Runner.app/Frameworks/Flutter.framework/Flutter
           0x104020000 -        0x104027fff libsystem_platform.dylib (*) <de4033bb-4a6b-317a-bda6-b3a408656844> /usr/lib/system/libsystem_platform.dylib
           0x104064000 -        0x10409ffff libsystem_kernel.dylib (*) <8f54f386-9b41-376a-9ba3-9423bbabb1b6> /usr/lib/system/libsystem_kernel.dylib
           0x104340000 -        0x10434ffff libsystem_pthread.dylib (*) <48ca2121-5ca2-3e04-bc91-a33151256e77> /usr/lib/system/libsystem_pthread.dylib
           0x104534000 -        0x10453ffff libobjc-trampolines.dylib (*) <f766081e-2450-3187-beb3-a18b5d825986> /Volumes/VOLUME/*/libobjc-trampolines.dylib
           0x180141000 -        0x1801be2c3 libsystem_c.dylib (*) <4be317ce-e19b-36b1-809a-b1fbf17587a8> /Volumes/VOLUME/*/libsystem_c.dylib
           0x1802f2000 -        0x18030a56f libc++abi.dylib (*) <854f9986-f066-3a26-8bd7-4c14dd25f58e> /Volumes/VOLUME/*/libc++abi.dylib
           0x180070000 -        0x1800ad297 libobjc.A.dylib (*) <bb867be3-83c2-3d97-84ef-4661b648229c> /Volumes/VOLUME/*/libobjc.A.dylib
           0x18085f000 -        0x1815aad7f com.apple.Foundation (6.9) <249188a3-8f44-3d76-acb0-0345a43eb0a3> /Volumes/VOLUME/*/Foundation.framework/Foundation
           0x1801bf000 -        0x1802041bf libdispatch.dylib (*) <da1dd2f7-9f16-387c-9c54-fe18cccb12d9> /Volumes/VOLUME/*/libdispatch.dylib
           0x1803c3000 -        0x1807df37f com.apple.CoreFoundation (6.9) <1ce7a90d-1134-3bfe-b564-88755edd6c85> /Volumes/VOLUME/*/CoreFoundation.framework/CoreFoundation
           0x1926bc000 -        0x1926c3dbf com.apple.GraphicsServices (1.0) <4150c740-636d-3fba-a5f1-3e1483221156> /Volumes/VOLUME/*/GraphicsServices.framework/GraphicsServices
           0x18516f000 -        0x1873836bf com.apple.UIKitCore (1.0) <55f9ab77-06fb-3839-9083-ddbf2b2608be> /Volumes/VOLUME/*/UIKitCore.framework/UIKitCore
                   0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???
    
    External Modification Summary:
      Calls made by other processes targeting this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by all processes on this machine:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
    
    VM Region Summary:
    ReadOnly portion of Libraries: Total=1.5G resident=0K(0%) swapped_out_or_unallocated=1.5G(100%)
    Writable regions: Total=794.6M written=2019K(0%) resident=2019K(0%) swapped_out=0K(0%) unallocated=792.6M(100%)
    
                                    VIRTUAL   REGION 
    REGION TYPE                        SIZE    COUNT (non-coalesced) 
    ===========                     =======  ======= 
    Activity Tracing                   256K        1 
    Foundation                          16K        1 
    IOSurface                         34.3M        4 
    Kernel Alloc Once                   32K        1 
    MALLOC                           620.0M       50 
    MALLOC guard page                  128K        8 
    STACK GUARD                       56.2M       15 
    Stack                             22.5M       17 
    VM_ALLOCATE                      126.0M      301 
    __DATA                            32.1M      602 
    __DATA_CONST                      82.5M      628 
    __DATA_DIRTY                       139K       13 
    __FONT_DATA                        2352        1 
    __LINKEDIT                       715.2M        9 
    __OBJC_RO                         62.6M        1 
    __OBJC_RW                         2773K        1 
    __TEXT                           849.1M      643 
    __TPRO_CONST                       148K        2 
    dyld private memory                2.2G       14 
    mapped file                      100.0M       20 
    page table in kernel              2019K        1 
    shared memory                       16K        1 
    ===========                     =======  ======= 
    TOTAL                              4.8G     2334 
    iOS - Console
    ════════ Exception caught by painting library ══════════════════════════════════
    The following ArgumentError was thrown while building a TextSpan:
    Invalid argument(s): string is not well-formed UTF-16
    
    When the exception was thrown, this was the stack:
    #0      _NativeParagraphBuilder.addText (dart:ui/text.dart:3721:7)
    text.dart:3721
    #1      TextSpan.build (package:flutter/src/painting/text_span.dart:298:17)
    text_span.dart:298
    #2      TextPainter._createParagraph (package:flutter/src/painting/text_painter.dart:1203:10)
    text_painter.dart:1203
    #3      TextPainter.layout (package:flutter/src/painting/text_painter.dart:1264:64)
    text_painter.dart:1264
    #4      RenderEditable.performLayout (package:flutter/src/rendering/editable.dart:2408:9)
    editable.dart:2408
    #5      RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #6      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #7      _RenderSizeChangedWithCallback.performLayout (package:flutter/src/widgets/size_changed_layout_notifier.dart:88:11)
    size_changed_layout_notifier.dart:88
    #8      RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #9      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #10     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #11     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #12     RenderLeaderLayer.performLayout (package:flutter/src/rendering/proxy_box.dart:4441:11)
    proxy_box.dart:4441
    #13     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #15     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #17     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #18     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #19     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #21     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #23     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #24     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #25     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #26     RenderTapRegion.layout (package:flutter/src/widgets/tap_region.dart:686:11)
    tap_region.dart:686
    #27     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #28     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #29     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #30     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #31     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:62:11)
    layout_helper.dart:62
    #32     _RenderDecoration._layout (package:flutter/src/material/input_decorator.dart:1073:67)
    input_decorator.dart:1073
    #33     _RenderDecoration.performLayout (package:flutter/src/material/input_decorator.dart:1388:44)
    input_decorator.dart:1388
    #34     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #35     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #36     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #38     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #39     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #40     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #41     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #42     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #43     RenderTapRegion.layout (package:flutter/src/widgets/tap_region.dart:686:11)
    tap_region.dart:686
    #44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #45     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #46     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:62:11)
    layout_helper.dart:62
    #47     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:1237:28)
    flex.dart:1237
    #48     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:1329:32)
    flex.dart:1329
    #49     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #50     RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:484:14)
    shifted_box.dart:484
    #51     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #52     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:180:12)
    custom_layout.dart:180
    #53     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1112:7)
    scaffold.dart:1112
    #54     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:246:7)
    custom_layout.dart:246
    #55     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:417:14)
    custom_layout.dart:417
    #56     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #58     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #60     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1482:11)
    proxy_box.dart:1482
    #61     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #62     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #63     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #64     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #65     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #66     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #67     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #68     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:62:11)
    layout_helper.dart:62
    #69     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:645:43)
    stack.dart:645
    #70     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:680:12)
    stack.dart:680
    #71     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #72     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #73     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #75     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #77     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #79     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #80     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #81     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #83     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3856:13)
    proxy_box.dart:3856
    #84     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #85     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #86     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #87     _RenderTheaterMixin.layoutChild (package:flutter/src/widgets/overlay.dart:1084:13)
    overlay.dart:1084
    #88     _RenderTheater.performLayout (package:flutter/src/widgets/overlay.dart:1429:9)
    overlay.dart:1429
    #89     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #90     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #91     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #92     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #93     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #94     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #95     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #96     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #97     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:574:11)
    custom_paint.dart:574
    #98     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #99     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #100    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #101    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #102    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #103    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #104    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #105    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #106    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #107    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #108    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #109    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #110    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #111    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #112    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #113    RenderView.performLayout (package:flutter/src/rendering/view.dart:292:12)
    view.dart:292
    #114    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2616:7)
    object.dart:2616
    #115    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1174:18)
    object.dart:1174
    #116    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1187:15)
    object.dart:1187
    #117    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:629:23)
    binding.dart:629
    #118    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1269:13)
    binding.dart:1269
    #119    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:495:5)
    binding.dart:495
    #120    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1430:15)
    binding.dart:1430
    #121    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1345:9)
    binding.dart:1345
    #122    SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1055:9)
    binding.dart:1055
    #123    PlatformDispatcher.scheduleWarmUpFrame.<anonymous closure> (dart:ui/platform_dispatcher.dart:906:16)
    platform_dispatcher.dart:906
    #127    _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:193:12)
    isolate_patch.dart:193
    (elided 3 frames from class _Timer and dart:async-patch)
    ════════════════════════════════════════════════════════════════════════════════
    Web - Console
    Could not find a set of Noto fonts to display all missing characters. Please add a font asset for the missing characters. See: https://docs.flutter.dev/cookbook/design/fonts
    Android - Console
    ════════ Exception caught by painting library ══════════════════════════════════
    The following ArgumentError was thrown while building a TextSpan:
    Invalid argument(s): string is not well-formed UTF-16
    
    When the exception was thrown, this was the stack:
    #0      _NativeParagraphBuilder.addText (dart:ui/text.dart:3721:7)
    text.dart:3721
    #1      TextSpan.build (package:flutter/src/painting/text_span.dart:298:17)
    text_span.dart:298
    #2      TextPainter._createParagraph (package:flutter/src/painting/text_painter.dart:1203:10)
    text_painter.dart:1203
    #3      TextPainter.layout (package:flutter/src/painting/text_painter.dart:1264:64)
    text_painter.dart:1264
    #4      RenderEditable.performLayout (package:flutter/src/rendering/editable.dart:2408:9)
    editable.dart:2408
    #5      RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #6      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #7      _RenderSizeChangedWithCallback.performLayout (package:flutter/src/widgets/size_changed_layout_notifier.dart:88:11)
    size_changed_layout_notifier.dart:88
    #8      RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #9      RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #10     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #11     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #12     RenderLeaderLayer.performLayout (package:flutter/src/rendering/proxy_box.dart:4441:11)
    proxy_box.dart:4441
    #13     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #15     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #17     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #18     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #19     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #21     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #23     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #24     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #25     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #26     RenderTapRegion.layout (package:flutter/src/widgets/tap_region.dart:686:11)
    tap_region.dart:686
    #27     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #28     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #29     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #30     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #31     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:62:11)
    layout_helper.dart:62
    #32     _RenderDecoration._layout (package:flutter/src/material/input_decorator.dart:1073:67)
    input_decorator.dart:1073
    #33     _RenderDecoration.performLayout (package:flutter/src/material/input_decorator.dart:1388:44)
    input_decorator.dart:1388
    #34     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #35     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #36     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #38     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #39     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #40     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #41     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #42     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #43     RenderTapRegion.layout (package:flutter/src/widgets/tap_region.dart:686:11)
    tap_region.dart:686
    #44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #45     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #46     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:62:11)
    layout_helper.dart:62
    #47     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:1237:28)
    flex.dart:1237
    #48     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:1329:32)
    flex.dart:1329
    #49     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #50     RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:484:14)
    shifted_box.dart:484
    #51     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #52     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:180:12)
    custom_layout.dart:180
    #53     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1112:7)
    scaffold.dart:1112
    #54     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:246:7)
    custom_layout.dart:246
    #55     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:417:14)
    custom_layout.dart:417
    #56     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #58     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #60     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1482:11)
    proxy_box.dart:1482
    #61     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #62     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #63     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #64     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #65     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #66     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #67     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #68     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #69     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #71     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #72     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #73     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #75     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #77     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #79     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #80     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #81     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #83     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #84     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #85     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #86     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #87     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #88     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #89     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #90     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #91     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #92     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #93     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3856:13)
    proxy_box.dart:3856
    #94     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #95     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #96     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #97     _RenderTheaterMixin.layoutChild (package:flutter/src/widgets/overlay.dart:1084:13)
    overlay.dart:1084
    #98     _RenderTheater.performLayout (package:flutter/src/widgets/overlay.dart:1429:9)
    overlay.dart:1429
    #99     RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #100    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #101    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #102    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #103    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #104    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #105    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #106    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #107    RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:574:11)
    custom_paint.dart:574
    #108    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #109    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #110    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #111    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #112    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #113    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #114    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #115    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #116    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #117    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #118    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #119    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:18)
    proxy_box.dart:116
    #120    RenderObject.layout (package:flutter/src/rendering/object.dart:2768:7)
    object.dart:2768
    #121    RenderView.performLayout (package:flutter/src/rendering/view.dart:292:12)
    view.dart:292
    #122    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2616:7)
    object.dart:2616
    #123    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1174:18)
    object.dart:1174
    #124    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1187:15)
    object.dart:1187
    #125    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:629:23)
    binding.dart:629
    #126    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1269:13)
    binding.dart:1269
    #127    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:495:5)
    binding.dart:495
    #128    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1430:15)
    binding.dart:1430
    #129    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1345:9)
    binding.dart:1345
    #130    SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1055:9)
    binding.dart:1055
    #131    PlatformDispatcher.scheduleWarmUpFrame.<anonymous closure> (dart:ui/platform_dispatcher.dart:906:16)
    platform_dispatcher.dart:906
    #135    _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:193:12)
    isolate_patch.dart:193
    (elided 3 frames from class _Timer and dart:async-patch)
    ════════════════════════════════════════════════════════════════════════════════
    I/m.example.dec11( 7888): AssetManager2(0xb400007b18440b98) locale list changing from [] to [en-US]
    D/FlutterJNI( 7888): Sending viewport metrics to the engine.
    D/InsetsController( 7888): hide(ime(), fromIme=false)
    I/ImeTracker( 7888): com.example.dec11:67ed04ec: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
    D/ProfileInstaller( 7888): Installing profile for com.example.dec11
    I/ImeTracker( 7888): com.example.dec11:e4504e69: onRequestShow at ORIGIN_CLIENT reason SHOW_SOFT_INPUT fromUser false
    D/InsetsController( 7888): show(ime(), fromIme=false)
    D/InsetsController( 7888): Setting requestedVisibleTypes to -1 (was -9)
    D/InputConnectionAdaptor( 7888): The input method toggled cursor monitoring on
    I/AssistStructure( 7888): Flattened final assist data: 416 bytes, containing 1 windows, 3 views
    W/InteractionJankMonitor( 7888): Initializing without READ_DEVICE_CONFIG permission. enabled=false, interval=1, missedFrameThreshold=3, frameTimeThreshold=64, package=com.example.dec11
    13
    D/FlutterJNI( 7888): Sending viewport metrics to the engine.
    I/ImeTracker( 7888): com.example.dec11:e4504e69: onShown
    2
    D/FlutterJNI( 7888): Sending viewport metrics to the engine.

    #138464 might be related.

  3. added
    a: text inputEntering text in a text field or keyboard related problems
    platform-iosiOS applications specifically
    frameworkflutter/packages/flutter repository. See also f: labels.
    engineflutter/engine related. See also e: labels.
    p: material_uimaterial_ui package in flutter/packages
    platform-macosBuilding on or for macOS specifically
    c: crashStack traces logged to the console
    a: error messageError messages from the Flutter framework
    has reproducible stepsThe issue has been confirmed reproducible and is ready to work on
    c: fatal crashCrashes that terminate the process
    on Dec 11, 2025
  4. 1 remaining item

  5. added
    P1High-priority issues at the top of the work list
    on Dec 11, 2025
  6. loic-sharma commented on Dec 11, 2025

    @loic-sharma
    Member

    This seems to be an Objective-C crash, I suspect we should redirect this to the iOS team. I'll investigate and reroute if necessary.

  7. loic-sharma commented on Dec 17, 2025

    @loic-sharma
    Member

    In this scenario, the framework encodes a TextInput.setEditingState JSON message with a text value that contains a lone surrogate. Dart's JSON encoder escapes the lone surrogate, but iOS's NSJSONSerialization is unable to decode this escaped lone surrogate.

    Here's what the encoded JSON looks like:

    {"method":"TextInput.setEditingState","args":{"text":"\udfff","selectionBase":1,"selectionExtent":1,"selectionAffinity":"TextAffinity.upstream","selectionIsDirectional":false,"composingBase":-1,"composingExtent":-1}}

    It seems that iOS's JSON decoder will need to be fixed to support decoding Dart's pattern for escaping lone surrogates:

    - (id)decode:(NSData*)message {
    if ([message length] == 0) {
    return nil;
    }
    BOOL isSimpleValue = NO;
    id decoded = nil;
    NSError* error;
    if (0 < message.length) {
    UInt8 first;
    [message getBytes:&first length:1];
    isSimpleValue = first != '{' && first != '[';
    if (isSimpleValue) {
    // NSJSONSerialization does not support top-level simple values.
    // We expand encoding to singleton array, then decode that and extract
    // the single entry.
    UInt8 begin = '[';
    UInt8 end = ']';
    NSMutableData* expandedMessage = [NSMutableData dataWithLength:message.length + 2];
    [expandedMessage replaceBytesInRange:NSMakeRange(0, 1) withBytes:&begin];
    [expandedMessage replaceBytesInRange:NSMakeRange(1, message.length) withBytes:message.bytes];
    [expandedMessage replaceBytesInRange:NSMakeRange(message.length + 1, 1) withBytes:&end];
    message = expandedMessage;
    }
    decoded = [NSJSONSerialization JSONObjectWithData:message options:0 error:&error];
    }
    NSAssert(decoded, @"Invalid JSON message, decoding failed: %@", error);
    return isSimpleValue ? ((NSArray*)decoded)[0] : decoded;
    }

    You can reproduce this problem by adding the following unit test to shell/platform/darwin/common/framework/Source/flutter_codecs_unittest.mm:

    TEST(FlutterJSONCodec, CanDecodeDartEncodedLoneSurrogate) {
      NSString *value = @R"({"text":"\udfff"})";
      NSData* encoded = [[FlutterStringCodec sharedInstance] encode:value];
      NSDictionary* decoded = [[FlutterJSONMessageCodec sharedInstance] decode:encoded];
      ASSERT_TRUE(decoded != nil);
    }

    I'll review my findings with my co-workers in this week's text input triage. If they agree the fix should be in the iOS embedder, I'll redirect this issue to the iOS team. cc @LongCatIsLooong.

    I'll downgrade this from a P1 to a P2 since this does not appear to be a recent regression.

  8. added
    P2Important issues not at the top of the work list
    team-iosOwned by iOS platform team
    and removed
    P1High-priority issues at the top of the work list
    on Dec 17, 2025
  9. loic-sharma commented on Dec 18, 2025

    @loic-sharma
    Member

    Redirecting this to the iOS team. It seems the iOS embedder will need to be updated to be able to decode JSON strings that Dart escaped due to lone surrogates. It's possible the iOS embedder might have additional issues with these malformed strings even after we fix this JSON decoding..

  10. LongCatIsLooong commented on Jan 2, 2026

    @LongCatIsLooong
    Contributor

    I'm leaning towards the framework asserting when you get a malformed string instead of trying to handle unpaired surrogates (the framework is already doing that in some places, e.g.,

    static int _codePointFromSurrogates(int highSurrogate, int lowSurrogate) {
    , because the framework isn't acting merely as an interface between the system services and the text field UI, some parts of the framework also consume the string).

    I think it should be up to the app developer to sanitize the user input, IIRC it's almost never desirable/intentional to have unpaired surrogates in your string (unless you're trying to break something).

    I agree that the crash shouldn't happen in production but there are so many services (for example the input method) that are going to be consuming the string and it's very difficult to guarantee that all of them can handle malformed strings so from that perspective we should fail faster.

    Also the JSON spec says the unpaired surrogate can be escaped but it's not required. I suspect the GTK and windows implementation will have the same problem to some degree, IIRC they use UTF8.

  11. mahmuttaskiran commented on Jan 5, 2026

    @mahmuttaskiran
    ContributorAuthor

    I'm leaning towards the framework asserting when you get a malformed string instead of trying to handle unpaired surrogates (the framework is already doing that in some places, e.g.,

    flutter/packages/flutter/lib/src/painting/text_painter.dart

    Line 190 in c00f050

    static int _codePointFromSurrogates(int highSurrogate, int lowSurrogate) {
    , because the framework isn't acting merely as an interface between the system services and the text field UI, some parts of the framework also consume the string).
    I think it should be up to the app developer to sanitize the user input, IIRC it's almost never desirable/intentional to have unpaired surrogates in your string (unless you're trying to break something).

    I agree that the crash shouldn't happen in production but there are so many services (for example the input method) that are going to being consuming the string and it's very difficult to guarantee that all of them can handle malformed strings so from that perspective we should fail faster.

    Also the JSON spec says the unpaired surrogate can be escaped but it's not required. I suspect the GTK and windows implementation will have the same problem to some degree, IIRC they use UTF8.

    Thank you @LongCatIsLooong for the review and your input.

    We’ve fixed the issue on our side by implementing a sanitizer in Dart and applying it as a TextField formatter. However, I believe this issue should also be addressed at the engine level, as the app should not crash in production.

    We observed crashes in some user flows caused by a system channel call (JSON with a malformed string). We were unable to reproduce the issue as an end user, but we were able to reproduce it in code by manually providing a malformed string (half of a surrogate pair).

    This suggests that other system channel calls may also receive malformed strings and potentially crash the app. In practice, we may never know the exact source of such input—it could come from a speech-to-text service, a custom keyboard, or another external provider.

    As you mentioned, many services consume strings, and it’s difficult to guarantee that malformed input will never occur.

    On Android, system channel calls are sanitized, so no crash occurs.
    On iOS and macOS, the app crashes.

    I haven’t been able to test this on Windows/Linux platforms yet.

    I see that you reviewed #179775, it basically avoids crash by returning nil and skipping the system call. It might not be the optimal solution as it's discussed in the comments.

    But there is another PR (#179978) introducing a sanitizer to fix the problem. Could you please review it and share your ideas on that?

  12. LongCatIsLooong commented on Jan 8, 2026

    @LongCatIsLooong
    Contributor

    Yeah the approach makes sense, however when unpaired surrogates are discarded and replaced with the replacement character in text fields, the framework will likely receive an update telling it that the string in the text field has changed, and the framework would usually invoke user callbacks like TextField.onChanged assuming the change is user input originated from the IME.

    This IMO is acceptable but not ideal, and in that case I think it's more important to let developers know that if you have malformed strings in a text field, it may not crash in production but the behavior is not defined so all bets are off.

  13. added
    packageflutter/packages repository. See also p: labels.
    and removed
    frameworkflutter/packages/flutter repository. See also f: labels.
    on Aug 17, 2026
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: error messageError messages from the Flutter frameworka: text inputEntering text in a text field or keyboard related problemsc: crashStack traces logged to the consolec: fatal crashCrashes that terminate the processengineflutter/engine related. See also e: labels.found in release: 3.38Found to occur in 3.38found in release: 3.40Found to occur in 3.40has reproducible stepsThe issue has been confirmed reproducible and is ready to work onp: material_uimaterial_ui package in flutter/packagespackageflutter/packages repository. See also p: labels.platform-iosiOS applications specificallyplatform-macosBuilding on or for macOS specificallyteam-iosOwned by iOS platform teamtriaged-iosTriaged by iOS platform team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions