#flutter #dart #persistence #flutter-hive
#flutter #dart #постоянство #flutter-улей
Вопрос:
Я новичок в dart / flutter. Мне нужно получить данные из веб-API и поместить их внутрь Hive.box как localStorage. Я могу получить данные API и поместить в Hive, но я не могу сохранить эти данные на других страницах, например, я не могу использовать переменную localStorage на других страницах… Проблема в том, что HiveBox возвращает значение null.
Main.dart — откройте окно
Future _abrirCaixa() async {
var dir = await getApplicationDocumentsDirectory();
Hive.init(dir.path);
return await Hive.openBox('localStorage');
}
void main() {
_abrirCaixa();
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: MyApp(),
));
}
RaisedButton в Login.dart
Padding(
padding: const EdgeInsets.only(top: 16.0),
child: ButtonTheme(
height: 40.0,
child: RaisedButton(
onPressed: () async {
if (controladorUsuario.text.isEmpty ||
controladorSenha.text.isEmpty) {
camposVazios.camposVazios(context);
} else {
await fazerLogin(context);
infoAddADM();
infoAddCond();
}
},
// await infoAddCond();
// await infoAddADM();
child: Text(
"Conectar",
style: TextStyle(color: white),
),
color: mainColor,
),
),
),
fazerLogin() => при проверке сеанса я помещаю все данные в localStorage
[...]
var dados = await Session.sessionValidation(login, senha);
print('------------------------------');
print(localStorage.values.toString());
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TestePage(),
),
);
[...]
TestPage.dart
class _TestePageState extends State<TestePage> {
@override
Widget build(BuildContext context) {
print('--------------//---------------------');
print(localStorage.values.toString());
return Container();
}
}
Что возвращает для меня:
At first:
I/flutter (14463): ------------------------------
I/flutter (14463): (3, Adm ConectCon, 53644, 4, 0, Condomínio SID, 509, 140, ..., null, 90377)
I/flutter (14463): --------------//---------------------
I/flutter (14463): (3, Adm ConectCon, 53644, 4, 0, Condomínio SID, 509, 140, ..., null, 90377)
After a hot reload:
I/flutter (14463): --------------//---------------------
I/flutter (14463): ()
Ответ №1:
Я немного смущен кодом, но вот что вы можете попробовать:
void main() async{
await _abrirCaixa();
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: MyApp(),
));
}
Вы можете сделать async, и, в свою очередь, вы можете ожидать своего метода _abrirCaixa(), который является будущим. Это должно устранить ошибку HiveBox is null.