有没有办法调整超级应用栏下方的填充?

问题描述 投票:0回答:1

我正在使用 SuperCupertinoNavigationBar,它在应用栏下方呈现不需要的填充,我似乎无法摆脱它。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fitapp/components/theme/color_lib.dart';
import 'package:super_cupertino_navigation_bar/super_cupertino_navigation_bar.dart';
import 'package:fitapp/components/appbar.dart';
import 'package:fitapp/util/create_exercise_widget.dart';
import 'package:fitapp/database/exerciselist.dart';
import 'package:fitapp/database/exerciselist_db.dart';

class Exercises extends StatefulWidget {
  const Exercises({super.key});

  @override
  State<Exercises> createState() => _ExercisesState();
}

class _ExercisesState extends State<Exercises> {
  Future<List<ExerciseList>>? futureExercises;
  final exerciseDB = ExerciseListDB();

  @override
  void initState() {
    super.initState();
    fetchExercises();
  }

  void fetchExercises() {
    setState(() {
      futureExercises = exerciseDB.fetchAll();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: context.theme.appColors.background,
      body: SuperScaffold(
        appBar: SuperAppBar(
            backgroundColor: context.theme.appColors.background.withOpacity(0.5),
            previousPageTitle: "",
            title: Text("Exercises"),
            searchBar: SuperSearchBar(
              enabled: false,
            ),
            largeTitle: SuperLargeTitle(
              enabled: true,
              largeTitle: "Exercises",
              height: 45,
            )
        ),
        body: SafeArea(
            child: Stack(
              children: [
                Padding(
                  padding: const EdgeInsets.only(left: 25.0, right: 25.0),
                  child: FutureBuilder<List<ExerciseList>>(
                    future: futureExercises,
                    builder: (context, snapshot) {
                      if (snapshot.connectionState == ConnectionState.waiting) {
                        return const Center(child: CircularProgressIndicator());
                      } else {
                        final exercises = snapshot.data!;
                        return exercises.isEmpty
                            ? const Center(
                          child: Text(
                            'No Exercises...',
                            style: TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 28,
                            ),
                          ),
                        )
                            : ListView.separated(
                          separatorBuilder: (context, index) =>
                              Divider(
                                height: 0,
                                thickness: 0.75,
                                color: context.theme.appColors.onSecondaryContainer,
                              ),
                          itemCount: exercises.length,
                          itemBuilder: (context, index) {
                            final exercise = exercises[index];
                            return ListTile(
                              shape: RoundedRectangleBorder(
                                borderRadius: BorderRadius.only(
                                  topLeft: index == 0
                                      ? const Radius.circular(12)
                                      : Radius.zero,
                                  topRight: index == 0
                                      ? const Radius.circular(12)
                                      : Radius.zero,
                                  bottomLeft: index == exercises.length - 1
                                      ? const Radius.circular(12)
                                      : Radius.zero,
                                  bottomRight: index == exercises.length - 1
                                      ? const Radius.circular(12)
                                      : Radius.zero,
                                ),
                              ),
                              tileColor: context.theme
                                  .appColors.primaryContainer,
                              title: Text(
                                exercise.name,
                                style: const TextStyle(
                                    fontWeight: FontWeight.bold),
                              ),
                              trailing: IconButton(
                                onPressed: () async {
                                  await exerciseDB.delete(exercise.id);
                                  fetchExercises();
                                },
                                icon: const Icon(
                                    Icons.delete, color: Colors.red),
                              ),
                              onTap: () {
                                showDialog(
                                  context: context,
                                  builder: (context) =>
                                      CreateExerciseWidget(
                                        exercise: exercise,
                                        onSubmit: (name) async {
                                          await exerciseDB.update(
                                              id: exercise.id, name: name);
                                          fetchExercises();
                                          if (!mounted) return;
                                          Navigator.of(context).pop();
                                        },
                                      ),
                                );
                              },
                            );
                          },
                        );
                      }
                    },
                  ),
                ),
                Positioned(
                  bottom: 16.0,  // Adjust the top value as needed
                  right: 16.0,  // Adjust the right value as needed
                  child: FloatingActionButton(
                    child: const Icon(Icons.add),
                    onPressed: () {
                      showDialog(
                        context: context,
                        builder: (_) => CreateExerciseWidget(
                          onSubmit: (name) async {
                            await exerciseDB.create(name: name);
                            if (!mounted) return;
                            fetchExercises();
                          },
                        ),
                      );
                    },
                  ),
                ),
              ],
            ),
          ),
        ),
    );
  }
}

我尝试过使用超级应用栏不同功能的填充,调整其高度,更改主体中渲染的内容。我没有运气。正文中渲染的代码与其他应用栏没有填充问题,只有这个。

flutter dart navbar
1个回答
0
投票

SuperAppBar
本身没有额外的空间,额外的空间来自
SafeArea
。您仍然可以使用
SafeArea
,但仅针对
top
部分禁用它。

body: SafeArea(
  top: false,
  // ...
)
© www.soinside.com 2019 - 2024. All rights reserved.