Asynchronous 颤振提取异步到分离器类和方法
在Asynchronous 颤振提取异步到分离器类和方法,asynchronous,flutter,dart,Asynchronous,Flutter,Dart,在main方法中,我有几行代码可以连接到数据库并正常工作 Future<void> main() async { final database = await $FloorAppDatabase.databaseBuilder('flutter_database.db').build(); final userDao = database.userDao; runApp(MaterialApp(...); } 例如,从类: Future<void> ma
main
方法中,我有几行代码可以连接到数据库并正常工作
Future<void> main() async {
final database = await $FloorAppDatabase.databaseBuilder('flutter_database.db').build();
final userDao = database.userDao;
runApp(MaterialApp(...);
}
例如,从类:
Future<void> main() async {
MyDatabase myDatabase = MyDatabase();
final userDao = myDatabase.userDao;
runApp(MaterialApp(...);
}
更新:范围模型的实施解决方案
class MydbModel extends Model {
MyDatabase myDatabase = MyDatabase();
Future _doneFuture;
MydbModel() {
_doneFuture= myDatabase.initialDatabase();
}
Future get initializationDone => _doneFuture;
}
class MyDatabase {
AppDatabase db;
UserDao userDao;
Future<void> initialDatabase() async {
db = await $FloorAppDatabase.databaseBuilder('flutter_database.db').build();
}
UserDao getUserDao() {
return db.userDao;
}
}
main() {
runApp(MaterialApp(
title: 'floor sample',
home: App(),
));
}
class App extends StatefulWidget {
App({Key key}) : super(key: key);
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: ScopedModel(
model: MydbModel(),
child: ScopedModelDescendant<MydbModel>(
builder: (context, _, model) => StreamBuilder<User>(
stream: model.myDatabase.userDao.getUserInfo(),
builder: (_, snapshot) {
if (!snapshot.hasData) {
return Text('user not found');
} else {
return Text('user found');
}
},
),
),
),
);
}
}
类MydbModel扩展了模型{
MyDatabase MyDatabase=MyDatabase();
未来;;
MydbModel(){
_doneFuture=myDatabase.initialDatabase();
}
Future get initializationDone=>\u doneFuture;
}
类MyDatabase{
数据库数据库;
UserDao UserDao;
Future initialDatabase()异步{
db=await$FloorAppDatabase.databaseBuilder('flatter_database.db').build();
}
UserDao getUserDao(){
返回db.userDao;
}
}
main(){
runApp(材料应用程序)(
标题:“地板样品”,
主页:App(),
));
}
类应用程序扩展StatefulWidget{
App({Key}):超级(Key:Key);
@凌驾
State createState()=>_AppState();
}
类_AppState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:ScopedModel(
模型:MydbModel(),
子项:ScopedModelSecondant(
构建器:(上下文、上下文、模型)=>StreamBuilder(
流:model.myDatabase.userDao.getUserInfo(),
构建器:(\uux,快照){
如果(!snapshot.hasData){
返回文本(“未找到用户”);
}否则{
返回文本(“用户找到”);
}
},
),
),
),
);
}
}
对于给定的类实现,您应该调用函数并等待它完成:
MyDatabase myDatabase = MyDatabase();
final userDao = await myDatabase.initialDatabase();
可选地,如果您不想每次重新创建数据库实例,请考虑将其分配给类成员
class MyDatabase {
AppDatabase db;
Future<void> initDb() async {
db = await $FloorAppDatabase.databaseBuilder('flutter_database.db').build();
}
UserDao getUserDao() {
return db.userDao;
}
// here may be other functions that use db
}
对于给定的类实现,您应该调用函数并等待它完成:
MyDatabase myDatabase = MyDatabase();
final userDao = await myDatabase.initialDatabase();
可选地,如果您不想每次重新创建数据库实例,请考虑将其分配给类成员
class MyDatabase {
AppDatabase db;
Future<void> initDb() async {
db = await $FloorAppDatabase.databaseBuilder('flutter_database.db').build();
}
UserDao getUserDao() {
return db.userDao;
}
// here may be other functions that use db
}
你能拿个样品看看我怎么才能等到完成?我的意思是,这是你第一次介绍的解决方案。我在回答中写了两行,你能拿一个样本,知道我怎样才能等着完成吗?我的意思是你第一次介绍的解决方案,我在回答中只写了两行