Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振-将状态设置为另一个类_Android_Flutter_Dart - Fatal编程技术网

Android 颤振-将状态设置为另一个类

Android 颤振-将状态设置为另一个类,android,flutter,dart,Android,Flutter,Dart,我刚开始用flifter编程。我想创建一个应用程序来跟踪食物的过期日期。 我的应用程序由以下部分组成: 返回MaterialApp类的main.dart,该类的内部 包含AppBar的home.dart、包含ListBuilder()作为主体的Scaffold和应添加新项的FAB list_builder.dart,其中包含有状态小部件ListBuilder,它从items_list.dart获取字符串列表,并创建一个带有一些平铺的ListView items_list.dart,包含字符串列

我刚开始用flifter编程。我想创建一个应用程序来跟踪食物的过期日期。 我的应用程序由以下部分组成:

  • 返回MaterialApp类的main.dart,该类的内部
  • 包含AppBar的home.dart、包含ListBuilder()作为主体的Scaffold和应添加新项的FAB
  • list_builder.dart,其中包含有状态小部件ListBuilder,它从items_list.dart获取字符串列表,并创建一个带有一些平铺的ListView
  • items_list.dart,包含字符串列表,用于删除、添加和检索列表的函数
到目前为止,我所做的是一个带有拖尾垃圾箱图标按钮的项目列表,该按钮可以从列表中删除单个项目。一切正常。 现在我希望按下FAB键,它会触发ItemsList.addItem(),将一个项目添加到列表中。当然,这是可行的,但是屏幕上的列表(由list_builder.dart创建)不会更新,除非我删除一项

我尝试使用回调函数失败,我肯定我遗漏了一些东西

代码如下:

main.dart

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
本垒打。飞镖

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
列表\u builder.dart

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“项目列表.省道”;
类ListBuilder扩展了StatefulWidget{
常量ListBuilder({Key}):超级(Key:Key);
@凌驾
_ListBuilderState createState()=>\u ListBuilderState();
}
类_ListBuilderState扩展状态{
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
itemCount:ItemsList.getItems().length,
itemBuilder:(上下文,索引){
返回_buildRow(ItemsList.getItems()[index],index);
},
);
}
小部件构建行(字符串项,int索引){
返回列表块(
标题:正文(
项目,,
),
尾随:图标按钮(
图标:图标(Icons.delete),
已按下:(){
设置状态(){
ItemsList.removeItem(索引);
});
},
),
);
}
}
项目列表。省道

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
类项目列表{
静态列表_项=[
“巴南”,
“拿铁”,
“卡夫”,
“葡萄酒”,
"寿司",,
“比拉”,
];
//添加项目
静态void addItem(字符串名称)=>ItemsList.\u items.add(名称);
//删除项目
静态void removietem(inti)=>ItemsList.\u items.removeAt(i);
//返回项目列表
静态列表getItems(){
返回项目列表。\u项目;
}
}

我看到您在项目删除中使用了
setState
,添加项目时也应该使用它:

...
floatingActionButton: FloatingActionButton(
  onPressed: () {
    setState(() {
      ItemsList.addItem('ciao');
    });
    
    print('item added!!!');
  },
  child: const Icon(Icons.add),
),
...

当然,在此之前将
Home
小部件设置为
StatefulWidget

虽然这不是您所寻找的最佳解决方案,但是,这比将
Home
类更改为有状态小部件并重建整个小部件树要好。我修改了您的代码,使其完全按照您希望的方式工作,而无需调用
setState
函数

本垒打。飞镖

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
项目列表。省道

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
类项目列表{
最终清单=[
“巴南”,
“拿铁”,
“卡夫”,
“葡萄酒”,
"寿司",,
“比拉”,
];
StreamController\u项目=
StreamController.broadcast();
Stream get items=>\u items.Stream;
//添加项目
void addItem(字符串名称){
//_重新启动流();
_列表。添加(名称);
_items.sink.add(_列表);
//_items.close();
}
//删除项目
无效删除项(int i){
//_重新启动流();
_list.removeWhere((element)=>element==\u list[i]);
_items.sink.add(_列表);
}
无效关闭(){
_items.close();
}
静态最终项目列表_singleton=ItemsList._internal();
静态ItemsList get itemList=>ItemsList();
工厂项目列表(){
返回单件;
}
ItemsList._internal();
}
列表\u builder.dart

import 'package:flutter/material.dart';

import 'home.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quando Scade?',
      home: Home(),
      theme: ThemeData(
        primarySwatch: Colors.lightGreen,
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:quando_scade/items_list.dart';

import 'list_builder.dart';

class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
import 'package:flutter/material.dart';

import 'items_list.dart';

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

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: ItemsList.getItems().length,
      itemBuilder: (context, index) {
        return _buildRow(ItemsList.getItems()[index], index);
      },
    );
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.removeItem(index);
          });
        },
      ),
    );
  }
}
class ItemsList {
  static List<String> _items = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  // to add items
  static void addItem(String name) => ItemsList._items.add(name);

  // to remove item
  static void removeItem(int i) => ItemsList._items.removeAt(i);

  // returns the list of items
  static List<String> getItems() {
    return ItemsList._items;
  }
}
class Home extends StatelessWidget {
  const Home({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quando Scade?'),
        backgroundColor: Theme.of(context).colorScheme.primary,
      ),
      body: ListBuilder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ItemsList.itemList.addItem('ciao');
          print('item added!!!');
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
class ItemsList {
  final _list = [
    'banane',
    'latte',
    'caffè',
    'vino',
    'sushi',
    'birra',
  ];

  StreamController<List<String>> _items =
      StreamController<List<String>>.broadcast();

  Stream<List<String>> get items => _items.stream;

  // to add items
  void addItem(String name) {
    //_reOpenStream();
    _list.add(name);
    _items.sink.add(_list);
    // _items.close();
  }

  // to remove item
  void removeItem(int i) {
    //_reOpenStream();
    _list.removeWhere((element) => element == _list[i]);
    _items.sink.add(_list);
  }

  void close() {
    _items.close();
  }

  static final ItemsList _singleton = ItemsList._internal();

  static ItemsList get itemList => ItemsList();

  factory ItemsList() {
    return _singleton;
  }

  ItemsList._internal();
}
class ListBuilder extends StatefulWidget {
  const ListBuilder({Key key}) : super(key: key);

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

class _ListBuilderState extends State<ListBuilder> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<String>>(builder: (_, snapshot) {
      int itemCount = snapshot.data.length;
      return ListView.builder(
        itemCount: itemCount,
        itemBuilder: (context, index) {
          //Handle the empty list by replacing the container widget with your logic
          return itemCount <=0 ? Container(): _buildRow(snapshot.data[index], index);
        },
      );
    }, initialData: [],);
  }

  Widget _buildRow(String item, int index) {
    return ListTile(
      title: Text(
        item,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          setState(() {
            ItemsList.itemList.removeItem(index);
          });
        },
      ),
    );
  }
}
类ListBuilder扩展StatefulWidget{
常量ListBuilder({Key}):超级(Key:Key);
@凌驾
_ListBuilderState createState()=>\u ListBuilderState();
}
类_ListBuilderState扩展状态{
@凌驾
小部件构建(构建上下文){
返回StreamBuilder(生成器:(\ux,快照){
int itemCount=snapshot.data.length;
返回ListView.builder(
itemCount:itemCount,
itemBuilder:(上下文,索引){
//通过用逻辑替换容器小部件来处理空列表

return itemCount虽然这可能有效,但总是重建整个小部件树来更新列表并不是一个好主意。好吧,如果const构造函数将用于
ListBuilder
小部件,这不会是一个很大的问题。一般来说,同意,状态管理用于OP试图做的事情,我不是说这是一个好主意解决方法,但对于这种特定情况,
setState
将起作用。“\u list.removeWhere((element)=>element==\u list[i])”…您害怕“removeAt”吗?Lol…不,我不怕使用
removeAt
函数。我试图提供一种解决方案,不需要OP更改他的大部分代码。@OGx09好吧,因为这是一个只有几行代码的新项目,我很高兴听到您关于如何改进代码的任何建议。