Flutter底部扩展面板插件expanded_bottom_sheet的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter底部扩展面板插件expanded_bottom_sheet的使用

概述

scrollable_bottom_sheet 是一个带有展开和滚动功能的底部扩展面板。

示例

安装

pubspec.yaml 文件中添加依赖:

dependencies:
  scrollable_bottom_sheet: ^0.0.4

或者通过命令行安装:

flutter pub add scrollable_bottom_sheet

参数说明

参数名 描述
bodyWidget 必须是一个 SliverList,作为面板主体部分
headerWidget 底部面板的头部
headerHeight 头部的高度
backgroundColor 面板背景颜色(展开时)
backgroundOpacity 背景透明度(展开时)
headerIsPinned 是否使头部固定在顶部(当主体部分滚动时)
hasRadius 是否给头部添加圆角,到达顶部时圆角消失

使用方法

// 打开底部面板
BottomSheetWidget().openBottomSheet(context);

// 关闭底部面板
BottomSheetWidget().closeBottomSheet();

注意事项

  • bodyWidget 必须是一个 SliverList,否则会报错。
  • 当底部面板展开时,按下返回键可以关闭面板。
  • 新的自定义功能将陆续添加。

示例代码

import 'package:expanded_bottom_sheet/ScrollableBottomSheet.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: CustomWidget(),
      ),
    );
  }
}

class CustomWidget extends StatefulWidget {
  [@override](/user/override)
  _CustomWidgetState createState() => _CustomWidgetState();
}

class _CustomWidgetState extends State<CustomWidget> {

  // 显示底部面板的方法
  void showBottomSheet(BuildContext context) {
    ScrollableBottomSheet().openBottomSheet(context,
        headerWidget: Container(child: Text("Header")), // 头部内容
        bodyWidget: SliverList( // 主体部分
          delegate: SliverChildBuilderDelegate(
              (context, index) => Container(
                color: Colors.red,
                alignment: Alignment.centerLeft,
                padding: EdgeInsets.symmetric(vertical: 10),
                child: Text("$index"), // 列表项内容
              ),
              childCount: 100 // 列表项数量
          )
        ),
        backgroundColor: Colors.transparent, // 背景颜色
        backgroundOpacity: 0.2, // 背景透明度
        headerHeight: 70.0, // 头部高度
        hasRadius: true // 是否有圆角
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Builder(builder: (context) => GestureDetector(
          child: Text("Show Bottom Sheet"), // 显示按钮
          onTap: () {
            showBottomSheet(context); // 触发显示底部面板
          },
        )),
      ),
    );
  }
}

更多关于Flutter底部扩展面板插件expanded_bottom_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter底部扩展面板插件expanded_bottom_sheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,expanded_bottom_sheet 是一个用于 Flutter 的第三方插件,它提供了一个更加灵活和可定制的底部扩展面板(Bottom Sheet)。以下是一个简单的代码示例,展示如何使用 expanded_bottom_sheet 插件。

首先,确保在你的 pubspec.yaml 文件中添加 expanded_bottom_sheet 依赖:

dependencies:
  flutter:
    sdk: flutter
  expanded_bottom_sheet: ^2.0.0  # 请检查最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,是一个使用 expanded_bottom_sheet 的示例代码:

import 'package:flutter/material.dart';
import 'package:expanded_bottom_sheet/expanded_bottom_sheet.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Expanded Bottom Sheet Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isExpanded = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Expanded Bottom Sheet Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            setState(() {
              isExpanded = !isExpanded;
            });
            showExpandedBottomSheet(
              context: context,
              expandedChild: Container(
                color: Colors.white,
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Text('This is an expanded bottom sheet!'),
                      SizedBox(height: 20),
                      ElevatedButton(
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                        child: Text('Close'),
                      ),
                    ],
                  ),
                ),
              ),
              collapseCallback: () {
                setState(() {
                  isExpanded = false;
                });
              },
              backgroundColor: Colors.grey[200]!,
              header: Container(
                color: Colors.blue,
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Text(
                    'Header',
                    style: TextStyle(color: Colors.white),
                  ),
                ),
              ),
              isExpanded: isExpanded,
            );
          },
          child: Text('Show Bottom Sheet'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个按钮。点击按钮时,会显示一个扩展的底部面板。底部面板包含一个标题、一些内容和一个关闭按钮。

  • showExpandedBottomSheet 函数用于显示扩展的底部面板。
  • expandedChild 参数定义了扩展状态下显示的内容。
  • collapseCallback 参数定义了当底部面板折叠时的回调。
  • header 参数定义了底部面板的头部内容。
  • isExpanded 参数用于控制底部面板的展开和折叠状态。

你可以根据需要自定义 expandedChildheader 中的内容,以适应你的应用需求。

回到顶部