Проблема в том, что вы определили свою переменную subscriberValue
в своем методе build
. Вы используете setState
вызовы, которые вызывают метод build
, и при каждом отзыве build
вы теряете значение subscriberValue
. Я советую вам всегда использовать переменные, которые будут контролировать состояние вашего виджета в качестве членов класса.
class _SignUpState extends State<SignUp> {
// HAS TO BE CLASS MEMBER AND IT'S GOOD AN INITIAL VALUE TOO..
int subscriberValue =1; // asuming that 1 is default radio button option
@override
Widget build(BuildContext context) {
//... some codes ...
//int subscriberValue; REMOVE THIS LINE. YOU'RE LOSING THE VALUE IN EVERY setState call
//You can define this method outside from build too.
void switchSubscriber(int value) {
setState(() {
subscriberValue = value;
});
}
}
Проверьте этот ссылка и более конкретно эти Элементы - часть той страницы руководства, должен сказать Вам все, что необходимо знать
В интересах наличия информации здесь в случае, если кто-то натыкается на это, важно отметить, что решение варьируется в зависимости от версии CakePHP.
$this->renderElement('display', array('flag' => 'value'));
в Вашем представлении, и затем в /app/views/elements/
можно сделать файл названным display.thtml
, где $flag
будет иметь значение того, что Вы передаете ему.
$this->element('display', array('flag' => 'value'));
в Вашем представлении, и затем в /app/views/elements/
можно сделать файл названным display.ctp
, где $flag
будет иметь значение того, что Вы передаете ему.
requestAction()
также опция, но она может взять тяжелый сбор в производительности, если обошедшийся без с помощью кэша, так как она должна пройти все шаги, нормальное действие было бы. В Вашем контроллере (в этом примере контроллер сообщений).
function something() {
return $this->Post->find('all');
}
В Вашем каталоге элементов (приложение/представления/элемент) создают файл, названный posts.ctp.
В posts.ctp:
$posts = $this->requestAction('posts/something');
foreach($posts as $post):
echo $post['Post']['title'];
endforeach;
Затем в Вашем представлении:
<?php echo $this->element('posts'); ?>
Это главным образом взято из книги CakePHP здесь: Создание Допускающих повторное использование Элементов с requestAction
Я действительно полагаю, что использование requestAction является довольно дорогим, таким образом, Вы захотите изучить кэширование.
Элементы работают, если Вы хотите, чтобы у них был доступ к тем же данным, к которым представление вызова имеет доступ.
, Если Вы хотите, чтобы Ваше встроенное представление имело доступ к своему собственному набору данных, Вы могли бы хотеть использовать что-то как requestAction()
. Это позволяет Вам встраивать законченное представление, которое иначе было бы автономно.
я хочу использовать те "маленькие представления" для нескольких других целей, таким образом, Это должно быть похожим на компонент пирога для повторного использования.
Это сделано с "Помощниками", как описанный здесь . Но я не уверен, что это действительно, что Вы хотите." Элементы " предложение кажется корректным также. Это в большой степени зависит того, что Вы пытаетесь выполнить. Мои два цента...