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,

Сообщите мне, если я отвечу на ваш вопрос.

Другие вопросы по тегам