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(); } }
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); } }
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() ) ) } ) )); }