Flutter: как написать оператор if-else для вызова ящика?
Я пытаюсь сделать drawer
в классе DetailedPage
только когда предыдущий класс был CameraPage
. Для этого я создаю переменную StringpreviousScreen = 'CAMERA'
и передал переменную в класс DetailedPage
. Однако мне трудно написать оператор if-else, чтобыdrawer
только когда String previousScreen
равно 'CAMERA'
.
Я последовал совету на этой странице, но это не сработало, потому что я хочу использоватьdrawer: MyDrawer()
. (drawer:
кажется, что у него есть определенное место, например, в Scaffold
а также CustomScrollView
, работать). Есть ли способ использовать оператор if-else дляdrawer: MyDrawer()
?
Весь мой DetailedPage
здесь:
(Я пытался вырезать ненужные коды, поэтому количество скобок может быть неправильным, но оно работает, за исключением оператора if-else в самом конце.)
class DetailScreen extends StatelessWidget {
final Recyclable recyclable;
final String previousScreen;
DetailScreen(
{Key key, @required this.recyclable, @required this.previousScreen})
: super(key: key);
@override
Widget build(BuildContext context) {
//set variables
String imagename = recyclable.title;
String recycle = recyclable.recycle;
String instruction = recyclable.instruction;
String why = recyclable.why;
String donate = recyclable.donate;
return Scaffold(
body: CustomScrollView(
physics: const BouncingScrollPhysics(),
slivers: <Widget>[
SliverAppBar(
expandedHeight: 200.0,
pinned: false,
floating: false,
backgroundColor: Colors.transparent,
onStretchTrigger: () {
// Function callback for stretch
return;
},
flexibleSpace: FlexibleSpaceBar(
centerTitle: true,
title: Text('$imagename',
style: TextStyle(
fontSize: 55.0,
fontFamily: 'Rajdhani',
fontWeight: FontWeight.w700,
color: Colors.white)),
background: Container(
decoration: MyBoxDecoration(imagename),
),
),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.widgets,
color: Colors.white,
),
tooltip: 'Home Page',
//show side pages
onPressed: () => Navigator.of(context).pushNamed('/HOME'),
),
],
),
SliverPadding(
padding: EdgeInsets.all(20.0),
sliver: SliverList(
delegate: SliverChildListDelegate([
Row(
children: [
Text('This item is ',
style: LightThemeGrey().textTheme.bodyText1),
Text('$recycle',
style: LightThemeGrey().textTheme.subtitle2),
Text('.', style: LightThemeGrey().textTheme.bodyText1),
],
),
]),
),
),
],
);
//TODO: If previous Screen == CAMERA, make MyDrawer()
previousScreen == 'CAMERA'? drawer: MyDrawer() : null,
);
}
}
2 ответа
Вам следует использовать следующее:
drawer: previousScreen == 'CAMERA'? MyDrawer() : null,
drawer
принимает виджет, поэтому вы можете использовать тернарный оператор для письменного присвоения виджета свойству drawer
согласно условию.
Думаю, это работает:
drawer: (previousScreen == 'CAMERA')? MyDrawer() : null,
Сообщите мне, если я отвечу на ваш вопрос.