Я пытаюсь реализовать библиотеку Floor , которая является оберткой для sqflite
, приведенный ниже код работает без проблем, но я хочу сделать ScopeModel
из этой реализации, но в этой userDao.getUserInfo()
возврат NULL
эта реализация работает нормально:
Future<void> main() async {
final database = await $FloorAppDatabase.databaseBuilder('flutter_database.db').build();
final userDao = database.userDao;
runApp(MaterialApp(
title: Strings.appName,
theme: ThemeData(
primarySwatch: Colors.indigo,
),
home: App(userDao: userDao),
));
}
class App extends StatefulWidget {
final UserDao userDao;
App({Key key, @required this.userDao}) : super(key: key);
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
UserDao get _userDao => widget.userDao;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: StreamBuilder<User>(
stream: _userDao.getUserInfo(),
builder: (_, snapshot) {
if (!snapshot.hasData)
return Center(child: Text('NULL'));
else {
return Center(child: Text('user registered'));
}
},
),
),
);
}
}
и моя реализация для использования ScopeModel
UserDao
класс:
@dao
abstract class UserDao{
@Query('SELECT * FROM User LIMIT 1')
Stream<User> getUserInfo();
@insert
Future<void> insertUserInformation(User user);
}
MyDatabase
класс:
class MyDatabase {
UserDao userDao;
Future<UserDao> initialDatabase ()async {
final database = await $FloorAppDatabase
.databaseBuilder('flutter_database.db')
.build();
return database.userDao;
}
}
DataBaseModel
класс:
class DataBaseModel extends Model{
MyDatabase myDatabase = MyDatabase();
DataBaseModel(){
initialDatabase();
}
void initialDatabase() async{
myDatabase.userDao = await myDatabase.initialDatabase();
}
}
и использовать тему в классе виджетов с getUserInfo
return null
@override
Widget build(BuildContext context) {
return Scaffold(
body: ScopedModel(
model: DataBaseModel(),
child: ScopedModelDescendant<DataBaseModel>(
builder: (context, _, model) => StreamBuilder<User>(
stream: model.myDatabase.userDao.getUserInfo(),
builder: (_, snapshot) {
if (!snapshot.hasData) {
return Text('aaaaaaaa');
} else {
return Text('bbbbbb');
}
},
),
),
),
);
}