목록에서 항목을 삭제하고 setState (() {})를 수행하면 색상 상태가 변경됩니다.

므 루둘 아디 팔리

Flutter에서 ListTile 선행 속성에 임의의 색상을 할당하고 있지만 setState를 사용하여 항목을 삭제하면 모든 목록 항목의 색상이 변경되고 ObjectKey ()를 사용하려고 시도했는데 색상 상태를 일정하게 유지하고 싶습니다.

         ListTile(
              key: ObjectKey(expense),
              onTap: () {
                setState(() {
                 _allExpenses.remove(expense);
                });
              },
              leading: CircleAvatar(
                radius: 20,
                backgroundColor: Color(Random().nextInt(0xffffffff)),
                child: FindIcon(expense.type),
              ),
              title: Text("Test"),
            )

나는 provider와 notifyListeners (); 모든 항목 삭제시 UI를 다시 빌드합니다.

프랭크 모레노

귀하의 경우에는 setState매번 다시 빌드됩니다. keys 로 작업 ListTile하려면 의 새 래퍼를 만들어야합니다.

그러나 또 다른 대안이 있습니다. 에서 initState임의의 색상 목록을 만들 수 있습니다.

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

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

class _MyListState extends State<MyList> {
  final List<int> _allExpenses = [2, 4, 5, 6, 9, 10, 22];
  
  List<Color> _colors;
  
  @override
  void initState(){
    super.initState();
    _colors = [
      for(final _ in _allExpenses)
        Color(Random().nextInt(0xffffffff)),
    ];
  }
  
  void removeOne(int index){
    setState(() {
       _allExpenses.removeAt(index);
      _colors.removeAt(index);
    });
  }
  
  
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        for(int i = 0; i < _allExpenses.length; i++)
          ListTile(
            //key: ObjectKey(expense),
            onTap: () => removeOne(i),
            leading: CircleAvatar(
              radius: 20,
              backgroundColor: _colors[i],
              child: Icon(Icons.account_circle),
            ),
            title: Text("Test ${_allExpenses[i]}"),
          ),
      ]
    );
  }
}

여기에 이미지 설명 입력

임의의 색상에 필요한 메모리를 제어 할 수 있으므로 좋은 대안입니다. 그 논리로 확장 할 수 있습니다 ChangeNotifier그들의와의 notifyListeners()사용 addListener()의를 initState:

@override initState(){
  ...
  myChangeNotifierList.addListener(() => setState((){}));
}

임의의 색상을 처리하고 각 목록 타일의 상태를 유지하는 책임을 위임하는 또 다른 대안이 있습니다.

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


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

class _MyListWithKeysState extends State<MyListWithKeys> {
  final List<int> _allExpenses = [2, 4, 5, 6, 9, 10, 22];
  
  void removeOne(int expense){
    setState(() {
       _allExpenses.remove(expense);
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        for(final expense in _allExpenses)
          MyTile(
            key: ObjectKey(expense),
            expense: expense,
            onTap: () => removeOne(expense),
          ),
      ]
    );
  }
}

class MyTile extends StatefulWidget {
  const MyTile({
    Key key,
    @required this.expense,
    @required this.onTap,
  }) : assert(expense != null),
       assert(onTap != null),
       super(key: key);
  
  final int expense;
  final VoidCallback onTap;

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

class _MyTileState extends State<MyTile> {
  Color _color;
  
  @override
  void initState() {
    super.initState();
    _color = Color(Random().nextInt(0xffffffff));
  }
  
  @override
  Widget build(BuildContext context) {
    return ListTile(
      onTap: widget.onTap,
      leading: CircleAvatar(
        radius: 20,
        backgroundColor: _color,
        child: Icon(Icons.account_circle),
      ),
      title: Text('Test ${widget.expense}'),
    );
  }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

분류에서Dev

항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

분류에서Dev

immutable.js가있는 React, Redux : 목록에서 하나의 항목을 삭제할 때 올바른 상태 데이터를 가져올 수 없습니다.

분류에서Dev

REST API에서 목록 데이터를 가져온 후 항목 배열에서 목록 항목을 삭제하려고합니다.

분류에서Dev

이온 목록을 누르면 항목의 색상이 변경됩니다.

분류에서Dev

`select`에서`option`의 상위 항목을 변경하면 이벤트가 제거됩니다.

분류에서Dev

목록 상자 C #에서 항목을 삭제하는 방법

분류에서Dev

onAppear에서 상태를 변경하면 PageViewController가 중단됩니다.

분류에서Dev

탐색 창 항목 색상 필터를 변경하면 동일한 이미지 ID를 사용하는 imageView도 변경됩니다.

분류에서Dev

fancybox 제목을 분할하고 처음 몇 글자를 가져 와서 색상을 변경합니다.

분류에서Dev

AngularJS에서 항목을 삭제 한 후 상태를 다시로드하는 방법은 무엇입니까?

분류에서Dev

StatefulWidget의 상태로 항목 배열 및 "setState"가 변경된 배열의 항목에 대한 업데이트 만 트리거하도록 보장합니까?

분류에서Dev

SetState가 상태 값을 변경하지 않습니다.

분류에서Dev

React에서 한 상태를 변경하는 동안 두 상태가 모두 변경됩니다.

분류에서Dev

삭제 키를 사용하여 목록 상자에서 선택한 항목을 삭제하는 방법이 있습니까?

분류에서Dev

코드 숨김에서 목록 상자 선택되지 않은 항목 색상을 변경하는 방법

분류에서Dev

this.setState ()가 상태를 잘못된 값으로 변경하고 있습니다.

분류에서Dev

RecyclerView를 만들었고 화면 방향이 변경되면 중복 항목이 상단에 추가됩니다.

분류에서Dev

목록 상자 VBA에서 다중 열 데이터의 여러 항목을 검색하고 표시합니다.

분류에서Dev

선택한 항목 (개체)에서 목록 상자 항목 색상을 변경하는 방법은 무엇입니까?

분류에서Dev

두 개의 버튼 / 링크, 하나는 클릭 한 다음 다른 하나를 클릭 할 때까지 색상을 변경합니다. 다른 하나를 클릭하면 해당 항목에 대해 동일한 작업을 수행합니다.

분류에서Dev

SwiftUI에서 탭 항목 색상을 변경하는 방법

분류에서Dev

상위 항목을 게시하지 않고 solr 색인에서 사이트 코어 항목 삭제

분류에서Dev

상위 항목을 게시하지 않고 solr 색인에서 사이트 코어 항목 삭제

분류에서Dev

배열 redux 상태에서 항목을 삭제 하시겠습니까?

분류에서Dev

필터를 사용하여 항목을 삭제하려고하면 item.map이 함수가 아닙니다.

분류에서Dev

하위 메뉴 항목을 가리키면서 가리 키기 상태 배경색 유지

분류에서Dev

목록 상자에 많은 항목을 추가하면 UI가 고정됩니다.

분류에서Dev

목록보기에서 선택했을 때 목록 항목의 색상을 변경하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

  2. 2

    항목이 목록 상자에 나열됩니다. foreach를 사용하여 SQL에서 항목을 삭제하고 싶습니다.

  3. 3

    immutable.js가있는 React, Redux : 목록에서 하나의 항목을 삭제할 때 올바른 상태 데이터를 가져올 수 없습니다.

  4. 4

    REST API에서 목록 데이터를 가져온 후 항목 배열에서 목록 항목을 삭제하려고합니다.

  5. 5

    이온 목록을 누르면 항목의 색상이 변경됩니다.

  6. 6

    `select`에서`option`의 상위 항목을 변경하면 이벤트가 제거됩니다.

  7. 7

    목록 상자 C #에서 항목을 삭제하는 방법

  8. 8

    onAppear에서 상태를 변경하면 PageViewController가 중단됩니다.

  9. 9

    탐색 창 항목 색상 필터를 변경하면 동일한 이미지 ID를 사용하는 imageView도 변경됩니다.

  10. 10

    fancybox 제목을 분할하고 처음 몇 글자를 가져 와서 색상을 변경합니다.

  11. 11

    AngularJS에서 항목을 삭제 한 후 상태를 다시로드하는 방법은 무엇입니까?

  12. 12

    StatefulWidget의 상태로 항목 배열 및 "setState"가 변경된 배열의 항목에 대한 업데이트 만 트리거하도록 보장합니까?

  13. 13

    SetState가 상태 값을 변경하지 않습니다.

  14. 14

    React에서 한 상태를 변경하는 동안 두 상태가 모두 변경됩니다.

  15. 15

    삭제 키를 사용하여 목록 상자에서 선택한 항목을 삭제하는 방법이 있습니까?

  16. 16

    코드 숨김에서 목록 상자 선택되지 않은 항목 색상을 변경하는 방법

  17. 17

    this.setState ()가 상태를 잘못된 값으로 변경하고 있습니다.

  18. 18

    RecyclerView를 만들었고 화면 방향이 변경되면 중복 항목이 상단에 추가됩니다.

  19. 19

    목록 상자 VBA에서 다중 열 데이터의 여러 항목을 검색하고 표시합니다.

  20. 20

    선택한 항목 (개체)에서 목록 상자 항목 색상을 변경하는 방법은 무엇입니까?

  21. 21

    두 개의 버튼 / 링크, 하나는 클릭 한 다음 다른 하나를 클릭 할 때까지 색상을 변경합니다. 다른 하나를 클릭하면 해당 항목에 대해 동일한 작업을 수행합니다.

  22. 22

    SwiftUI에서 탭 항목 색상을 변경하는 방법

  23. 23

    상위 항목을 게시하지 않고 solr 색인에서 사이트 코어 항목 삭제

  24. 24

    상위 항목을 게시하지 않고 solr 색인에서 사이트 코어 항목 삭제

  25. 25

    배열 redux 상태에서 항목을 삭제 하시겠습니까?

  26. 26

    필터를 사용하여 항목을 삭제하려고하면 item.map이 함수가 아닙니다.

  27. 27

    하위 메뉴 항목을 가리키면서 가리 키기 상태 배경색 유지

  28. 28

    목록 상자에 많은 항목을 추가하면 UI가 고정됩니다.

  29. 29

    목록보기에서 선택했을 때 목록 항목의 색상을 변경하는 방법은 무엇입니까?

뜨겁다태그

보관