flutter - 点击障碍时小部件不会弹出

标签 flutter

我正在尝试创建一个 float 小部件,它后面有一个模态屏障。如果用户点击屏障,则应弹出小部件。 我将 barrierDismissable 设置为 true。 我还想看看 Flutter ModalBottomSheets 和 Dialogs,但运气不佳。

我几乎被困在这里,我不知道我做错了什么。

import 'package:flutter/material.dart';

class TutorialOverlay extends PopupRoute<void> {
  @override
  Duration get transitionDuration => Duration(milliseconds: 500);

  @override
  // TODO: implement barrierColor
  Color get barrierColor => const Color(0x80000000);

  @override
  // TODO: implement barrierDismissible
  bool get barrierDismissible => true;

  @override
  // TODO: implement barrierLabel
  String get barrierLabel => null;

  @override
  Widget buildPage(
    BuildContext context,
    Animation<double> animation,
    Animation<double> secondaryAnimation,
  ) {
    return Material(
      type: MaterialType.transparency,
      child: SafeArea(
        child: _buildOverlayContent(context),
      ),
    );
  }

  Widget _buildOverlayContent(BuildContext context) {
    return GestureDetector(
      onTap: () => print('t'),
      child: Align(
        alignment: Alignment.center,
        child: Container(
          color: Colors.red,
          height: 200,
          width: 200,
        ),
      ),
    );
  }

  @override
  Widget buildTransitions(BuildContext context, Animation<double> animation,
      Animation<double> secondaryAnimation, Widget child) {
    return FadeTransition(
      opacity: animation,
      child: ScaleTransition(
        scale: animation,
        child: child,
      ),
    );
  }
}

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Playground',
      home: TestPage(),
    );
  }
}

class TestPage extends StatelessWidget {
  void _showOverlay(BuildContext context) {
    Navigator.of(context).push(TutorialOverlay());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Test')),
      body: Padding(
        padding: EdgeInsets.all(16.0),
        child: Center(
          child: RaisedButton(
            onPressed: () => _showOverlay(context),
            child: Text('Show Overlay'),
          ),
        ),
      ),
    );
  }
}

最佳答案

您不能在 buildPage() 方法中使用 Material,因为 Material 是不透明的并且会在屏障上呈现,所以您将无法点击它。

关于flutter - 点击障碍时小部件不会弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57013750/

相关文章:

flutter - Flutter:在容器底部放置分隔线吗?

flutter - Expanded() 小部件在 ListView 中不起作用

dart - flutter - 无法使用 FutureBuilder 发送 API 请求

flutter - 在 Flutter 中运行单元测试时 MissingPluginException

dart - 如何在 Flutter 中制作一个 AlertDialog?

flutter 错误: The argument type 'Future<Object?> Function()' can't be assigned to the parameter type 'FutureOr<dynamic> Function(dynamic)'

flutter - 每当我按下移除按钮时,都会移除最后一个项目

dart - 位于栈内

animation - Flutter AnimatedList 仍然不稳定?

Flutter - 如何在不阻塞 UI 的情况下计算包含 future 的繁重任务?