flutter 裏面的全局變量(給web開發者)

論在flutter裏面使用全局變量web

先定義一下,什麼是全局變量,我大概這樣定義: 變量不會被銷燬,多個文件訪問同一個變量sql

在web裏面,js有window對象,只要界面不刷新,是spa應用它就不會被幹掉,在裏面能夠隨心所欲,很好理解。數據庫

但是在dart裏面,可沒有這個東西,愁死我了。bash

往期文章

flutter - sqlite數據庫小白入門
flutter-讀寫二進制文件到設備
flutter-登陸token本地存儲(shared_preferences)、路由攔截app

需求

整個app裏面,只須要執行一次的東西多了去了,好比請求sqlitenavigatorKeyasync

這幾個東西在前面幾個文章都說過了,可是一直沒有正視初始化post

而後應該怎麼作了,搜索,尋找方法ui

尋找仙丹

搜出來有這些東西spa

能夠看出,有InheritedWidget這個玩意。code

其餘的文章點開都是這麼寫,要麼是狀態管理之類的。

而InheritedWidget是基於widget的高級產物,說白了就是裏面的一種通信方法,本質上也是層層傳遞。

這時候咱們須要全局變量,怎麼辦。

冷靜分析

1,它支持全局變量
2,它不支持全局變量

若是支持,那麼找到方法,若是不支持,那麼必定是經過數據層層傳遞,總不能飛吧。

除了這個就是硬件支持,直接寫入本地。可是這個不能知足需求,本地只能進行序列化,而後再反系列化,並且很麻煩。

看了上面的文章,有大概方法的就是這個文章了

但是這貨,好像是存到本地,看到他用了SharedPreferences.

難道他不是靠這個實現的,只是對全局變量的定義不同??

正文

在flutter裏面,多個文件引用同一個dart文件,只會執行一次。變量是共享的。

(也就是,什麼都不用作)

驗證

新建一個dart文件

在A界面修改值(A.dart)

在B界面獲取值(B.dart)

而後看下執行結果

嗯,修改了。。他們確實使用同一個變量。

應用

sqlite

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羣友

感謝這兩位flutter羣友
相關文章
相關標籤/搜索