Какова цель ребенка в Consumer Provider Flutter - PullRequest
1 голос
/ 18 февраля 2020

У меня есть вопрос о Потребителе, о пакете Поставщика, во Флаттере. Я не понимаю цель аргумента "ребенок" в конструкторе Consumer

Consumer<MyModel>(builder: (context, myModel, child) {
// doing stuff using myModel variable
});

Я не могу найти что-либо сделать c об этом.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

дочерний элемент - это любой виджет, которому не нужны данные внутри провайдера, поэтому, когда данные обновляются, они не создаются заново, поскольку данные не нужны, скорее они передаются как ссылка на построитель


    Consumer(
       builder: (context, myModel, child) {
         // child will refer to the MaterialButton provided as the child argument in the 
        //Consumer named parameter,
        / doing stuff using myModel variable
       }
       child: MaterialButton( 
               child: Text("Do some action"), 
              onPressed: () {
             // do some actions
    },),);

, поскольку для сообщения MaterilButton требуется состояние провайдера, но оно находится в дереве-потомке, нет необходимости повторно его визуализировать, поэтому оно передается обратно сборщику, чтобы сэкономить память и повысить производительность.

0 голосов
/ 18 февраля 2020

Вы можете передать дочерний виджет в потребитель. Любой виджет, который вы передаете как дочерний, не будет перестраиваться при изменении данных.

Вы можете избежать ненужной перестройки виджета с помощью дочернего элемента.

...