likes
comments
collection
share

flutter 里面的全局变量(给web开发者)

作者站长头像
站长
· 阅读数 15

论在flutter里面使用全局变量

先定义一下,什么是全局变量,我大概这样定义: 变量不会被销毁,多个文件访问同一个变量

在web里面,js有window对象,只要界面不刷新,是spa应用它就不会被干掉,在里面可以为所欲为,很好理解。

可是在dart里面,可没有这个东西,愁死我了。

往期文章

需求

整个app里面,只需要执行一次的东西多了去了,比如请求sqlitenavigatorKey

这几个东西在前面几个文章都说过了,但是一直没有正视初始化

然后应该怎么做了,搜索,寻找方法

寻找仙丹

搜出来有这些东西

flutter 里面的全局变量(给web开发者)

可以看出,有InheritedWidget这个玩意。

其他的文章点开都是这么写,要么是状态管理之类的。

而InheritedWidget是基于widget的高级产物,说白了就是里面的一种通讯方法,本质上也是层层传递。

这时候我们需要全局变量,怎么办。

冷静分析

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

如果支持,那么找到方法,如果不支持,那么一定是通过数据层层传递,总不能飞吧。

除了这个就是硬件支持,直接写入本地。但是这个不能满足需求,本地只能进行序列化,然后再反系列化,而且很麻烦。

看了上面的文章,有大概方法的就是这个文章了

flutter 里面的全局变量(给web开发者)

可是这货,好像是存到本地,看到他用了SharedPreferences.

难道他不是靠这个实现的,只是对全局变量的定义不一样??

正文

在flutter里面,多个文件引用同一个dart文件,只会执行一次。变量是共享的。

(也就是,什么都不用做)

验证

新建一个dart文件

flutter 里面的全局变量(给web开发者)

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

flutter 里面的全局变量(给web开发者)

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

flutter 里面的全局变量(给web开发者)

然后看下执行结果

flutter 里面的全局变量(给web开发者)

嗯,修改了。。他们确实使用同一个变量。

应用

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 里面的全局变量(给web开发者)

转载自:https://juejin.cn/post/6844904002757328903
评论
请登录