列表内容更改时重建小部件

时间:2020-01-14 23:44:56

标签: flutter dart

我在列表中有对象,用户可以删除。如果列表为空,我想显示一些文本,但是我尝试使用ListView.builder()来执行此操作,并且该文本显示了很多次,并且只希望显示一次。列表中有我可以收听的某种属性吗?

1 个答案:

答案 0 :(得分:0)

import 'package:flutter/material.dart';


main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List items =new List();
  bool _isLoading =false;


  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    items = getDummyList();
    setState(() {
      _isLoading=false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return 
    MaterialApp(
      home: Scaffold(
        body: _isLoading
    ?Center(
      child: CircularProgressIndicator())
      :
    items.length==0?Center(child: Text('No items in the list'),):
    Container(
        child: ListView.builder(
      itemCount: items.length,
      itemBuilder: (context, index) {
        return Dismissible(
          key: Key(items[index]),
          onDismissed: (direction) {
            setState(() {
              items.removeAt(index);
            });
          },
          child: Container(
            height: 50.0,
            decoration: BoxDecoration(border: Border.all(width: 1.0)),
            padding: EdgeInsets.all(5.0),
            child: Row(
              children: <Widget>[
                Text(
                  items[index],
                  style: TextStyle(
                    color: Colors.black,
                    fontSize: 20.0,
                  ),
                )
              ],
            ),
          ),
        );
      },
    )),
      ),
    );

  }

   List getDummyList(){
    setState(() {
      _isLoading=true;
    });
   List list =  List.generate(5, (i) {
    return "Item ${i +1 }";
    });
    return list;

  }
}

请查看此示例,我为清单视图制作了一个轻扫关闭示例,如果您删除项目,它将显示文本。

让我知道它是否有效。

谢谢。