Ejemplo n.º 1
0
 public void setFirstFocus(FocusScopeNode scope)
 {
     D.assert(scope != null);
     D.assert(scope != this, () => "Unexpected self-reference in setFirstFocus.");
     D.assert(FocusManagerUtils._focusDebug($"Setting scope as first focus in {this} to node:", new List <string> {
         scope.ToString()
     }));
     if (scope._parent == null)
     {
         _reparent(scope);
     }
     D.assert(scope.ancestors.Contains(this), () => $"{typeof(FocusScopeNode)}" + $"{scope} must be a child of" + $" {this} to set it as first focus.");
     if (hasFocus)
     {
         scope._doRequestFocus(findFirstFocus: true);
     }
     else
     {
         scope._setAsFocusedChildForScope();
     }
 }
Ejemplo n.º 2
0
    public override void _doRequestFocus(bool findFirstFocus = false)
    {
        D.assert(findFirstFocus != null);

        // It is possible that a previously focused child is no longer focusable.
        while (focusedChild != null && !focusedChild.canRequestFocus)
        {
            _focusedChildren.removeLast();
        }

        if (!findFirstFocus)
        {
            if (canRequestFocus)
            {
                _setAsFocusedChildForScope();
                _markNextFocus(this);
            }
            return;
        }

        FocusNode primaryFocus = focusedChild ?? this;

        while (primaryFocus is FocusScopeNode && (( FocusScopeNode)primaryFocus).focusedChild != null)
        {
            FocusScopeNode scope = primaryFocus as FocusScopeNode;
            primaryFocus = scope.focusedChild;
        }
        if (primaryFocus == this)
        {
            if (primaryFocus.canRequestFocus)
            {
                _setAsFocusedChildForScope();
                _markNextFocus(this);
            }
        }
        else
        {
            primaryFocus._doRequestFocus(findFirstFocus: findFirstFocus);
        }
    }
Ejemplo n.º 3
0
        Widget _buildMiddleView(BuildContext context)
        {
            return(new Container(
                       padding: EdgeInsets.symmetric(horizontal: 16),
                       child: new Column(
                           crossAxisAlignment: CrossAxisAlignment.start,
                           children: new List <Widget> {
                new Container(height: 32),
                new Container(
                    child: new Text(
                        "邮箱",
                        style: CTextStyle.PMediumBody4
                        )
                    ),
                new Container(
                    height: 46,
                    decoration: new BoxDecoration(
                        CColors.Transparent,
                        border: new Border(
                            bottom: new BorderSide(
                                this._isEmailFocus ? CColors.PrimaryBlue : CColors.Separator,
                                this._isEmailFocus ? 2 : 1
                                )
                            )
                        ),
                    alignment: Alignment.center,
                    child: new InputField(
                        focusNode: this._emailFocusNode,
                        maxLines: 1,
                        autofocus: true,
                        enabled: !this.widget.viewModel.loginLoading,
                        style: CTextStyle.PLargeBody,
                        cursorColor: CColors.PrimaryBlue,
                        clearButtonMode: InputFieldClearButtonMode.whileEditing,
                        keyboardType: TextInputType.emailAddress,
                        onChanged: text => this.widget.actionModel.changeEmail(text),
                        onSubmitted: _ => {
                    if (null == this._focusScopeNode)
                    {
                        this._focusScopeNode = FocusScope.of(context);
                    }

                    this._focusScopeNode.requestFocus(this._passwordFocusNode);
                }
                        )
                    ),
                new Container(height: 16),
                new Container(
                    child: new Text(
                        "密码",
                        style: CTextStyle.PMediumBody4
                        )
                    ),
                new Container(
                    height: 46,
                    decoration: new BoxDecoration(
                        CColors.Transparent,
                        border: new Border(
                            bottom: new BorderSide(
                                this._isPasswordFocus ? CColors.PrimaryBlue : CColors.Separator,
                                this._isPasswordFocus ? 2 : 1
                                )
                            )
                        ),
                    alignment: Alignment.center,
                    child: new InputField(
                        focusNode: this._passwordFocusNode,
                        maxLines: 1,
                        autofocus: false,
                        obscureText: true,
                        enabled: !this.widget.viewModel.loginLoading,
                        style: CTextStyle.PLargeBody,
                        cursorColor: CColors.PrimaryBlue,
                        clearButtonMode: InputFieldClearButtonMode.whileEditing,
                        onChanged: text => this.widget.actionModel.changePassword(text),
                        onSubmitted: _ => this._login()
                        )
                    )
            }
                           )
                       ));
        }