flutter - 如何使复选框在 modalroute 类中工作

标签 flutter dart

嗨,我有一个模态路线,它从下到上打开它并使屏障颜色不透明,所以我喜欢它,但问题是复选框不起作用!

enter image description here

class FilterSearch extends ModalRoute{

    bool chkSearchbySkill = false;

    @override
    Duration get transitionDuration => Duration(milliseconds: 700);

    @override
    bool get opaque => false;

    @override
    bool get barrierDismissible => false;

    @override
    Color get barrierColor => Colors.black.withOpacity(0.5);

    @override
    String get barrierLabel => null;

    @override
    bool get maintainState => true;

    @override
    Widget buildPage(BuildContext context,
        Animation<double> animation,
        Animation<double> secondaryAnimation,) {
        // This makes sure that text and other content follows the material style
        return Material(
            type: MaterialType.transparency,
            // make sure that the overlay content is not cut off
            child: SafeArea(
                child: _buildOverlayContent(context),
            ),
        );
    }

    Widget _buildOverlayContent(BuildContext context) {
        return Align(
            alignment: Alignment.bottomCenter,
            child: SingleChildScrollView(
                child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                        Container(
                          padding: EdgeInsets.only(top: 10, bottom: 50),
                            color: Colors.grey[50],
                            alignment: Alignment.bottomCenter,
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.start,
                              crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                    Checkbox(
                                       value: this.chkSearchbySkill, 
                                       onChanged: (bool value){setState((){chkSearchbySkill = value;});},)
                                    ]))));}


    @override
    Widget buildTransitions(BuildContext context, Animation<double> animation,
        Animation<double> secondaryAnimation, Widget child) {
        var begin = Offset(0.0, 1.0);
        var end = Offset.zero;
        var curve = Curves.ease;

        var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));

        return SlideTransition(
            position: animation.drive(tween),
            child: child,
        );
    }
}

如何使复选框起作用!!

另一个问题,如果我使用bottomsheet而不是模态路由,我会得到相同的结果(不透明背景)并且复选框会起作用吗?

最佳答案

我认为您的ModalRoute类没有能力通过setState方法触发小部件重建。为此,如果您想在此方法中封装复选框状态,则应该包装从 _buildOverlayContent 返回的 Align 小部件,如下所示:


Widget _buildOverlayContent(BuildContext context) {
        return StatefulBuilder(
          builder: (context, setState) {
            return Align(
              ...
            );
          }
        );
}

然后,单击后,复选框会反射(reflect)更改:

enter image description here

建议:将 FilterSearch 类重写为 StatefulWidget,并将其用作 showDialog 的内容,甚至用作 showModalBottomSheet 的内容强>。我的两分钱。

关于flutter - 如何使复选框在 modalroute 类中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71325773/

相关文章:

flutter - 如何在Flutter中使小部件的大小与另一个小部件的大小相同

dart - 如何取消 Future.delayed?

android - 我可以在 Flutter 中为 Android 应用程序安装应用程序后更改应用程序图标和名称吗?

dart - 在 flutter web 中发生 XMLHttpRequest 错误时启用 CORS

firebase - 如何在 Flutter 的隔离区中运行 Firebase 查询

testing - flutter 测试失败。找不到编译器错误 getter 'main'

dart - 如何在Dart中创建客户端和服务器端都使用的通用类

flutter - 如何在 GridView (Flutter) 中进行分页

dart - 尝试使用 get 关键字在 dart 中执行 setter 和 getter

java - Flutter/Dart 找不到 java 和 $JAVA_HOME