簡體   English   中英

Flutter,使用布爾值將圖標狀態從一個小部件更改為另一個

[英]Flutter, change Icon state with boolean from one widget to another

我有兩個小部件。 首先是 ParticipantScreen(),它在 GridView.builder() 中顯示第二個小部件 - ParticipantCard()。 這兩個小部件都有麥克風圖標,可以讓參與者靜音。 當我使本地參與者靜音時,我單擊 ParticipantScreen() 上的麥克風圖標,關於這一點,我也想將 ParticipantCard() 中的麥克風圖標狀態更改為相同的布爾值,但僅適用於列表中用於創建 GridView 的第一項與參與者卡。 是否可以將布爾值從一個小部件傳遞到另一個小部件?

您可以為此使用回調函數(可以是 typedef)

final Function(bool isMuted) onChanged;

玩這個小部件

class ParentWidget extends StatefulWidget {
  const ParentWidget({Key? key}) : super(key: key);

  @override
  State<ParentWidget> createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
  bool _isMuted = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Switch(
              value: _isMuted,
              onChanged: (v) {
                setState(() {
                  _isMuted = !_isMuted;
                });
              }),
          ChildC(
            isMuted: _isMuted,
            onChanged: (isMuted) {
              setState(() {
                _isMuted = isMuted;
              });
            },
          ),
        ],
      ),
    );
  }
}

class ChildC extends StatefulWidget {
  final bool isMuted;
  final Function(bool isMuted) onChanged;

  const ChildC({
    Key? key,
    required this.isMuted,
    required this.onChanged,
  }) : super(key: key);

  @override
  State<ChildC> createState() => _ChildCState();
}

class _ChildCState extends State<ChildC> {
  @override
  Widget build(BuildContext context) {
    return Switch(
        value: widget.isMuted,
        onChanged: (v) {
          widget.onChanged(v);
        });
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM