SetState() или markNeedsBuild(), вызываемые во время сборки, когда ValueListenable Notifier обнаруживает изменение значеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Гость
 SetState() или markNeedsBuild(), вызываемые во время сборки, когда ValueListenable Notifier обнаруживает изменение значе

Сообщение Гость »


Я использую AppValueNotifier для создания значения с именем showStreamDialogNotifier, которое будет меняться в зависимости от некоторого потока. Когда это значение станет истинным, я хочу отобразить диалоговое окно в форме входа.

Код: Выделить всё

class AppValueNotifier{
ValueNotifier showStreamDialogNotifier = ValueNotifier(false);

void updateShowStreamDialogNotifier({required bool? newShowStreamDialog, required String? newStreamDialogTitle, required String? newStreamDialogMsg}) {
if (newShowStreamDialog != null) {
showStreamDialogNotifier = ValueNotifier(newShowStreamDialog);
}

}

}
Проблема в том, что когда я пытаюсь вызвать функцию, запускающую showDialog, она выдает ошибку в заголовке. Почему появляется эта ошибка и как мне изменить свой код, чтобы он правильно отображал диалоговое окно в форме входа, когда showStreamDialogNotifier = true?

Код: Выделить всё

class Login extends StatefulWidget {
const Login({super.key});

@override
State createState() => _LoginState();
}

class _LoginState extends State {

Future showStreamDialog({required BuildContext context, required String title, required String msg}) {
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(title),
content: SingleChildScrollView(
child: ListBody(
children: [
Text(msg),
],
),
),
actions: [
TextButton(
child: const Text('OK'),
onPressed: () {
final globalsOneTimeRead = context.read();
globalsOneTimeRead.updateStreamDialogVariables(newShowStreamDialog: false, newStreamDialogTitle: '', newStreamDialogMsg: '');
context.pop();
},
),
],
);
}
);
}

@override
Widget build(BuildContext context) {
AppValueNotifier appValueNotifier = AppValueNotifier();

return Consumer(
builder: (context, globals, child) => Scaffold(
body: Center(
child: Column(
children: [
Expanded(
child: ValueListenableBuilder( //THE ERROR POINTS TO THIS LINE
valueListenable: appValueNotifier.showStreamDialogNotifier,
builder: (context, value, child) {

if (value == true) {
showStreamDialog(context: context, title: globals.streamDialogTitle, msg: globals.streamDialogMsg);
}

return Text('');
},
),
),
]
)
)
)

}

}


Источник: https://stackoverflow.com/questions/781 ... lenotifier
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»