dart 如何一次只允许打开一个Slidable

x6h2sr28  于 2023-01-06  发布在  其他
关注(0)|答案(4)|浏览(238)

我正在使用flutter_sildable用于聊天应用程序幻灯片,我希望一次只打开一张幻灯片,所以我尝试了他们在文档中推荐的方法,但它不起作用,我不知道为什么

class _ChatTileState extends State<ChatTile> {
  final SlidableController slidableController = SlidableController();

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {},
      child: Container(
        padding: EdgeInsets.symmetric(vertical: 10),
        child: Slidable(
          key: UniqueKey(),
          controller: slidableController,
          movementDuration: Duration(milliseconds: 100),
...
nzk0hqpo

nzk0hqpo1#

嘿,为了使用flutter_slidable包一次打开一个磁贴,你需要对所有磁贴使用相同的Slidable控制器。从你的代码看,你似乎在为每个磁贴示例化新的Slidable控制器。你应该做的是从父部件示例化SlidableController,并将其传递给磁贴部件。
这是父微件

...
  String title = 'Customers';
  final SlidableController slidableController = SlidableController();
  @override
  Widget build(BuildContext context) {
    return ScaffoldBody(
      centerTitle: true,
      title: title,

      drawer: CustomerScreen.isOrderAdding == true ? null : AppDrawer(),
      body: FutureBuilder(
        future: _refreshCustomers(context),
        builder: (ctx, snapshot) =>
            snapshot.connectionState == ConnectionState.waiting
                ? Center(
                    child: Center(
                      child: Image(
                        image: AssetImage('assets/img/LoadingCartoon.gif'),
                      ),
                    ),
                  )
                : RefreshIndicator(
                    onRefresh: () => _refreshCustomers(context),
                    child: Consumer<CustomerHttps>(
                      builder: (ctx, customerData, _) => Padding(
                        padding: EdgeInsets.all(5),
                        child: ListView.builder(
                          itemCount: customerData.items.length,
                          itemBuilder: (_, i) => CustomerTile(
                            slidableController: slidableController,
                            id: customerData.items[i].id,
                            name: customerData.items[i].name,
                          ),
                        ),
                      ),
                    ),
                  ),
      ),
    );

在我的可滑动“平铺”构件(子构件)中

final String id;
  final String name;
  final SlidableController slidableController;

  CustomerTile({
    this.id,
    this.name,
    this.slidableController,
  });

  Widget build(BuildContext context) {
    return CustomerScreen.isOrderAdding
        ? Container(
            padding: EdgeInsets.only(bottom: 9),
            child: Material(
              elevation: 5,
              borderRadius: BorderRadius.all(Radius.circular(10)),
              color: Colors.white,
              child: InkWell(
                borderRadius: BorderRadius.all(Radius.circular(10)),
                splashColor: Theme.of(context).primaryColor,
                onTap: () {
                  //clears any products and signature saved after selecting a new customer
                  var provider =
                      Provider.of<AddingProductOrder>(context, listen: false);
                  provider.clear();
                  Navigator.of(context).pushNamed(
                    EditOrderScreen.routeName,
                    arguments: [id, 'selection'],
                  );
                },
                child: Container(
                  width: double.infinity,
                  child: ListTile(
                    title: Text(name,
                        style: TextStyle(color: Colors.black),
                        overflow: TextOverflow.ellipsis,
                        maxLines: 1,
                        softWrap: false),
                    leading: Icon(
                      Icons.person,
                      color: Theme.of(context).primaryColor,
                    ),
                  ),
                ),
              ),
            ),
          )
        : Slidable(
            key: Key(id),
            actionPane: SlidableDrawerActionPane(),
            controller: slidableController,
            actionExtentRatio: 0.25,
            child: Container(...
gmxoilav

gmxoilav2#

如果您使用的是1.0.0或更高版本,则可以通过使用以下内容 Package Slidable小部件列表来实现相同的行为:
第一个月

lnlaulya

lnlaulya3#

希望此处已接受的答案对您有用。如果不适用,请向我们展示您的其余代码,以便我们正确查看出现问题的任何进一步原因。滑动列表项以获取更多选项(Flutter)

6qqygrtg

6qqygrtg4#

首先将父wiget Package 在"SlidableAutoCloseBehavior"中,然后添加组标记。
可滑动自动关闭行为(子项:列表视图(子视图:[可滑动(组标签:"0",),可滑动(组标记:"0",),可滑动(组标记:'1',),],),)

相关问题