169 похожих чатов

Ребят, почему showDialog может ничего не показывать при нажатии?

11 ответов

21 просмотр

попробуй задать контейнеру размер и цвет

// Copyright 2019 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/gallery_localizations.dart'; import 'package:gallery/demos/material/material_demo_types.dart'; // Pressing the PopupMenuButton on the right of this item shows // a simple menu with one disabled item. Typically the contents // of this "contextual menu" would reflect the app's state. class _ContextMenuDemo extends StatelessWidget { const _ContextMenuDemo({Key key, this.showInSnackBar}) : super(key: key); final void Function(String value) showInSnackBar; @override Widget build(BuildContext context) { return ListTile( title: Text(GalleryLocalizations.of(context) .demoMenuAnItemWithAContextMenuButton), trailing: PopupMenuButton<String>( padding: EdgeInsets.zero, onSelected: (value) => showInSnackBar( GalleryLocalizations.of(context).demoMenuSelected(value), ), itemBuilder: (context) => <PopupMenuItem<String>>[ PopupMenuItem<String>( value: GalleryLocalizations.of(context).demoMenuContextMenuItemOne, child: Text( GalleryLocalizations.of(context).demoMenuContextMenuItemOne, ), ), PopupMenuItem<String>( enabled: false, child: Text( GalleryLocalizations.of(context).demoMenuADisabledMenuItem, ), ), PopupMenuItem<String>( value: GalleryLocalizations.of(context).demoMenuContextMenuItemThree, child: Text( GalleryLocalizations.of(context).demoMenuContextMenuItemThree, ), ), ], ), ); } }

Vladimir-Onokhov Автор вопроса

Вы за-push-иваете (showDialog()) Dialog внутри onTap по окончанию которого произойдет pop, так как onTap происходит на элементе меню (showMenu()) и это меню должно за-pop-ится, убраться. Поэтому после onTap наверху стека роутов (_hystory) будет не меню, а диалог, который должен был показаться, но по этой причине не покажется. Flutter эту ситуацию, я бы сказал, обрабатывает не правильно, если смотреть по _RouteLifecycle -ам. Он тупо берет из стека последенее и пытается его за-pop-ить, но такова логика. Можно перед вызовом showDialog() подождать до следующего цикла await Future.delayed(Duration.zero), тогда наверху в стеке, в текущем фрейме (там где onTap: () async ...) , будет именно меню и оно уберется, а в следующем фрейме уже за-push-ится Dialog и покажется.

Dmitrii Cheremisov
Вы за-push-иваете (showDialog()) Dialog внутри onT...

Коллега, а вас не смущает что у buder возвращает SizedBox. Shrink ()?

ManBearPig
Коллега, а вас не смущает что у buder возвращает ...

Нет, не смущает, я просто ответил на вопрос.

Vladimir-Onokhov Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта