Flutter: как переопределить значение непрозрачности внутри дочернего виджета?

Можно ли изменить значение непрозрачности внутри дочернего виджета?

У меня есть список элементов, и я делаю их частично прозрачными, исходя из неактивного статуса.

      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(), 
      ]
    );
  }
}

Возможно ли такое поведение при использовании непрозрачности? Или мне нужно посещать каждый из дочерних предметов отдельно?

2 ответа

Сворачивать WidgetA и WidgetB внутри Column чей родитель 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'),
        ),
      ],
    );
  }
}

Возможно ли такое поведение при использовании непрозрачности?

Нет

Или мне нужно посещать каждый из дочерних предметов отдельно?

да

Вы можете разделить свой виджет, не содержащий DownloadButton а потом Opacity только для MyCard

Другие вопросы по тегам