buildingUpdateAddFocusNode method

FocusNode buildingUpdateAddFocusNode(
  1. NextFocusAction action,
  2. String focusName, {
  3. FocusNode? father,
  4. void override(
    1. FocusNode building,
    2. FocusNode update
    )?,
})

Implementation

FocusNode buildingUpdateAddFocusNode(NextFocusAction action, String focusName, {FocusNode? father, void Function(FocusNode building, FocusNode update)? override}){
  /// 聚焦节点重用问题
  final updateAddNode = (focusNodeReuseCacheMap[focusName] ?? FocusNode(name: focusName, father: father))..reset();
  /// 用于焦点重置
  if(updateAddNode.isFocused){
    __buildingHasFocusNode = updateAddNode;
  }
  switch(action){
    case NextFocusAction.right:
      _buildingFocusNode.right = updateAddNode;
      updateAddNode.left = _buildingFocusNode;
      break;
    case NextFocusAction.left:
      _buildingFocusNode.left = updateAddNode;
      updateAddNode.right = _buildingFocusNode;
      break;
    case NextFocusAction.down:
      _buildingFocusNode.down = updateAddNode;
      updateAddNode.up = _buildingFocusNode;
      break;
    case NextFocusAction.up:
      _buildingFocusNode.up = updateAddNode;
      updateAddNode.down = _buildingFocusNode;
      break;
    case NextFocusAction.enter:
      _buildingFocusNode.enter = updateAddNode;
      updateAddNode.father = _buildingFocusNode;
      break;
    case NextFocusAction.back:
      _buildingFocusNode.father = updateAddNode;
      updateAddNode.enter = _buildingFocusNode;
  }
  override?.call(_buildingFocusNode, updateAddNode);
  focusNodeReuseCacheMap[focusName] = updateAddNode;
  return __buildingFocusNode = updateAddNode;
}