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
}

你能拿个样品看看我怎么才能等到完成?我的意思是,这是你第一次介绍的解决方案。我在回答中写了两行,你能拿一个样本,知道我怎样才能等着完成吗?我的意思是你第一次介绍的解决方案,我在回答中只写了两行