Float에서 "Future is not type" 오류를 수정하려면 어떻게 해야 합니까?
Float에서 "Future is not type" 오류를 수정하려면 어떻게 해야 합니까?
나는 내 플래터 애플리케이션의 앱 데이터를 데이터베이스에 저장하려고 하지만 컴파일러는 비동기 함수에 대해 "미래는 유형이 아니다"라고 계속 표시하고 빨간색 밑줄을 표시한다. .analysis-driver도 제거해봤지만, 도움이 되지 않아요. 어떻게 고칠 수 있을까요?
코드:
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
import 'dart:io';
class Db_Help{
static final _db_name="Work_tasks.db";
static final _db_version=1;
static final table="Work Table";
static final task_id="ID";
static final task="Task";
static final bool_check="Value";
static Database _database;
Db_Help._private_cons();
static final Db_Help instance=Db_Help._private_cons();
_initDatabase() async{
Directory docu_dir=await getApplicationDocumentsDirectory();
String path=join(docu_dir.path,_db_name);
return await openDatabase(path, version: _db_version, onCreate: _onCreate);
}
Future<Database> get database async{
if(_database!=null)
return _database;
_database=await _initDatabase();
return _database;
}
Future _onCreate(Database db, int version) async{
await db.execute('''
CREATE TABLE $table (
$task_id INTEGER PRIMARY KEY,
$task TEXT NOT NULL,
$bool_check INTEGER)
''');
}
Future<int> insert(Map<String,dynamic> row) async{
Database db= await instance.database;
return await db.insert(table, row);
}
}
만약 당신이 최근에 flatter를 업그레이드했다면 그것이 문제를 일으키고 있을 수도 있다.
나도 업그레이드 후에 한 번 직면했지만, 간단한 IDE 재시작으로 문제가 해결되었다. 시도해 볼 수 있을 거.
제가 찾은 이 실을 보세요.
그것이 문제를 해결할 수 있는지 알려주세요.
나는 이전에 이 문제에 여러 번 직면했다. 내 경우엔...
파일로 이동 -> 캐시 무효화/다시 시작... -> 무효화 후 다시 시작
어제 이 문제에 직면했다. 이 오류를 해결하기 위해 몇 가지 제안을 시도했지만 오늘은 다음과 같은 방법으로 작동했습니다:
pubspec.yaml의 SDK 버전을 2.7.0 이상으로 업데이트하십시오(이전에는 제 SDK 버전이 2.2.0이었고 그로 인해 오류가 발생한 것 같습니다). 적어도 2.7.0은 나를 위해 작동했다.
environment: sdk: ">=2.7.0 <3.0.0"
깨끗하게 뛰어라
파일 -> 캐시 무효화/재시작으로 이동하고 "캐시 무효화 및 재시작"을 선택합니다
macOS를 실행 중인 경우 Activity Monitor를 열고 Dart를 종료합니다(CPU가 최대 90%를 차지하는지 확인). 그러면 dart:sync 라이브러리가 비활성화되고 팬이 엄청나게 크게 실행됩니다
나의 경우 함수 이름이 누락되었고, 많은 파일에서 많은 위치에 오류가 발생했다. 예를 들어, 다음 대신:
Future<bool> myFunction (int parm1)
실수로 함수 이름을 삭제했기 때문에 결과는 다음과 같습니다:
Future<bool> (int parm1)
이로 인해 프로젝트의 많은 파일에 문제가 생겨 "Future is a type"이라는 오류가 발생했다. 오류 목록에는 함수 이름이 누락된 오류도 있어 수정하면 다른 오류가 모두 사라집니다.
아이디어를 닫았다가 다시 열었어요. 효과가 있었어
나는 지난주에 이 문제를 보았다. 다음은 고정되지 않은 경우 순서대로 이동하여 수행할 수 있는 작업입니다:
가져오기가 있는지 확인하십시오
프로젝트 수준 sdk가 올바르게 설정되었는지 확인하십시오
File -> Project Structure 프로젝트에서 유효한 Project SDK를 선택합니다. Modules -> myapp_android -> Dependencies에서 올바른 Module SDK를 선택합니다.
pubspec.yaml에서 SDK 버전을 업데이트합니다
캐시를 플러시하고 Android Studio를 다시 시작합니다.
파일 -> 캐시/재시작을 무효화하고 "캐시 무효화 및 재시작"을 선택합니다
나는 vs 코드를 사용하여 이 문제에 직면했다. 나는 vs 코드를 닫았다가 다시 열어 문제를 해결했다.
미래와 관련이 없는 코드의 다른 컴파일 오류 때문에 발생하는 경우가 많습니다.
다른 컴파일 문제를 해결하려고 하면 오류가 사라질 수 있습니다.
나는 같은 문제에 직면했지만, 나에게 있어, 그것은 Ide에 의해 언급된 Dart 버전이었다. Floating 버전 제어를 위해 사용하고 있었는데 Floating 버전을 에서 정의함으로써 이 문제를 해결했습니다.
"dart.flutterSdkPath": ".fvm/flutter_sdk",
아마도 당신이 flatter를 업그레이드했기 때문일 것이다. 당신은 yaml 파일에서 sdk 버전을 변경해야 한다. 정확한 sdk 버전을 얻으려면 새로운 프로젝트를 만들고 yaml 파일에서 sdk 버전을 확인한 다음, 그것을 당신의 프로젝트에 복사하고 캐시를 무효화하고 IDE를 다시 시작한다.
나의 경우, flot version control을 위해 fvm을, IDE를 위해 Android Studio를 사용하고 있었다. 이 문제는 안드로이드 sudio 프로젝트 sdk 경로에서 fvm flooter sdk를 정의함으로써 해결되었다.
Android Studio에서:
- Languages & Frameworks > Floating으로 이동하거나 Floating을 검색하여 Floating SDK 경로를 변경합니다.
- 루트 프로젝트 디렉토리에서 fvm 심볼릭 링크의 절대 경로를 복사합니다. 예: /absolute-project-path/.fvm/futter_sdk
- 변경 사항을 적용합니다.
- Android Studio를 다시 시작하여 적용된 새 설정을 확인합니다.
저는 Flooth sdk 버전을 업그레이드한 후에도 같은 문제에 직면했습니다. 문제는 내 flooter sdk 경로가 최신 경로로 설정되었지만 dart sdk 경로가 자동으로 업데이트되지 않았다는 것입니다(보통은 그렇게 됩니다).
해결 방법은 다음과 같습니다:
- 설정 > 언어 & 프레임워크 > 다트로 이동
- 새로 다운로드한 SDK의 dart SDK 경로를 [pathToNewFlutterSdk]/bin/cache/dart-sdk로 설정합니다.
- Apply and OK(적용 및 확인)를 누르면 이동할 수 있습니다.
- 적용하려면 IDE를 다시 시작해야 할 수도 있습니다.
사용하고 있는 것과 동일한 float-sdk의 dart-sdk 경로를 사용하고 있는지 확인하십시오.
플래터 버전을 업데이트한 후, 나는 이 문제에 직면했다.
그냥 해결했어요. 나를 위해 일했어요!!!