gpt4 book ai didi

android - ListView flutter 中的问题开关值

转载 作者:行者123 更新时间:2023-12-03 23:50:57 25 4
gpt4 key购买 nike

我在 ListView 中为每个元素创建了一个 Switch 小部件。当我点击开关时,所有元素的值都会改变。
我检查了 flutter 文档,飞镖文档......我想,我没有在 onChanged 方法中恢复元素位置。

但是怎么办?

当我单击时,我的值 isSwitched 发生了变化。
多亏了:snapshot.data[index].name

主题画面:

class _ThemePage extends State<ThemePage> {
bool isSwitched = false;
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: Text("Blackbox"),
leading: Image.asset(
'assets/img/logo_ineat.png',
fit: BoxFit.contain,
height: 32,
),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
new Container(
margin: EdgeInsets.only(top: 10.0, bottom: 10.0),
child: new Text('Sélection du profil',
style: new TextStyle(
fontSize: 24, fontWeight: FontWeight.bold)),
alignment: Alignment.topCenter),
new Flexible(
child: new Container(
child: new FutureBuilder<List<t.Theme>>(
future: t.Theme().getThemes(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
if (snapshot.data != null) {
return new Column(
children: <Widget>[
new Expanded(
child: new ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, index) {
return ListTile(
title:
new Text(snapshot.data[index].name),
trailing: new Switch(
value: isSwitched,
activeColor: Colors.pink,
activeTrackColor: Colors.pinkAccent,
onChanged: (value){
setState(() {
isSwitched = value;
if(value==true) {
print(snapshot.data[index].name);
}
});
},
),
);
},
),
),
],
);
}
} else {
new Text("Loading...");
return new CircularProgressIndicator();
}
}),
),
),
new Container(
margin: EdgeInsets.only(right: 10.0),
child: new RaisedButton.icon(
/*onPressed: () {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => Technologies()));
},*/
label: Text('Suivant'),
icon: Icon(Icons.navigate_next),
),
alignment: Alignment.bottomRight,
),
],
),
),
);
}
}

最佳答案

您正在使用单个属性控制切换值 isSwitched
你可以

  • 创建另一个有状态的小部件,将您的开关逻辑放在那里(如果您想读取值,请使用回调)(更清洁)
  • 创建 bool 列表而不是单个属性

  • 您的代码与第一个解决方案:


    class YourListViewItem extends StatefulWidget {

    final String title;

    const YourListViewItem({Key key, this.title}) : super(key: key);

    @override
    _YourListViewItemState createState() => _YourListViewItemState();
    }

    class _YourListViewItemState extends State<YourListViewItem> {

    bool isSwitched = false;

    @override
    Widget build(BuildContext context) {
    return ListTile(
    title:
    new Text(widget.title),
    trailing: new Switch(
    value: isSwitched,
    activeColor: Colors.pink,
    activeTrackColor: Colors.pinkAccent,
    onChanged: (value){
    setState(() {
    isSwitched = value;
    });
    },
    ),
    );
    }
    }


    class _ThemePage extends State<ThemePage> {
    bool isSwitched = false;
    @override
    Widget build(BuildContext context) {
    return new Scaffold(
    appBar: new AppBar(
    title: Text("Blackbox"),
    leading: Image.asset(
    'assets/img/logo_ineat.png',
    fit: BoxFit.contain,
    height: 32,
    ),
    ),
    body: new Center(
    child: new Column(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: <Widget>[
    new Container(
    margin: EdgeInsets.only(top: 10.0, bottom: 10.0),
    child: new Text('Sélection du profil',
    style: new TextStyle(
    fontSize: 24, fontWeight: FontWeight.bold)),
    alignment: Alignment.topCenter),
    new Flexible(
    child: new Container(
    child: new FutureBuilder<List<t.Theme>>(
    future: t.Theme().getThemes(),
    builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData) {
    if (snapshot.data != null) {
    return new Column(
    children: <Widget>[
    new Expanded(
    child: new ListView.builder(
    itemCount: snapshot.data.length,
    itemBuilder: (BuildContext context, index) {
    return YourListViewItem(title: snapshot.data[index].name);
    },
    ),
    ),
    ],
    );
    }
    } else {
    new Text("Loading...");
    return new CircularProgressIndicator();
    }
    }),
    ),
    ),
    new Container(
    margin: EdgeInsets.only(right: 10.0),
    child: new RaisedButton.icon(
    /*onPressed: () {
    Navigator.pushReplacement(context,
    MaterialPageRoute(builder: (context) => Technologies()));
    },*/
    label: Text('Suivant'),
    icon: Icon(Icons.navigate_next),
    ),
    alignment: Alignment.bottomRight,
    ),
    ],
    ),
    ),
    );
    }
    }


    关于android - ListView flutter 中的问题开关值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57994179/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com