Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
785 of 1024 menu
◀ ▶

Метод updateShouldNotifyDependent

Метод updateShouldNotifyDependent виджета InheritedModel получает старый виджет и множество аспектов, от которых зависит один элемент. Возвращает true, если по этим аспектам данные изменились.

Синтаксис

@override bool updateShouldNotifyDependent( covariant OldWidget oldWidget, Set<Object?> dependencies, )

Параметры

Параметр Описание
oldWidget Предыдущая конфигурация InheritedModel.
dependencies Набор аспектов, на которые подписан один потомок.

Пример

Давайте уведомим только потомков аспекта count:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: DependHost())); } enum PairAspect { title, count } class DependHost extends StatefulWidget { const DependHost({super.key}); @override State<DependHost> createState() => _DependHostState(); } class _DependHostState extends State<DependHost> { var title = 'abcde'; var count = 0; @override Widget build(BuildContext context) { return PairModel( title: title, count: count, child: Scaffold( body: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ const CountOnly(), ElevatedButton( onPressed: () => setState(() => count++), child: const Text('add'), ), ], ), ), ), ); } } class PairModel extends InheritedModel<PairAspect> { const PairModel({super.key, required this.title, required this.count, required super.child}); final String title; final int count; static PairModel of(BuildContext context, PairAspect aspect) { return InheritedModel.inheritFrom<PairModel, PairAspect>(context, aspect: aspect)!; } @override bool updateShouldNotify(PairModel oldWidget) => true; @override bool updateShouldNotifyDependent(PairModel oldWidget, Set<PairAspect> dependencies) { if (dependencies.contains(PairAspect.count) && count != oldWidget.count) { return true; } if (dependencies.contains(PairAspect.title) && title != oldWidget.title) { return true; } return false; } } class CountOnly extends StatelessWidget { const CountOnly({super.key}); @override Widget build(BuildContext context) { final model = PairModel.of(context, PairAspect.count); return Text('12345 ${model.count}'); } }

На экране updateShouldNotifyDependent обновит '12345' при росте count.

Пример

Давайте проверим метод вне дерева:

import 'package:flutter/material.dart'; void main() { const oldM = DemoModel(flag: false, child: SizedBox.shrink()); const newM = DemoModel(flag: true, child: SizedBox.shrink()); print(newM.updateShouldNotifyDependent(oldM, {DemoAspect.flag})); } enum DemoAspect { flag } class DemoModel extends InheritedModel<DemoAspect> { const DemoModel({super.key, required this.flag, required super.child}); final bool flag; @override bool updateShouldNotify(DemoModel oldWidget) => flag != oldWidget.flag; @override bool updateShouldNotifyDependent(DemoModel oldWidget, Set<DemoAspect> dependencies) { return dependencies.contains(DemoAspect.flag) && flag != oldWidget.flag; } }

Результат выполнения кода

true

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить