[英]How can I fix "Future isn't a type" error in flutter?
我正在嘗試將我的 flutter 應用程序的應用程序數據存儲在數據庫中,但編譯器一直顯示異步函數的“Future isn't a 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);
}
}
昨天遇到了這個問題。 嘗試了一些修復此錯誤的建議,今天它通過執行以下操作起作用:
將 pubspec.yaml 中的 SDK 版本更新為至少 2.7.0(在此之前我的 sdk 版本是 2.2.0,我認為這會導致錯誤。至少 2.7.0 對我有用)。
environment: sdk: ">=2.7.0 <3.0.0"
運行 flutter clean
轉到文件 -> 使緩存無效/重新啟動並選擇“使緩存無效並重新啟動”
如果您運行的是 macOS,請打開 Activity Monitor 並終止 Dart(非常確定它占用了大約 90% 的 CPU)。 這將禁用 dart:async 庫並使風扇運行得異常響亮
如果您最近升級了 flutter,可能會導致問題。
升級后我也遇到過一次,但是一個簡單的 IDE 重新啟動為我解決了這個問題。 也許你可以試試。
你可以看看我在這里找到的這個線程。
如果它解決了問題,請告訴我。
我上周看到了這個問題。 這是您可以執行的操作,如果不固定,請按該順序移動:
確保你有dart:async導入
確保您的項目級別 sdk 設置正確
File -> Project Structure 在 Project 中,選擇有效的 Project SDK。 在 Modules -> myapp_android -> Dependencies 中,選擇一個有效的 Module SDK。
更新 pubspec.yaml 中的 SDK 版本
刷新緩存並重新啟動 Android Studio。
File -> Invalidate Caches/Restart 並選擇“Invalidate Caches and Restart”
就我而言,我缺少一個函數名,它在許多文件的許多位置出錯。 例如,而不是:
Future<bool> myFunction (int parm1)
不小心刪除了函數名,結果是:
Future<bool> (int parm1)
這給項目的許多文件帶來了問題,給出了“未來不是一種類型”的錯誤。 在錯誤列表中,也有缺少函數名稱的錯誤,因此糾正一個所有其他錯誤都消失了。
我以前多次遇到過這個問題。 對於我的情況...
轉到文件 -> 使緩存無效/重新啟動... -> 無效並重新啟動
我通過使用 vs 代碼遇到了這個問題。 我通過關閉並重新打開 vs 代碼解決了這個問題。
很多時候它是由於代碼中的一些其他編譯錯誤而發生的,與期貨無關。
只需嘗試解決其他編譯問題,錯誤可能會消失 go。
關閉ide並重新打開它,它起作用了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.