Skip to content

[How to use] 下拉刷新案例中,SafaArea 安全区域问题 #128

Closed
@944095635

Description

@944095635

Platforms

dart

Description

Image

Image

使用示例代码,
https://github.com/fluttercandies/flutter_scrollview_observer/blob/main/example/lib/features/scene/chat_demo/page/chat_page.dart

增加了
extendBody: true,
extendBodyBehindAppBar: true,

刷新组件跟列表 存在过高的区域间隔

完整代码:

  Widget _buildList(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        Widget resultWidget = EasyRefresh.builder(
          onLoad: () {
            return controller.loadOlderMessages();
          },
          footer: ClassicFooter(
            spacing: 5,
            noMoreText: "没有更早的聊天记录.",
            noMoreIcon: Icon(Icons.hourglass_full, size: 16),
            textStyle: TextStyle(color: Colors.white60),
            showMessage: false,
          ),
          triggerAxis: Axis.vertical,
          childBuilder: (context, physics) {
            var scrollViewPhysics = physics.applyTo(
              ChatObserverClampingScrollPhysics(
                observer: controller.chatObserver,
              ),
            );
            Widget listview = ListView.builder(
              reverse: true,
              physics: scrollViewPhysics,
              keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
              padding: EdgeInsets.only(
                bottom: MediaQuery.of(context).padding.bottom,
              ),
              itemCount: controller.messages.length,
              shrinkWrap: controller.chatObserver.isShrinkWrap,
              controller: controller.scrollController,
              itemBuilder: ((context, index) {
                RCIMIWMessage message = controller.messages[index];
                return _buildItem(message);
              }),
            );

            if (controller.chatObserver.isShrinkWrap) {
              listview = SingleChildScrollView(
                reverse: true,
                physics: scrollViewPhysics,
                child: Container(
                  alignment: Alignment.topCenter,
                  padding: EdgeInsets.only(
                    top: MediaQuery.of(context).padding.top,
                  ),
                  height: constraints.maxHeight + 0.001,
                  child: listview,
                ),
              );
            }
            return listview;
          },
        );

        resultWidget = ListViewObserver(
          controller: controller.observerController,
          child: resultWidget,
        );
        // resultWidget = Align(
        //   alignment: Alignment.topCenter,
        //   child: resultWidget,
        // );
        return resultWidget;
      },
    );
  }

My code

No response

Try do it

No response

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions