#flutter #android-alertdialog #setstate
#flutter #android-alertdialog #setstate
Вопрос:
Мне нужно знать, есть ли способ обновить его содержимое, например, значение линейного индикатора прогресса, возможно ли это, я искал эту проблему, но не нашел удовлетворительного ответа.
код
else {
setState(() {
percentage = (event.snapshot.bytesTransferred /
event.snapshot.totalByteCount);
});
print(percentage);
}
});
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Uploading'),
content: Column(
children: [
Center(
child: Text('Uploading .... Please Be Patient'),
),
SizedBox(
height: height * 0.02,
),
LinearProgressIndicator(
value: percentage != null ? percentage : 0.0,
)
],
),
);
},
barrierDismissible: false,
);
Комментарии:
1. не могли бы вы добавить свой код?
2. просто обновил его
3. да ….. но я не полностью понял ваш ответ, и вы не ответили на мое последнее сообщение, поэтому я открыл новый вопрос.
4. Привет @FlutterDeveloper11 Не могли бы вы решить эту проблему?
Ответ №1:
если я не ошибаюсь, вы можете использовать StatefulBuilder
widget и использовать setmodalState вместо setState, я использовал его с модальным нижним листом
Комментарии:
1. Я не могу использовать progress, я должен использовать progress.value, поскольку это дает мне понять, что ему нельзя присвоить значение double .
2. нет, с некоторыми изменениями, но не думаю, что это повлияет на него.
Ответ №2:
Вот рабочий код с StatefulBuilder
:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int number = 0;
StateSetter _setModalState;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Material(
child: Center(
child: FlatButton(
color: Colors.green,
child: Padding(
padding: EdgeInsets.all(12),
child: Text('press me'),
),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return StatefulBuilder(builder:
(BuildContext context, StateSetter setModalState) {
this._setModalState = setModalState;
return AlertDialog(
content: Wrap(
children: [
Column(
children: [
Center(
child: Text(number.toString()),
),
SizedBox(
height: 100,
),
FlatButton(
color: Colors.red,
onPressed: () {
_setModalState(() {
number ;
});
},
child: (Text(" ")),
)
],
),
],
),
);
});
},
barrierDismissible: false,
);
},
),
),
));
}
}
Комментарии:
1. вы можете использовать
_setModalState
где угодно2. как я могу использовать его с переменными
3. просто реализуйте StatefulBuilder, как показано в моем примере, и замените
setState
на_setModalState
, тогда ваш код должен работать))4. вы имеете в виду следующее :
_setModalState(() { percentage = (event.snapshot.bytesTransferred / event.snapshot.totalByteCount); });
5. вы добавили это
this._setModalState = setModalState;
?