Flutter:导航,tab切换,顶部固定,列表分页滚动

1、导航搜索栏:固定

2、tab切换:固定

3、列表分页:滚动

js 复制代码
import 'package:demo/common/index.dart';
import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';

import 'index.dart';

class CardPage extends GetView<CardController> {
  const CardPage({super.key});

  // 头部
  Widget _buildHeader() {
    return <Widget>[
    ].toRow().card(
      color: Colors.white,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(34.w),
      ),
    ).tight(width: 690.w,height: 80.w).marginOnly(top: 30.w,bottom: 30.w);
  }

  // 列表
  Widget _buildList() {
    return SmartRefresher(
      controller: controller.refreshController,
      enablePullUp: true, // 启用上拉加载
      onRefresh: controller.onRefresh, // 下拉刷新回调
      onLoading: controller.onLoading, // 上拉加载回调
      footer: const SmartRefresherFooterWidget(), // 底部加载更多组件
      child: ListView.builder(
        itemCount: 100,
        itemBuilder: (context, index) {
          return Text('列表项 $index');
        },
      ),
    );
  }

  // 主视图
  Widget _buildView() {
    return <Widget>[
      _buildHeader(),
      Expanded(child: _buildList()),
    ].toColumn();
  }

  @override
  Widget build(BuildContext context) {
    return GetBuilder<CardController>(
      init: CardController(),
      id: "card",
      builder: (_) {
        return Scaffold(
          backgroundColor: const Color(0xffF5F5F5),
          appBar: TDNavBar(
            padding: EdgeInsets.only(left: 0,right: 0), // 重写左右内边距
            centerTitle:false, // 不显示标题
            height: 45, // 高度
            titleWidget: <Widget>[
              TDImage(
                assetUrl: 'assets/img/search.png',
                width: 32.w,
                height: 32.w,
              ),
              SizedBox(width: 20.w,),
              <Widget>[
              ].toRow().tight(height: 28.w).decorated(
                border: Border(
                  left: BorderSide(color: const Color(0xffe9e9e9),width: 1.w),
                ),
              ),
              SizedBox(width: 20.w,),
              TextWidget.body('搜索心仪的商品',color: const Color(0xff999999),size: 28.sp,),
            ].toRow().paddingHorizontal(30.w).card(
              color: Colors.white,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(34.w),
              ),
            ).tight(height: 68.w),
            backgroundColor:  const Color(0xffE93323), // 背景
            screenAdaptation: true, // 默认true,适配手机状态栏高度
            useDefaultBack: false, // 显示左侧返回按键
          ),
          body: SafeArea(
            child: _buildView()
          ),
        );
      },
    );
  }
}
相关推荐
2501_944424121 小时前
Flutter for OpenHarmony游戏集合App实战之连连看路径连线
android·开发语言·前端·javascript·flutter·游戏·php
C系语言1 小时前
python用pip生成requirements.txt
开发语言·python·pip
燃于AC之乐1 小时前
深入解剖STL Vector:从底层原理到核心接口的灵活运用
开发语言·c++·迭代器·stl·vector·源码分析·底层原理
小风呼呼吹儿1 小时前
Flutter 框架跨平台鸿蒙开发 - 社区团购记账应用开发教程
flutter·华为·harmonyos
星火开发设计8 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
TTGGGFF8 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
2501_944424128 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
不会写代码0009 小时前
Flutter 框架跨平台鸿蒙开发 - 全国景区门票查询应用开发教程
flutter·华为·harmonyos
利刃大大9 小时前
【Vue】Vue2 和 Vue3 的区别
前端·javascript·vue.js
Lhuu(重开版9 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式