flutter 里面的全局变量(给web开发者)
论在flutter里面使用全局变量
先定义一下,什么是全局变量,我大概这样定义: 变量不会被销毁,多个文件访问同一个变量
在web里面,js有window对象,只要界面不刷新,是spa应用它就不会被干掉,在里面可以为所欲为,很好理解。
可是在dart里面,可没有这个东西,愁死我了。
往期文章
需求
整个app里面,只需要执行一次的东西多了去了,比如请求
、sqlite
、navigatorKey
这几个东西在前面几个文章都说过了,但是一直没有正视初始化
然后应该怎么做了,搜索,寻找方法
寻找仙丹
搜出来有这些东西

可以看出,有InheritedWidget
这个玩意。
其他的文章点开都是这么写,要么是状态管理之类的。
而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群友

转载自:https://juejin.cn/post/6844904002757328903