-1

是否可以覆盖子小部件内的不透明度值?

我有一个项目列表,并根据非活动状态使它们部分透明。

ListView.builder(
  itemBuilder:(c,i) {
    if(status) return MyCard(active:status);
    else return Opacity(opacity: 0.5, child: MyCard(active: status);
  },
  itemCount: 5,
);

但是现在,所有的小部件,无论是活动的还是非活动的,都需要显示一个完全可见的下载按钮。

class MyCard extends StatelessWidget{
  ///
  Widget build(c){
    return Column(
      children:[
        WidgetA(),
        WidgetB(),

        // this should be always fully visible.
        // Can we override the parent's opacity property somehow?
        DownloadButton(), 
      ]
    );
  }
}

使用不透明度可以实现这种行为吗?还是我需要分别访问每个子项目?

4

2 回答 2

0

包裹WidgetAWidgetBColumn其父级为Opacity.

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: ListView(
          children: <Widget>[
            MyCard(false),
            MyCard(true),
            MyCard(false),
          ],
        ),
      ),
    );
  }
}

class MyCard extends StatelessWidget {
  MyCard(this.status);

  final bool status;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Opacity(
          opacity: status ? 1 : 0.3,
          child: Column(
            children: const <Widget>[
              Text('Widget A'),
              Text('Widget B'),
            ],
          ),
        ),
        TextButton(
          onPressed: () {},
          child: const Text('DL Button'),
        ),
      ],
    );
  }
}
于 2021-03-16T07:51:36.823 回答
0

使用不透明度可以实现这种行为吗?

还是我需要分别访问每个子项目?

是的

您可以拆分您的MyCard小部件不包含DownloadButton,然后Opacity仅用于MyCard

于 2021-03-16T07:51:55.883 回答