Как предотвратить перетаскивание ящика под endDrawer?

Проблема

В Scaffold есть проблема с нарушением функций, которую я и полагаю, никто другой не могу исправить. Если вы тоже не можете это исправить, помогите мне придумать лучший хак!

Повторяемость

Выполните следующее...

import 'package:flutter/material.dart';

class Home extends StatelessWidget {
  @override
  Widget build(context) {
    return Scaffold(
      appBar: AppBar(),
      drawer: Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        color: Colors.green,
      ),
      endDrawer: Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        color: Colors.blue,
      ),
      body: Container(
        width: MediaQuery.of(context).size.width / 2,
        color: Colors.black,
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(home: Home()));
}

Если щелкнуть крайний ящик, не касаясь черного, можно открыть ящик под ним.

Работа

Вот что у меня есть...

import 'package:flutter/material.dart';

class Home extends StatelessWidget {
  @override
  Widget build(context) {
    final GlobalKey<ScaffoldState> key = new GlobalKey<ScaffoldState>();
    return Scaffold(
      key: key,
      appBar: AppBar(),
      drawer: (key.currentState?.isEndDrawerOpen ?? false)
          ? null
          : Container(
              width: MediaQuery.of(context).size.width,
              height: MediaQuery.of(context).size.height,
              color: Colors.green,
            ),
      endDrawer: Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        color: Colors.blue,
      ),
      body: Container(
        width: MediaQuery.of(context).size.width / 2,
        color: Colors.black,
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(home: Home()));
}

0 ответов

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