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);

Другие вопросы по тегам