title: Flutter Unimplemented handling of missing static target
body: <p>I am writing an App in Flutter, but recently I always get a <code>Unimplemented handling of missing static target</code>. </p>
  
  <p>I run the App on a physical Android device because I need to communicate via Bluetooth, and that seems a bit tricky to set up in an Emulator. </p>
  
  <p>I saw some Questions here where the same problem was present, but no one actually explained what happened there, and how to avoid it, and only some Trial-and-error-solutions were posted. </p>
  
  <p>My error and output during running:</p>
  
  <pre><code>Launching lib\main.dart on K00C in debug mode...
  Running Gradle task 'assembleDebug'...
  E/DartVM  (17171): vm-service: Error: Unhandled exception:
  E/DartVM  (17171): Unimplemented handling of missing static target
  E/DartVM  (17171): #0      serviceAuthToken (dart:_vmservice:44:33)
  E/DartVM  (17171): #1      serviceAuthToken (dart:_vmservice:44:14)
  E/DartVM  (17171): #2      Server.serverAddress (dart:vmservice_io/server.dart:164:40)
  E/DartVM  (17171): #3      Server.startup (dart:vmservice_io/server.dart:432:44)
  E/DartVM  (17171): &lt;asynchronous suspension&gt;
  E/DartVM  (17171): #4      main (dart:vmservice_io:262:12)
  E/DartVM  (17171): 
  E/flutter (17171): [ERROR:flutter/runtime/dart_isolate.cc(915)] Unhandled exception:
  E/flutter (17171): Unimplemented handling of missing static target
  E/flutter (17171): #0      serviceAuthToken (dart:_vmservice:44:33)
  E/flutter (17171): #1      serviceAuthToken (dart:_vmservice:44:14)
  E/flutter (17171): #2      Server.serverAddress (dart:vmservice_io/server.dart:164:40)
  E/flutter (17171): #3      Server.startup (dart:vmservice_io/server.dart:432:44)
  E/flutter (17171): &lt;asynchronous suspension&gt;
  E/flutter (17171): #4      main (dart:vmservice_io:262:12)
  √ Built build\app\outputs\apk\debug\app-debug.apk.
  Debug service listening on ws://127.0.0.1:63455/6QCnX6crt0s=/ws
  Syncing files to device K00C...
  I/dalvikvm(17626): Could not find method android.content.Context.createDeviceProtectedStorageContext, referenced from method androidx.core.content.ContextCompat.createDeviceProtectedStorageContext
  W/dalvikvm(17626): VFY: unable to resolve virtual method 365: Landroid/content/Context;.createDeviceProtectedStorageContext ()Landroid/content/Context;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getCodeCacheDir, referenced from method androidx.core.content.ContextCompat.getCodeCacheDir
  W/dalvikvm(17626): VFY: unable to resolve virtual method 372: Landroid/content/Context;.getCodeCacheDir ()Ljava/io/File;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getColor, referenced from method androidx.core.content.ContextCompat.getColor
  W/dalvikvm(17626): VFY: unable to resolve virtual method 373: Landroid/content/Context;.getColor (I)I
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getColorStateList, referenced from method androidx.core.content.ContextCompat.getColorStateList
  W/dalvikvm(17626): VFY: unable to resolve virtual method 374: Landroid/content/Context;.getColorStateList (I)Landroid/content/res/ColorStateList;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getDataDir, referenced from method androidx.core.content.ContextCompat.getDataDir
  W/dalvikvm(17626): VFY: unable to resolve virtual method 376: Landroid/content/Context;.getDataDir ()Ljava/io/File;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getDrawable, referenced from method androidx.core.content.ContextCompat.getDrawable
  W/dalvikvm(17626): VFY: unable to resolve virtual method 378: Landroid/content/Context;.getDrawable (I)Landroid/graphics/drawable/Drawable;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getNoBackupFilesDir, referenced from method androidx.core.content.ContextCompat.getNoBackupFilesDir
  W/dalvikvm(17626): VFY: unable to resolve virtual method 386: Landroid/content/Context;.getNoBackupFilesDir ()Ljava/io/File;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getSystemService, referenced from method androidx.core.content.ContextCompat.getSystemService
  W/dalvikvm(17626): VFY: unable to resolve virtual method 393: Landroid/content/Context;.getSystemService (Ljava/lang/Class;)Ljava/lang/Object;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.getSystemServiceName, referenced from method androidx.core.content.ContextCompat.getSystemServiceName
  W/dalvikvm(17626): VFY: unable to resolve virtual method 395: Landroid/content/Context;.getSystemServiceName (Ljava/lang/Class;)Ljava/lang/String;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.isDeviceProtectedStorage, referenced from method androidx.core.content.ContextCompat.isDeviceProtectedStorage
  W/dalvikvm(17626): VFY: unable to resolve virtual method 398: Landroid/content/Context;.isDeviceProtectedStorage ()Z
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  I/dalvikvm(17626): Could not find method android.content.Context.startForegroundService, referenced from method androidx.core.content.ContextCompat.startForegroundService
  W/dalvikvm(17626): VFY: unable to resolve virtual method 411: Landroid/content/Context;.startForegroundService (Landroid/content/Intent;)Landroid/content/ComponentName;
  D/dalvikvm(17626): VFY: replacing opcode 0x6e at 0x0006
  F/libc    (17626): Fatal signal 11 (SIGSEGV) at 0x2bc9ce80 (code=1), thread 17726 (utter_bluetooth)
  process stopped due to unexpected signal 27
  Lost connection to device.
  Could not update files on device: HttpException: Connection closed before full header was received, uri = http://127.0.0.1:63455/6QCnX6crt0s=/
  </code></pre>
  
  <p>My code:</p>
  
  <pre><code>// For performing some operations asynchronously
  import 'dart:async';
  import 'dart:convert';
  import 'dart:typed_data';
  
  // For using PlatformException
  import 'package:flutter/services.dart';
  
  import 'package:flutter/material.dart';
  import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart';
  
  void main() =&gt; runApp(MyApp());
  
  class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: BluetoothApp(),
      );
    }
  }
  
  class BluetoothApp extends StatefulWidget {
    @override
    _BluetoothAppState createState() =&gt; _BluetoothAppState();
  }
  
  class _BluetoothAppState extends State&lt;BluetoothApp&gt; {
    // Initializing the Bluetooth connection state to be unknown
    BluetoothState _bluetoothState = BluetoothState.UNKNOWN;
    // Initializing a global key, as it would help us in showing a SnackBar later
    final GlobalKey&lt;ScaffoldState&gt; _scaffoldKey = new GlobalKey&lt;ScaffoldState&gt;();
    // Get the instance of the Bluetooth
    FlutterBluetoothSerial _bluetooth = FlutterBluetoothSerial.instance;
    // Track the Bluetooth connection with the remote device
    BluetoothConnection connection;
  
    int _deviceState;
  
    bool isDisconnecting = false;
  
    Map&lt;String, Color&gt; colors = {
      'onBorderColor': Colors.green,
      'offBorderColor': Colors.red,
      'neutralBorderColor': Colors.transparent,
      'onTextColor': Colors.green[700],
      'offTextColor': Colors.red[700],
      'neutralTextColor': Colors.blue,
    };
  
    // To track whether the device is still connected to Bluetooth
    bool get isConnected =&gt; connection != null &amp;&amp; connection.isConnected;
  
    // Define some variables, which will be required later
    List&lt;BluetoothDevice&gt; _devicesList = [];
    BluetoothDevice _device;
    bool _connected = false;
    bool _isButtonUnavailable = false;
  
    @override
    void initState() {
      super.initState();
  
      // Get current state
      FlutterBluetoothSerial.instance.state.then((state) {
        setState(() {
          _bluetoothState = state;
        });
      });
  
      _deviceState = 0; // neutral
  
      // If the bluetooth of the device is not enabled,
      // then request permission to turn on bluetooth
      // as the app starts up
      enableBluetooth();
  
      // Listen for further state changes
      FlutterBluetoothSerial.instance
          .onStateChanged()
          .listen((BluetoothState state) {
        setState(() {
          _bluetoothState = state;
          if (_bluetoothState == BluetoothState.STATE_OFF) {
            _isButtonUnavailable = true;
          }
          getPairedDevices();
        });
      });
    }
  
    @override
    void dispose() {
      // Avoid memory leak and disconnect
      if (isConnected) {
        isDisconnecting = true;
        connection.dispose();
        connection = null;
      }
  
      super.dispose();
    }
  
    // Request Bluetooth permission from the user
    Future&lt;void&gt; enableBluetooth() async {
      // Retrieving the current Bluetooth state
      _bluetoothState = await FlutterBluetoothSerial.instance.state;
  
      // If the bluetooth is off, then turn it on first
      // and then retrieve the devices that are paired.
      if (_bluetoothState == BluetoothState.STATE_OFF) {
        await FlutterBluetoothSerial.instance.requestEnable();
        await getPairedDevices();
        return true;
      } else {
        await getPairedDevices();
      }
      return false;
    }
  
    // For retrieving and storing the paired devices
    // in a list.
    Future&lt;void&gt; getPairedDevices() async {
      List&lt;BluetoothDevice&gt; devices = [];
  
      // To get the list of paired devices
      try {
        devices = await _bluetooth.getBondedDevices();
      } on PlatformException {
        print("Error");
      }
  
      // It is an error to call [setState] unless [mounted] is true.
      if (!mounted) {
        return;
      }
  
      // Store the [devices] list in the [_devicesList] for accessing
      // the list outside this class
      setState(() {
        _devicesList = devices;
      });
    }
  
    // Now, its time to build the UI
    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          key: _scaffoldKey,
          appBar: AppBar(
            title: Text("Flutter Bluetooth"),
            backgroundColor: Colors.deepPurple,
            actions: &lt;Widget&gt;[
              FlatButton.icon(
                icon: Icon(
                  Icons.refresh,
                  color: Colors.white,
                ),
                label: Text(
                  "Refresh",
                  style: TextStyle(
                    color: Colors.white,
                  ),
                ),
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(30),
                ),
                splashColor: Colors.deepPurple,
                onPressed: () async {
                  // So, that when new devices are paired
                  // while the app is running, user can refresh
                  // the paired devices list.
                  await getPairedDevices().then((_) {
                    show('Device list refreshed');
                  });
                },
              ),
            ],
          ),
          body: Container(
            child: Column(
              mainAxisSize: MainAxisSize.max,
              children: &lt;Widget&gt;[
                Visibility(
                  visible: _isButtonUnavailable &amp;&amp;
                      _bluetoothState == BluetoothState.STATE_ON,
                  child: LinearProgressIndicator(
                    backgroundColor: Colors.yellow,
                    valueColor: AlwaysStoppedAnimation&lt;Color&gt;(Colors.red),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(10),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: &lt;Widget&gt;[
                      Expanded(
                        child: Text(
                          'Enable Bluetooth',
                          style: TextStyle(
                            color: Colors.black,
                            fontSize: 16,
                          ),
                        ),
                      ),
                      Switch(
                        value: _bluetoothState.isEnabled,
                        onChanged: (bool value) {
                          future() async {
                            if (value) {
                              await FlutterBluetoothSerial.instance
                                  .requestEnable();
                            } else {
                              await FlutterBluetoothSerial.instance
                                  .requestDisable();
                            }
  
                            await getPairedDevices();
                            _isButtonUnavailable = false;
  
                            if (_connected) {
                              _disconnect();
                            }
                          }
  
                          future().then((_) {
                            setState(() {});
                          });
                        },
                      )
                    ],
                  ),
                ),
                Stack(
                  children: &lt;Widget&gt;[
                    Column(
                      children: &lt;Widget&gt;[
                        Padding(
                          padding: const EdgeInsets.only(top: 10),
                          child: Text(
                            "PAIRED DEVICES",
                            style: TextStyle(fontSize: 24, color: Colors.blue),
                            textAlign: TextAlign.center,
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: &lt;Widget&gt;[
                              Text(
                                'Device:',
                                style: TextStyle(
                                  fontWeight: FontWeight.bold,
                                ),
                              ),
                              DropdownButton(
                                items: _getDeviceItems(),
                                onChanged: (value) =&gt;
                                    setState(() =&gt; _device = value),
                                value: _devicesList.isNotEmpty ? _device : null,
                              ),
                              RaisedButton(
                                onPressed: _isButtonUnavailable
                                    ? null
                                    : _connected ? _disconnect : _connect,
                                child:
                                    Text(_connected ? 'Disconnect' : 'Connect'),
                              ),
                            ],
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(16.0),
                          child: Card(
                            shape: RoundedRectangleBorder(
                              side: new BorderSide(
                                color: _deviceState == 0
                                    ? colors['neutralBorderColor']
                                    : _deviceState == 1
                                        ? colors['onBorderColor']
                                        : colors['offBorderColor'],
                                width: 3,
                              ),
                              borderRadius: BorderRadius.circular(4.0),
                            ),
                            elevation: _deviceState == 0 ? 4 : 0,
                            child: Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: Row(
                                children: &lt;Widget&gt;[
                                  Expanded(
                                    child: Text(
                                      "DEVICE 1",
                                      style: TextStyle(
                                        fontSize: 20,
                                        color: _deviceState == 0
                                            ? colors['neutralTextColor']
                                            : _deviceState == 1
                                                ? colors['onTextColor']
                                                : colors['offTextColor'],
                                      ),
                                    ),
                                  ),
                                  FlatButton(
                                    onPressed: _connected
                                        ? _sendOnMessageToBluetooth
                                        : null,
                                    child: Text("ON"),
                                  ),
                                  FlatButton(
                                    onPressed: _connected
                                        ? _sendSerMessageToBluetooth
                                        : null,
                                    child: Text("OFF"),
                                  ),
                                ],
                              ),
                            ),
                          ),
                        ),
                      ],
                    ),
                    Container(
                      color: Colors.blue,
                    ),
                  ],
                ),
                Expanded(
                  child: Padding(
                    padding: const EdgeInsets.all(20),
                    child: Center(
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: &lt;Widget&gt;[
                          Text(
                            "NOTE: If you cannot find the device in the list, please pair the device by going to the bluetooth settings",
                            style: TextStyle(
                              fontSize: 15,
                              fontWeight: FontWeight.bold,
                              color: Colors.red,
                            ),
                          ),
                          SizedBox(height: 15),
                          RaisedButton(
                            elevation: 2,
                            child: Text("Bluetooth Settings"),
                            onPressed: () {
                              FlutterBluetoothSerial.instance.openSettings();
                            },
                          ),
                        ],
                      ),
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      );
    }
  
    // Create the List of devices to be shown in Dropdown Menu
    List&lt;DropdownMenuItem&lt;BluetoothDevice&gt;&gt; _getDeviceItems() {
      List&lt;DropdownMenuItem&lt;BluetoothDevice&gt;&gt; items = [];
      if (_devicesList.isEmpty) {
        items.add(DropdownMenuItem(
          child: Text('NONE'),
        ));
      } else {
        _devicesList.forEach((device) {
          items.add(DropdownMenuItem(
            child: Text(device.name),
            value: device,
          ));
        });
      }
      return items;
    }
  
    // Method to connect to bluetooth
    void _connect() async {
      setState(() {
        _isButtonUnavailable = true;
      });
      if (_device == null) {
        show('No device selected');
      } else {
        if (!isConnected) {
          await BluetoothConnection.toAddress(_device.address)
              .then((_connection) {
            print('Connected to the device');
            connection = _connection;
            setState(() {
              _connected = true;
            });
  
            connection.input.listen(_onDataReceived).onDone(() {
              if (isDisconnecting) {
                print('Disconnecting locally!');
              } else {
                print('Disconnected remotely!');
              }
              if (this.mounted) {
                setState(() {});
              }
            });
          }).catchError((error) {
            print('Cannot connect, exception occurred');
            print(error);
          });
          show('Device connected');
  
          setState(() =&gt; _isButtonUnavailable = false);
        }
      }
    }
  
    void _onDataReceived(Uint8List data) {
      // Allocate buffer for parsed data
      print(data);
      int backspacesCounter = 0;
      data.forEach((byte) {
        if (byte == 8 || byte == 127) {
          backspacesCounter++;
        }
      });
      Uint8List buffer = Uint8List(data.length - backspacesCounter);
      int bufferIndex = buffer.length;
  
      // Apply backspace control character
      backspacesCounter = 0;
      for (int i = data.length - 1; i &gt;= 0; i--) {
        if (data[i] == 8 || data[i] == 127) {
          backspacesCounter++;
        } else {
          if (backspacesCounter &gt; 0) {
            backspacesCounter--;
          } else {
            buffer[--bufferIndex] = data[i];
          }
        }
      }
    }
  
    // Method to disconnect bluetooth
    void _disconnect() async {
      setState(() {
        _isButtonUnavailable = true;
        _deviceState = 0;
      });
  
      await connection.close();
      show('Device disconnected');
      if (!connection.isConnected) {
        setState(() {
          _connected = false;
          _isButtonUnavailable = false;
        });
      }
    }
  
    // Method to send message,
    // for turning the Bluetooth device on
    void _sendOnMessageToBluetooth() async {
      connection.output.add(utf8.encode("1" + "\r\n"));
      await connection.output.allSent;
      show('Device Turned On');
      setState(() {
        _deviceState = 1; // device on
      });
    }
  
    // Method to send message,
    // for turning the Bluetooth device off
    void _sendSerMessageToBluetooth() async {
      connection.output.add(Uint8List.fromList([32, 33]));
      await connection.output.allSent;
  
      show('Device Turned Off');
      setState(() {
        _deviceState = -1; // device off
      });
    }
  
    // Method to show a Snackbar,
    // taking message as the text
    Future show(
      String message, {
      Duration duration: const Duration(seconds: 3),
    }) async {
      await new Future.delayed(new Duration(milliseconds: 100));
      _scaffoldKey.currentState.showSnackBar(
        new SnackBar(
          content: new Text(
            message,
          ),
          duration: duration,
        ),
      );
    }
  }
  
  
  void _onDataReceived(Uint8List data) {
    // Allocate buffer for parsed data
    int backspacesCounter = 0;
    data.forEach((byte) {
      if (byte == 8 || byte == 127) {
        backspacesCounter++;
      }
    });
    Uint8List buffer = Uint8List(data.length - backspacesCounter);  //
    int bufferIndex = buffer.length;
  
    // Apply backspace control character
    backspacesCounter = 0;
    for (int i = data.length - 1; i &gt;= 0; i--) {
      if (data[i] == 8 || data[i] == 127) {
        backspacesCounter++;
      } else {
        if (backspacesCounter &gt; 0) {
          backspacesCounter--;
        } else {
          buffer[--bufferIndex] = data[i];
        }
      }
    }
  
    // Create message if there is new line character
    String dataString = String.fromCharCodes(buffer);
  }
  </code></pre>
  
  <p>So if anyone knows a solution, please post it, even  if you don't know what exactly happened
  Also if anyone spots other mistakes that may cause errors in the Future, please tell me!</p>