Ist es möglich, das Tippen außerhalb des Bodenblatts zu aktivieren?
Nov 28 2020
Ich möchte Benutzern ermöglichen , Aktionen auch außerhalb des unteren Blattes auszuführen. In dem unten gezeigten Bild möchte ich beispielsweise, dass der Benutzer auf die Wiedergabetaste tippt. Ich kann das jetzt nicht tun, da die Barriere des Bodenblatts den Klick auf die Wiedergabetaste blockiert.

- Aus meiner Forschung geht hervor, dass das untere Blatt eine Vollbildkomponente ist. Es scheint von Höhe zu sein, halber Bildschirm ist eine Täuschung. (Indem Sie die Barrierefarbe transparent machen und Höhenbeschränkungen hinzufügen).
showModalBottomSheet(
context: context,
isDismissible: false,
barrierColor: Colors.transparent,
builder: (_) {
return GestureDetector(
behavior: HitTestBehavior.translucent,
child: Container(
constraints: BoxConstraints(maxHeight: height),
color: Theme.of(context).cardColor,
child: child.....
),
);
},
isScrollControlled: true,
);
Antworten
3 MuhammetÖmer Nov 28 2020 at 04:23
Ich habe es wie Bottom Sheet gelöst, aber mit einer anderen Methode. Ich hoffe ich habe die Frage richtig gestellt.

import 'package:flutter/material.dart';
class BottomSheetOutside extends StatefulWidget {
@override
_BottomSheetOutsideState createState() => _BottomSheetOutsideState();
}
class _BottomSheetOutsideState extends State<BottomSheetOutside> with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation<Offset> offset;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: Duration(seconds: 1));
offset = Tween<Offset>(begin: Offset(0.0, 1.0), end: Offset.zero).animate(_controller);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Expanded(flex: 4, child: buildTop),
Expanded(flex: 6, child: buildBottom),
],
),
);
}
Container get buildTop {
return Container(
width: double.infinity,
color: Colors.red,
child: IconButton(
icon: Icon(Icons.play_circle_fill_rounded),
onPressed: () {
switch (_controller.status) {
case AnimationStatus.dismissed:
_controller.forward();
break;
case AnimationStatus.forward:
break;
case AnimationStatus.reverse:
break;
case AnimationStatus.completed:
_controller.reverse();
break;
}
},
),
);
}
Stack get buildBottom {
return Stack(children: [
Container(color: Colors.blue),
buildBottomSlide,
]);
}
Widget get buildBottomSlide {
return SlideTransition(
position: offset,
child: Card(
child: ListView.builder(
itemCount: 10,
itemBuilder: (context, index) => ListTile(
leading: Icon(Icons.comment),
title: Text("Test $index"),
),
),
),
);
}
}