Home > other >  showModalBottomSheet rounded corner
showModalBottomSheet rounded corner

Time:02-02

I am facing strange issue in showModalBottomSheet. Rounded corner is not working. Please see the code. But ff I add the Text('Title') before Expanded widget, it is showing rounded corner.

But I can't add the title here because DownloadedDharmaSongScreen has AppBar.

showModalBottomSheet(
    context: context,
    isScrollControlled: true,
    shape: const RoundedRectangleBorder(
      borderRadius: BorderRadius.only(
        topLeft: Radius.circular(_radius),
        topRight: Radius.circular(_radius),
      ),
    ),
    builder: (BuildContext context) {
      return DraggableScrollableSheet(
        initialChildSize: 0.9,
        expand: false,
        builder: (context, scrollController) {
          return Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Expanded(
                child: DownloadedDharmaSongScreen(
                  controller: scrollController,
                  destinationFavourite: widget.destinationFavourite,
                  sourceFavourite: favourite,
                  socialMode: widget.socialMode,
                ),
              ),
              const SizedBox(
                height: 60,
              )
            ],
          );
        },
      );
    },
  );

DownloadedDharmaSongScreen

class DownloadedDharmaSongScreen extends StatefulWidget {
  static const routeName = '/downloaded_dharma_song';
  final ScrollController? controller;
  final Favourite? destinationFavourite;
  final Favourite? sourceFavourite;
  final SocialMode socialMode;
  const DownloadedDharmaSongScreen({
    Key? key,
    this.controller,
    this.destinationFavourite,
    this.sourceFavourite,
    required this.socialMode,
  }) : super(key: key);
  @override
  State<DownloadedDharmaSongScreen> createState() =>
      _DownloadedDharmaSongScreen();
}

class _DownloadedDharmaSongScreen extends 
State<DownloadedDharmaSongScreen> {
 List<FavouriteSong> favouriteSongs = [];
 List<FavouriteSong> selectedFavouriteSongs = [];
 bool isSelected = false;
  _loadDownloadFiles() async {
    BlocProvider.of<FavouriteSongBloc>(context).add(
    GetAllDownloadedSongsByFavouriteId(
        favouriteId: widget.sourceFavourite!.id!));
 }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Theme.of(context).scaffoldBackgroundColor,
      appBar: AppBar(
        centerTitle: true,
        backgroundColor: Theme.of(context).backgroundColor,
        elevation: 0,
        title: AutoSizeText(
          widget.sourceFavourite!.name,
          style: Theme.of(context).appBarTheme.titleTextStyle,
        ),
    leading: IconButton(
      onPressed: () {
        Navigator.pop(context);
      },
      icon: Icon(
        Icons.arrow_back,
        color: Theme.of(context).primaryIconTheme.color!,
      ),
    ),
    actions: [
      Container(
        padding: const EdgeInsets.only(left: 10, right: 10),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            CupertinoButton(
              minSize: double.minPositive,
              padding: const EdgeInsets.only(right: 5),
              child: Icon(Icons.done,
                  color: selectedFavouriteSongs.isNotEmpty
                      ? Theme.of(context).primaryIconTheme.color!
                      : Theme.of(context).disabledColor),
              onPressed: selectedFavouriteSongs.isNotEmpty
                  ? () {
                      BlocProvider.of<FavouriteSongBloc>(context).add(
                          AddSelectedSongs(
                              favourite: widget.destinationFavourite!,
                              favouriteSongs: selectedFavouriteSongs,
                              socialMode: widget.socialMode));
                    }
                  : null,
            ),
            
          ],
        ),
      )
    ],
  ),
  body: BlocListener<FavouriteSongBloc, FavouriteSongState>(
    listener: (context, state) {
      if (state is SelectedFavouriteSuccess) {
        Navigator.of(context).pop();
      }
    },
    child: BlocBuilder<FavouriteSongBloc, FavouriteSongState>(
      builder: (context, state) {
        if (state is SongError) {
          return const SomethingWentWrongScreen();
        } else if (state is DownloadedSongListLoaded) {
          if (state.favouriteSongs.isEmpty) {
            return const NoResultFoundScreen(
              title: 'သိမ်းထားသေားတရားတော်များ မရှိသေးပါ။',
              subTitle:
                  'ကျေးဇူးပြု၍ တရားတော်များကို အစီအစဉ်စာရင်းထဲသို့ ထည့်ပါ။',
            );
          }
          favouriteSongs = state.favouriteSongs;
          return ListView.separated(
            separatorBuilder: (BuildContext context, int index) =>
                const Divider(height: 1),
            itemCount: state.favouriteSongs.length,
            itemBuilder: (_, int index) {
              return Material(
                child: ListTile(
                  minLeadingWidth: 0,
                  onTap: () {
                    setState(() {
                      favouriteSongs[index].isSelected =
                          !favouriteSongs[index].isSelected;
                      if (favouriteSongs[index].isSelected == true) {
                        selectedFavouriteSongs.add(favouriteSongs[index]
                            .copyWith(isSelected: true));
                      } else if (favouriteSongs[index].isSelected ==
                          false) {
                        selectedFavouriteSongs.removeWhere((element) =>
                            element.id == favouriteSongs[index].id);
                      }
                    });
                  },
                  title: TitleWidget(
                    favouriteSong: favouriteSongs[index],
                  ),
                  subtitle:
                      SubTitleWidget(favouriteSong: favouriteSongs[index]),
                  trailing: favouriteSongs[index].isSelected
                      ? Icon(
                          Icons.check_circle,
                          color: Theme.of(context).primaryColor,
                        )
                      : const Icon(Icons.check_circle_outline),
                ),
              );
            },
          );
        }
        return const CircularProgressIndicatorWidget();
      },
    ),
  ),
);
  }
}

CodePudding user response:

You can wrap DraggableScrollableSheet with ClipRRect with providing borderRadius.

builder: (BuildContext context) {
  return ClipRRect(
    borderRadius: const BorderRadius.only(
      topLeft: Radius.circular(_radius),
      topRight: Radius.circular(_radius),
    ),
    child: DraggableScrollableSheet(

This issue is coming from builder inner views, here it is from DownloadedDharmaSongScreen, You can also wrap it with ClipRRect instead of using it on builder.

builder: (context, scrollController) {
  return Column(
    mainAxisSize: MainAxisSize.min,
    children: [
      ClipRRect(
        borderRadius: const BorderRadius.only(
          topLeft: Radius.circular(_radius),
          topRight: Radius.circular(_radius),
        ),
        child:DownloadedDharmaSongScreen(
  •  Tags:  
  • Related