論在flutter裏面使用全局變量web
先定義一下,什麼是全局變量,我大概這樣定義: 變量不會被銷燬,多個文件訪問同一個變量sql
在web裏面,js有window對象,只要界面不刷新,是spa應用它就不會被幹掉,在裏面能夠隨心所欲,很好理解。數據庫
但是在dart裏面,可沒有這個東西,愁死我了。bash
flutter - sqlite數據庫小白入門
flutter-讀寫二進制文件到設備
flutter-登陸token本地存儲(shared_preferences)、路由攔截app
整個app裏面,只須要執行一次的東西多了去了,好比請求
、sqlite
、navigatorKey
async
這幾個東西在前面幾個文章都說過了,可是一直沒有正視初始化post
而後應該怎麼作了,搜索,尋找方法ui
搜出來有這些東西spa
能夠看出,有InheritedWidget
這個玩意。code
其餘的文章點開都是這麼寫,要麼是狀態管理之類的。
而InheritedWidget是基於widget的高級產物,說白了就是裏面的一種通信方法,本質上也是層層傳遞。
這時候咱們須要全局變量,怎麼辦。
1,它支持全局變量
2,它不支持全局變量
若是支持,那麼找到方法,若是不支持,那麼必定是經過數據層層傳遞,總不能飛吧。
除了這個就是硬件支持,直接寫入本地。可是這個不能知足需求,本地只能進行序列化,而後再反系列化,並且很麻煩。
看了上面的文章,有大概方法的就是這個文章了
但是這貨,好像是存到本地,看到他用了SharedPreferences.
難道他不是靠這個實現的,只是對全局變量的定義不同??
在flutter裏面,多個文件引用同一個dart文件,只會執行一次。變量是共享的。
(也就是,什麼都不用作)
新建一個dart文件
在A界面修改值(A.dart)
在B界面獲取值(B.dart)
而後看下執行結果
嗯,修改了。。他們確實使用同一個變量。
db.dart
複製代碼
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Database db;
Future<String> initDB()async{
return new Future(() async{
String table_book_name = 'books';
String createSql = ''' CREATE TABLE $table_book_name ( id INTEGER, bookname STRING, ); ''';
// 初始化
db = await openDatabase(
join(await getDatabasesPath(), '.db'),
onCreate: (Database db, int version) async{
// 新建表
db.execute(createSql);
},
version: 1,
);
});
}
複製代碼
入口引入,而後執行initDB
其餘界面引入db.dart,而後直接使用db
感謝這兩位flutter羣友