Flutter 颤振中底板滑块的实现

Flutter 颤振中底板滑块的实现,flutter,bottom-sheet,Flutter,Bottom Sheet,如何在颤振中实现底板内的滑块。我试过了,但滑块没有移动。但如果我把滑块放在一个新的脚手架上,它就起作用了。帮助我。提前谢谢 这是我的密码 new InkWell( onTap: () { // fire_ac_on_1(); },

如何在颤振中实现底板内的滑块。我试过了,但滑块没有移动。但如果我把滑块放在一个新的脚手架上,它就起作用了。帮助我。提前谢谢

这是我的密码

                          new InkWell(
                                onTap: () {
                                  //  fire_ac_on_1();
                                },
                               onDoubleTap:(){
                                  _showModalSheet_ac();

                                }

                                onLongPress: () {
                                  selectTime(context);
                                },
                                child: new IconButton(
                                  icon: new Image.asset('images/ac.png',
                                      color: ac_on_state == true ? Colors
                                          .green : Colors.redAccent),
                                  onPressed: () {
                                    fire_ac_on();
                                  },
                                  iconSize: 80.0,
                                ),
                              ),
//模底板 无效\u显示模式表\u ac{

double height = MediaQuery.of(context).size.height;
//print(height);
showModalBottomSheet(context: context, builder: (builder){
  return new Container(
    height: height - 200.0,
      child: new Center(
        child:  new Column(
          children: <Widget>[
            new Container(
             child: new Slider(
              value: slider_value,
           onChanged: onchanged),

          )
            )
          ],
        ),
      )
  );
});
}

您必须将BuildContext传递给生成器,而不是生成器。我希望下面的例子可以帮助你

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Bottom modal tutorial',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Bottom modal tutorial'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  mainBottomSheet(BuildContext context){
    showModalBottomSheet(
        context: context,
        builder: (BuildContext context){
          return Container(
            height: 300.0,
              child: Center(child: new Text("Demo Text"))
          );
        }
    );
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: Container(
        child: new Center(
          child: new Text(
            'Body',
          ),
        ),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: () => mainBottomSheet(context),
        child: new Icon(Icons.add),
      ),
    );
  }
}
您必须将BuildContext传递给构建器,而不是构建器。我希望下面的例子可以帮助你

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Bottom modal tutorial',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Bottom modal tutorial'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  mainBottomSheet(BuildContext context){
    showModalBottomSheet(
        context: context,
        builder: (BuildContext context){
          return Container(
            height: 300.0,
              child: Center(child: new Text("Demo Text"))
          );
        }
    );
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: Container(
        child: new Center(
          child: new Text(
            'Body',
          ),
        ),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: () => mainBottomSheet(context),
        child: new Icon(Icons.add),
      ),
    );
  }
}

我已使用StreamBuilder和RxDart解决了相同的问题:

导入“包:rxdart/rxdart.dart”; 最终_滑块=PublishSubject; 可观察的get sliderStream=>_slider.stream; void\u设置ModalBottomSheetContext{ showModalBottomSheet 上下文:上下文, 生成器:BuildContext bc{ 返回流生成器 生成器:构建上下文上下文,异步快照快照{ 返回滑块 activeColor:Colors.indigoAccent, 最小值:0.0, 最高:15.0, 一旦更改:重新评级{ _slider.sink.addnewRating; }, 值:snapshot.data, ; }, 初始数据:0.0, 流:sliderStream, ; } ; }
在每个onChanged事件上,您都将发出新滑块的值\u slider.sink.addnewRating;。每次滑块的值更改时,StreamBuilder都会收到通知,并将使用更新的值:snapshot.data重新生成小部件。

我已使用StreamBuilder和RxDart解决了相同的问题:

导入“包:rxdart/rxdart.dart”; 最终_滑块=PublishSubject; 可观察的get sliderStream=>_slider.stream; void\u设置ModalBottomSheetContext{ showModalBottomSheet 上下文:上下文, 生成器:BuildContext bc{ 返回流生成器 生成器:构建上下文上下文,异步快照快照{ 返回滑块 activeColor:Colors.indigoAccent, 最小值:0.0, 最高:15.0, 一旦更改:重新评级{ _slider.sink.addnewRating; }, 值:snapshot.data, ; }, 初始数据:0.0, 流:sliderStream, ; } ; }
在每个onChanged事件上,您都将发出新滑块的值\u slider.sink.addnewRating;。每次滑块的值更改时,StreamBuilder都会收到通知,并将使用更新的值:snapshot.data重新生成小部件。

底部工作表没有状态,这就是为什么在滑块中调用setState时它不会重新生成

您必须使用StatefulBuilder包装滑块小部件

        StatefulBuilder(
          builder: (context, setState){
            return Slider(
              value: _value,
              onChanged: (selection){
                setState(() {
                  _value = selection;
                });
              },
            );
          },
        ),

底部工作表不是有状态的,这就是为什么在滑块中调用setState时它不会重建

您必须使用StatefulBuilder包装滑块小部件

        StatefulBuilder(
          builder: (context, setState){
            return Slider(
              value: _value,
              onChanged: (selection){
                setState(() {
                  _value = selection;
                });
              },
            );
          },
        ),

请添加一些您尝试的代码。我添加了。谢谢你的回复。请添加一些你尝试过的代码。我添加了。谢谢你的回复。很抱歉回复太晚。问题不在于底部,它工作正常,但真正的问题是滑块不会在底部动态滑动。非常感谢您的回复。我试着像您所说的那样将Buildcontext替换为builder,但什么也没发生。还有其他建议吗?很抱歉回复太晚了。问题不在于底部,它工作正常,但真正的问题是滑块不会在底部动态滑动。非常感谢您的回复。我试着像您所说的那样将Buildcontext替换为builder,但什么也没发生。还有其他建议吗??