gpt4 book ai didi

Flutter 缺少静态目标的未实现处理

转载 作者:行者123 更新时间:2023-12-03 03:15:08 26 4
gpt4 key购买 nike

我正在用 Flutter 写一个 App,但最近我总是得到一个 Unimplemented handling of missing static target .

我在物理 Android 设备上运行该应用程序,因为我需要通过蓝牙进行通信,而在模拟器中设置似乎有点棘手。

我在这里看到了一些存在相同问题的问题,但没有人真正解释那里发生了什么,以及如何避免它,只发布了一些试错解决方案。

我在运行过程中的错误和输出:

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): <asynchronous suspension>
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): <asynchronous suspension>
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=/

我的代码:
// 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() => 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() => _BluetoothAppState();
}

class _BluetoothAppState extends State<BluetoothApp> {
// 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<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
// 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<String, Color> 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 => connection != null && connection.isConnected;

// Define some variables, which will be required later
List<BluetoothDevice> _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<void> 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<void> getPairedDevices() async {
List<BluetoothDevice> 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: <Widget>[
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: <Widget>[
Visibility(
visible: _isButtonUnavailable &&
_bluetoothState == BluetoothState.STATE_ON,
child: LinearProgressIndicator(
backgroundColor: Colors.yellow,
valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
),
),
Padding(
padding: const EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
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: <Widget>[
Column(
children: <Widget>[
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: <Widget>[
Text(
'Device:',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
DropdownButton(
items: _getDeviceItems(),
onChanged: (value) =>
setState(() => _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: <Widget>[
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: <Widget>[
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<DropdownMenuItem<BluetoothDevice>> _getDeviceItems() {
List<DropdownMenuItem<BluetoothDevice>> 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(() => _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 >= 0; i--) {
if (data[i] == 8 || data[i] == 127) {
backspacesCounter++;
} else {
if (backspacesCounter > 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 >= 0; i--) {
if (data[i] == 8 || data[i] == 127) {
backspacesCounter++;
} else {
if (backspacesCounter > 0) {
backspacesCounter--;
} else {
buffer[--bufferIndex] = data[i];
}
}
}

// Create message if there is new line character
String dataString = String.fromCharCodes(buffer);
}

因此,如果有人知道解决方案,请发布它,即使您不知道到底发生了什么
另外,如果有人发现其他可能导致 future 错误的错误,请告诉我!

最佳答案

在 IDE 的终端上:
flutter 干净

并重建项目。

这个错误是在构建没有插件的情况下发生的,并且构建后无法同步文件,因为初始热重载只能同步dart文件,而您的库依赖于 native 文件(java/kotlin/swift/objc) 然后methodchannel响应“未实现”

关于Flutter 缺少静态目标的未实现处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61287092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com