Flutter HiveDB с использованием box в FutureBuilder
Я новичок в Hive
база данных трепещет, и я пытаюсь понять, почему я не могу использовать Hive.openBox
внутри FutureBuilder
?
FutureBuilder(
future: Hive.openBox<User>('userBox'),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
final User userAccount = snapshot.data;
if (userAccount == null) {
return Center(
child: Container(
child: Text('LOGIN'),
));
} else {
return Center(
child: Container(
child: Text('SUCCESS'),
));
}
}
return Container(
width: 0.0,
height: 0.0,
);
},
);
я получаю эту ошибку:
type 'BoxImpl' is not a subtype of type 'User'
но этот код отлично работает в main
функция:
var box = await Hive.openBox<User>('userBox');
User
учебный класс:
@HiveType(typeId: 1)
class User{
@HiveField(0)
String username;
@HiveField(1)
String password;
@HiveField(2)
String mobileNumber;
@HiveField(3)
String biography;
@HiveField(4)
String avatar;
@HiveField(5)
String website;
@HiveField(6)
String linkedinLink;
@HiveField(7)
String githubLink;
@HiveField(8)
String facebookLink;
@HiveField(9)
String telegramLink;
@HiveField(10)
String twitterLink;
@HiveField(11)
PageInfo pageInfo;
User(this.username, this.password, this.mobileNumber, this.biography, this.avatar, this.website, this.linkedinLink, this.githubLink,
this.facebookLink, this.telegramLink, this.twitterLink, this.pageInfo);
}
main.dart
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
var appDocumentDirectory = await path_provider.getApplicationDocumentsDirectory();
Hive
..init(appDocumentDirectory.path)
..registerAdapter(UserAdapter())
..registerAdapter(PageInfoAdapter());
runApp(MultiProvider(providers: providers, child: OKToast(child: StartupApplication())));
}
2 ответа
Проблема решена: пользователь попадал внутрь FutureBuilder
builder: (context, AsyncSnapshot<Box<User>> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
final Box<User> userAccount = snapshot.data;
if (userAccount.isEmpty) {
return Center(
child: Container(
child: Text('LOGIN',style: TextStyle(color: Colors.white),),
));
} else {
return Center(
child: Container(
child: Text('SUCCESS',style: TextStyle(color: Colors.white),),
));
}
}
return Container(
width: 0.0,
height: 0.0,
);
},
Заменить это
..init(appDocumentDirectory.path)
с участием
..initFlutter(appDocumentDirectory.path);