import 'package:fl_clash/models/models.dart'; import 'package:flutter/material.dart'; import 'package:riverpod/riverpod.dart'; import 'context.dart'; mixin AutoDisposeNotifierMixin on AutoDisposeNotifier { set value(T value) { state = value; } @override bool updateShouldNotify(previous, next) { final res = super.updateShouldNotify(previous, next); if (res) { onUpdate(next); } return res; } onUpdate(T value) {} } mixin PageMixin on State { void onPageShow() { initPageState(); } initPageState() { WidgetsBinding.instance.addPostFrameCallback((_) { final commonScaffoldState = context.commonScaffoldState; commonScaffoldState?.actions = actions; commonScaffoldState?.floatingActionButton = floatingActionButton; commonScaffoldState?.onKeywordsUpdate = onKeywordsUpdate; commonScaffoldState?.updateSearchState( (_) => onSearch != null ? AppBarSearchState( onSearch: onSearch!, ) : null, ); }); } void onPageHidden() {} List get actions => []; Widget? get floatingActionButton => null; Function(String)? get onSearch => null; Function(List)? get onKeywordsUpdate => null; }