#android #flutter #dart #async-await #flutter-showmodalbottomsheet
#Android #флаттер #dart #асинхронное ожидание #flutter-showmodalbottomsheet
Вопрос:
Я показываю содержимое с помощью bottomsheet, я обновляю размер папки после его вычисления, используя setState statefulbuilder, я также использовал установленное условие, затем также оно показывает setState после вызова dispose, помогите мне решить это.
FileStat fileStat = selectedFilesAndFolders.last.statSync();
String size = '0 KB';
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12.0),
topRight: Radius.circular(12.0),
)),
builder: (context) {
return StatefulBuilder(builder: (context, newSetState) {
getFolderSize(selectedFilesAndFolders.last.path).then((value) {
if (!mounted) return;
newSetState(() {
size = value;
});
});
return SingleChildScrollView(
child: Column(
children: [
SizedBox(
height: 2.0,
),
Text(
'Info',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
SizedBox(
height: 2.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: Text('Name: '))),
Expanded(
child: Text(path
.basename(selectedFilesAndFolders.last.path)))
],
),
SizedBox(
height: 2.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: Text('Size: '))),
Expanded(child: Text(size)),
],
),
SizedBox(
height: 2.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: Text('Last Modified Date: '))),
Expanded(child: Text(fileStat.modified.toString()))
],
),
SizedBox(
height: 2.0,
),
],
),
);
});
});
Ответ №1:
попробуйте следующее
if (!mounted){
setState(() {
size = value;
}),
};
Комментарии:
1. если я использую указанное выше условие, то setState не будет работать, когда открыта нижняя таблица. Я попробовал ваш код. теперь ошибка не появилась, но setState не вызывается для обновления размера.
2. в вашем коде вы вызвали
newSetState
однако, похоже, вам нужно вызватьsetState
, я обновил свой ответ, чтобы отразить это