草庐IT

dart - 约束可拖动区域

coder 2023-07-22 原文

我正在尝试创建一个可拖动的类似 slider 的小部件(如确认 slider )。我的问题是是否有办法限制可拖动区域?

import 'package:flutter/material.dart';

import 'confirmation_slider.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        body: new ListView(
          children: <Widget>[
            new Container(
              margin: EdgeInsets.only(
                top: 50.0
              ),
            ),

            new Container(
              margin: EdgeInsets.only(
                left: 50.0,
                right: 50.0
              ),
              child: new Draggable(
                axis: Axis.horizontal,
                child: new FlutterLogo(size: 50.0),
                feedback: new FlutterLogo(size: 50.0),
              ),

              height: 50.0,
              color: Colors.green
            ),
          ],
        ),
      ),
    );
  }
}

我想象容器类会限制可拖动区域,但它似乎并没有这样做。

最佳答案

没有。这不是 Draggable 小部件的目标。相反,使用 GestureDetector 来检测拖动。然后将它与 Align 之类的东西结合起来移动你的内容

这是一个基于您当前代码的完全可用的 slider 。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Slider(),
        ),
      ),
    );
  }
}

class Slider extends StatefulWidget {
  final ValueChanged<double> valueChanged;

  Slider({this.valueChanged});

  @override
  SliderState createState() {
    return new SliderState();
  }
}

class SliderState extends State<Slider> {
  ValueNotifier<double> valueListener = ValueNotifier(.0);

  @override
  void initState() {
    valueListener.addListener(notifyParent);
    super.initState();
  }

  void notifyParent() {
    if (widget.valueChanged != null) {
      widget.valueChanged(valueListener.value);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.green,
      height: 50.0,
      padding: EdgeInsets.symmetric(horizontal: 40.0),
      child: Builder(
        builder: (context) {
          final handle = GestureDetector(
            onHorizontalDragUpdate: (details) {
              valueListener.value = (valueListener.value +
                      details.delta.dx / context.size.width)
                  .clamp(.0, 1.0);
            },
            child: FlutterLogo(size: 50.0),
          );

          return AnimatedBuilder(
            animation: valueListener,
            builder: (context, child) {
              return Align(
                alignment: Alignment(valueListener.value * 2 - 1, .5),
                child: child,
              );
            },
            child: handle,
          );
        },
      ),
    );
  }
}

关于dart - 约束可拖动区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216747/

有关dart - 约束可拖动区域的更多相关文章

  1. ruby-on-rails - 缺失区域;使用 :region option or export region name to ENV ['AWS_REGION' ] - 2

    我知道还有其他相同的问题,但他们没有解决我的问题。我不断收到错误:Aws::Errors::MissingRegionErrorinBooksController#create,缺少区域;使用:region选项或将区域名称导出到ENV['AWS_REGION']。但是,这是我的配置开发.rb:config.paperclip_defaults={storage::s3,s3_host_name:"s3-us-west-2.amazonaws.com",s3_credentials:{bucket:ENV['AWS_BUCKET'],access_key_id:ENV['AWS_ACCE

  2. 软约束、硬约束、Minimum Snap的轨迹优化方法 - 2

    文章目录前言约束硬约束的轨迹优化Corridor-BasedTrajectoryOptimizationBezierCurveOptimizationOtherOptions软约束的轨迹优化Distance-BasedTrajectoryOptimization优化方法前言可以看看我的这几篇Blog1,Blog2,Blog3。上次基于MinimumSnap的轨迹生成,有许多优点,比如:轨迹让机器人可以在某个时间点抵达某个航点。任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。MinimumSnap可以把问题转换为凸优化问题。缺点:MnimumSnap可以控制轨迹一定经过中间的

  3. ruby-on-rails - 子域约束并排除某些子域 - 2

    在我的routes.rb文件中,我想使用rails3中的子域约束功能,但是我想从catchall路由中排除某些域。我不想在特定的子域中有特定的Controller。这样做的最佳做法是什么。#thissubdomainidontwantallofthecatchallroutesconstraints:subdomain=>"signup"doresources:usersend#hereIwanttocatchallbutexcludethe"signup"subdomainconstraints:subdomain=>/.+/doresources:carsresources:sta

  4. ruby-on-rails - 在rails中创建一个表并添加外键约束 - 2

    我有一个表students,字段为ward_id,我必须创建一个名为guardian_users的表,字段为id,ward_id,email,guardian_id,hashed_pa​​ssword等现在我必须添加约束外键。学生中的任何更新/删除/编辑/插入应该对guardian_users具有相同的效果。我如何在Rails2.3.5中做到这一点?students表存在,但其他表还不存在。 最佳答案 您要么需要foreign_key_migrations插件或#execute方法。假设您使用插件:classCreateGuardi

  5. ruby - 使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域 - 2

    我正在使用适用于Ruby的AWS开发工具包向Rails3应用程序发布消息和AWSSNS主题,如下所示:sns=AWS::SNS.newtopic=sns.topics['arn:aws:sns:eu-west-1:55555555555:my_topic']topic.publish("MESSAGE",:subject=>"SUBJECT")当我发布到“us-east-1”中的主题时,它按预期工作,但发布到“eu-west-1”区域中的主题时不起作用:AWS::SNS::Errors::InvalidParameter-Invalidparameter:TopicArn:使用AWSS

  6. ruby - Rails 中的 FactoryGirl - 具有唯一约束的关联 - 2

    这个问题是对这里提出的问题的扩展:Usingfactory_girlinRailswithassociationsthathaveuniqueconstraints.Gettingduplicateerrors所提供的答案对我来说非常有效。这是它的样子:#Createsaclassvariableforfactoriesthatshouldbeonlycreatedonce.moduleFactoryGirlclassSingleton@@singletons={}defself.execute(factory_key)begin@@singletons[factory_key]=Fa

  7. ruby-on-rails - 使用 rspec 测试具有子域约束的​​路由 - 2

    我在使用子域约束进行rspec路由测试时遇到问题。特别是我有一条路线constraints:subdomain=>"api"doresources:sign_ups,:only=>[:create]end和(除其他外)测试it"doesallowcreationofsignups"do{:post=>"/sign_ups"}.shouldroute_to(:controller=>"sign_ups",:action=>"create",)end如果我删除子域约束,则此测试通过,但它会失败。我必须告诉rspec使用子域,但我不知道如何使用TIA安迪 最佳答案

  8. ruby-on-rails - 使用基于已安装引擎的 url_for 获取基于约束的 url - 2

    有什么方法可以让url_for在Action调度路由期间根据request.host返回url吗?mountCollaborate::Engine=>'/apps/collaborate',:constraints=>{:host=>'example.com'}mountCollaborate::Engine=>'/apps/worktogether'示例:当用户在example.com主机上时collaborate_path=>/apps/collaborate当用户在任何其他主机上时collaborate_path=>/apps/worktogether经过大量研究,我意识到Rou

  9. ruby-on-rails - 在 Rails 3 中的区域设置更改后重定向到新域中的同一页面 - 2

    使用带有以下gem的Rails3.2.8的应用程序gem'friendly_id','~>4.0'gem'route_translator'在/config/initializers/i18n.rbTLD_LOCALES={"com"=>:en,"jobs"=>:en,"net"=>:en,"in"=>:en,"de"=>:de,"ch"=>:de,"at"=>:de,"br"=>:pt,"ar"=>:es,"cl"=>:es,"mx"=>:es}在/app/controllers/application_controller.rb中,使用前置过滤器为每个请求设置语言环境:before

  10. ruby-on-rails - 如何在 Ruby on Rails 中更改区域偏移量一段时间? - 2

    我有一个包含时间的变量foo,比如说今天下午4点,但是时区偏移量是错误的,即它处于错误的时区。如何更改时区?当我打印它时,我得到了FriJun2607:00:00UTC2009所以没有偏移量,我想将偏移量设置为-4或东部标准时间。我希望能够将偏移量设置为Time对象的一个​​属性,但这似乎不可用? 最佳答案 你没有明确说明你是如何获得实际变量的,但既然你提到了Time类,所以我假设你有时间使用它,我会在我的回答中提到它时区实际上是Time类的一部分(在您的情况下,时区显示为UTC)。作为Time.now响应的一部分,Time.now

随机推荐