blob: f73475f939cf7a8ebbc8f906aa6cc7f29ea665e1 [file] [log] [blame]
import 'package:flutter/widgets.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx/mobx.dart';
/// A [StatefulWidget] that rebuilds when an [Observable] used inside
/// [State.build] updates.
///
/// See also:
///
/// - [Observer], which subclass this interface and delegate its `build` to a
/// callback.
/// - [StatelessObserverWidget], similar to this class, but with no [State].
abstract class StatefulObserverWidget extends StatefulWidget
with ObserverWidgetMixin {
/// Initializes [key], [context] and [name] for subclasses.
const StatefulObserverWidget(
{Key? key, ReactiveContext? context, String? name})
: _name = name,
_context = context,
super(key: key);
final String? _name;
final ReactiveContext? _context;
@override
String getName() => _name ?? '$this';
@override
ReactiveContext getContext() => _context ?? super.getContext();
@override
StatefulObserverElement createElement() => StatefulObserverElement(this);
}
/// An [Element] that uses a [StatefulObserverWidget] as its configuration.
class StatefulObserverElement extends StatefulElement
with ObserverElementMixin {
/// Creates an element that uses the given widget as its configuration.
StatefulObserverElement(StatefulObserverWidget widget) : super(widget);
@override
StatefulObserverWidget get widget => super.widget as StatefulObserverWidget;
}