onTextFieldFocus method

void onTextFieldFocus()

Implementation

void onTextFieldFocus() {
  setState(() {
    isSearchBoxSelected = true;
  });
  final RenderBox searchBoxRenderBox =
      // ignore: avoid_as
      context.findRenderObject() as RenderBox;
  final RenderBox overlay =
      // ignore: avoid_as
      Overlay.of(context)?.context.findRenderObject() as RenderBox;
  final width = searchBoxRenderBox.size.width;
  final position = RelativeRect.fromRect(
    Rect.fromPoints(
      searchBoxRenderBox.localToGlobal(
        searchBoxRenderBox.size.topLeft(Offset.zero),
        ancestor: overlay,
      ),
      searchBoxRenderBox.localToGlobal(
        searchBoxRenderBox.size.topRight(Offset.zero),
        ancestor: overlay,
      ),
    ),
    Offset.zero & overlay.size,
  );
  overlaySearchList = OverlayEntry(
      builder: (context) => Positioned(
            left: position.left,
            width: width,
            child: CompositedTransformFollower(
              offset: const Offset(
                0,
                56,
              ),
              showWhenUnlinked: false,
              link: _layerLink,
              child: Card(
                margin: const EdgeInsets.all(12),
                color: Colors.white,
                elevation: 5,
                shape: const RoundedRectangleBorder(
                  borderRadius: BorderRadius.all(Radius.circular(4)),
                ),
                child: _searchList.isNotEmpty
                    ? Column(
                        mainAxisAlignment: MainAxisAlignment.end,
                        crossAxisAlignment: CrossAxisAlignment.end,
                        children: <Widget>[
                          Padding(
                            padding: const EdgeInsets.all(8),
                            child: InkWell(
                              child: const Icon(
                                Icons.close,
                                size: 22,
                              ),
                              onTap: onCloseOverlaySearchList,
                            ),
                          ),
                          Container(
                            height: overlaySearchListHeight,
                            child: Scrollbar(
                              child: ListView.separated(
                                padding:
                                    const EdgeInsets.symmetric(vertical: 4),
                                separatorBuilder: (context, index) =>
                                    const Divider(
                                  height: 1,
                                ),
                                itemBuilder: (context, index) => Material(
                                  color: Colors.transparent,
                                  child: InkWell(
                                    onTap: () => onSearchListItemSelected(
                                        _searchList[index]),
                                    child:
                                        widget.overlaySearchListItemBuilder(
                                      _searchList.elementAt(index),
                                    ),
                                  ),
                                ),
                                itemCount: _searchList.length,
                              ),
                            ),
                          ),
                        ],
                      )
                    : widget.noItemsFoundWidget != null
                        ? Center(
                            child: widget.noItemsFoundWidget,
                          )
                        : Container(
                            child: const Text('no items found'),
                          ),
              ),
            ),
          ));
  Overlay.of(context)?.insert(overlaySearchList!);
}