Изменить конкретный значок ListTile в ListView.builder - PullRequest
0 голосов
/ 24 марта 2020

Я относительно новичок в Flutter и Dart, поэтому у меня есть вопрос, касающийся манипулирования ListView. В настоящее время код ниже работает и отображает некоторую базовую c информацию внутри ListView. Как мне реализовать решение, чтобы при нажатии на конкретную плитку списка ее значок менялся на что-то другое? Ниже мой текущий код акции:

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      home: HomePage(),
    ));


class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

  Widget _getListItemTile(BuildContext context, int index) {
    return Card(
      child: GestureDetector(
        child: ListTile(
          leading: Icon(Icons.check_box_outline_blank),
          title: Text('My Item'),
          onTap: () {},
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My Test App'),
        centerTitle: true,
      ),
      body: ListView.builder(
        itemCount: 7,
        itemBuilder: _getListItemTile,
      ),
    );
  }
}

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете скопировать и вставить полный код ниже
Вы можете объявить List<bool> и изменить значок leading на boolList[index]
фрагмент кода

List<bool> boolList = [true, true, true, true, true, true, true];
...
Card(
      child: GestureDetector(
        child: ListTile(
          leading: boolList[index]
              ? Icon(Icons.check_box_outline_blank)
              : Icon(Icons.place),
          title: Text('My Item'),
          onTap: () {
            boolList[index] = !boolList[index];
            setState(() {});
          },
        ),
      ),
    )

рабочая демонстрация

enter image description here

полный код

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      home: HomePage(),
    ));

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List<bool> boolList = [true, true, true, true, true, true, true];

  Widget _getListItemTile(BuildContext context, int index) {
    return Card(
      child: GestureDetector(
        child: ListTile(
          leading: boolList[index]
              ? Icon(Icons.check_box_outline_blank)
              : Icon(Icons.place),
          title: Text('My Item'),
          onTap: () {
            boolList[index] = !boolList[index];
            setState(() {});
          },
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My Test App'),
        centerTitle: true,
      ),
      body: ListView.builder(
        itemCount: boolList.length,
        itemBuilder: _getListItemTile,
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...