您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

215 行
6.8 KiB

using Unity.UIWidgets.foundation;
using Unity.UIWidgets.ui;
using Unity.UIWidgets.widgets;
namespace Unity.UIWidgets.DevTools
{
public delegate void SetState<R>(R value);
public delegate VoidCallback DeferredStartListening<T, R>(
InheritedContext<R> context,
SetState<R> setState,
T controller,
R value
);
class DeferredInheritedProvider<T, R> : InheritedProvider<R> {
public DeferredInheritedProvider(
Key key = null,
Create<T> create = null,
Dispose<T> dispose = null,
DeferredStartListening<T, R> startListening = null,
UpdateShouldNotify<R> updateShouldNotify = null,
bool? lazy = null,
TransitionBuilder builder = null,
Widget child = null
) : base(
key: key,
child: child,
lazy: lazy,
builder: builder,
_delegate: new _CreateDeferredInheritedProvider<T,R>(
create: create,
dispose: dispose,
updateShouldNotify: updateShouldNotify,
startListening: startListening
))
{
}
public DeferredInheritedProvider(
Key key = null,
T value = default,
DeferredStartListening<T, R> startListening = null,
UpdateShouldNotify<R> updateShouldNotify = null,
bool? lazy = null,
TransitionBuilder builder = null,
Widget child = null
): base(key: key,
lazy: lazy,
builder: builder,
_delegate: new _ValueDeferredInheritedProvider<T, R>(
value,
updateShouldNotify,
startListening
),
child: child)
{
}
}
class _CreateDeferredInheritedProvider<T, R> : _DeferredDelegate<T, R> {
public _CreateDeferredInheritedProvider(
Create<T> create = null,
Dispose<T> dispose = null,
UpdateShouldNotify<R> updateShouldNotify = null,
DeferredStartListening<T, R> startListening = null
) : base(updateShouldNotify, startListening)
{
this.create = create;
this.dispose = dispose;
}
public readonly Create<T> create;
public readonly Dispose<T> dispose;
public _CreateDeferredInheritedProviderElement<T, R> createState() { // [attention] override
return new _CreateDeferredInheritedProviderElement<T, R>();
}
}
class _CreateDeferredInheritedProviderElement<T, R>
: _DeferredDelegateState<T, R, _CreateDeferredInheritedProvider<T, R>>
{
}
public abstract class _DeferredDelegate<T, R> : _Delegate<R> {
public _DeferredDelegate(UpdateShouldNotify<R> updateShouldNotify, DeferredStartListening<T, R> startListening)
{
this.updateShouldNotify = updateShouldNotify;
this.startListening = startListening;
}
public readonly UpdateShouldNotify<R> updateShouldNotify;
public readonly DeferredStartListening<T, R> startListening;
public override _DelegateState<R, _Delegate<R>> createState()
{
return null; // [attention] this function has no body in flutter
}
}
public abstract class _DeferredDelegateState<T, R, W > : _DelegateState<R, W> where W : _DeferredDelegate<T, R>
{
public VoidCallback _removeListener;
R _value;
public new R value {
get
{
// element._isNotifyDependentsEnabled = false;
// _removeListener ??= delegate.startListening(
// element,
// setState,
// controller,
// _value,
// );
// element._isNotifyDependentsEnabled = true;
// D.assert(element.hasValue, '''
// The callback "startListening" was called, but it left DeferredInhertitedProviderElement<$T, $R>
// in an unitialized state.
//
// It is necessary for "startListening" to call "setState" at least once the very
// first time "value" is requested.
//
// To fix, consider:
//
// DeferredInheritedProvider(
// ...,
// startListening: (element, setState, controller, value) {
// if (!element.hasValue) {
// setState(myInitialValue); // TODO replace myInitialValue with your own
// }
// ...
// }
// )
// ''');
// D.assert(_removeListener != null);
return _value;
}
}
}
public class _ValueDeferredInheritedProvider<T, R> : _DeferredDelegate<T, R> {
public _ValueDeferredInheritedProvider(
T value,
UpdateShouldNotify<R> updateShouldNotify,
DeferredStartListening<T, R> startListening
) : base(updateShouldNotify, startListening)
{
this.value = value;
}
public readonly T value;
public _ValueDeferredInheritedProviderState<T, R> createState() { // [attention] override
return new _ValueDeferredInheritedProviderState<T,R>();
}
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
base.debugFillProperties(properties);
properties.add(new DiagnosticsProperty<T>("controller", value));
}
}
public class _ValueDeferredInheritedProviderState<T, R> : _DeferredDelegateState<
T, R, _ValueDeferredInheritedProvider<T, R>> {
public override bool willUpdateDelegate(_ValueDeferredInheritedProvider<T, R> oldDelegate) {
if (true) { // [attention] _delegate.value != oldDelegate.value
if (_removeListener != null) {
_removeListener();
_removeListener = null;
}
return true;
}
return false;
}
public new T controller
{
get
{
return _delegate.value;
}
}
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
base.debugFillProperties(properties);
if (_removeListener != null) {
properties.add(new DiagnosticsProperty<R>("value", value));
} else {
properties.add(
new FlagProperty(
"value",
value: true,
showName: true,
ifTrue: "<not yet loaded>"
)
);
}
}
}
}