首页 > 解决方案 > valuenotifier 在更新列表时未更新小部件

问题描述

import 'package:flutter/material.dart';
import '../../Data/Globalvariable.dart' as global;

class MenuBar extends StatefulWidget {
  final key = UniqueKey();
  // final pin;
  // MenuBar({this.pin='112'});
  @override
  _MenuBarState createState() {
    return _MenuBarState();
  }
}

class _MenuBarState extends State<MenuBar> {
  ValueNotifier<List<String>> st = ValueNotifier(global.pincode);
  Widget total() {
    return ListView.builder(
      itemCount: global.pincode.length,
      itemBuilder: (context, index) {
        final item = global.pincode[index];
        return Dismissible(
          key: UniqueKey(),
          onDismissed: (direction) {
            setState(() {
              global.pincode.removeAt(index);
            });
            ScaffoldMessenger.of(context)
                .showSnackBar(SnackBar(content: Text('$item Removed')));
          },
          background: Container(color: Colors.red),
          child: ListTile(
            title: Text(item),
          ),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return ValueListenableBuilder(
      builder: (context, n, menu) {
        print(global.pincode);
        return total();
      },
      child: total(),
      valueListenable: st,
    );
  }
}

这是我的主文件我有一个全局文件,我所有的工作变量都在那里

Globalvariable.dart

library project.globals;
List<String> pincode = ['Select Pin','110084','110088'];

现在当我将数据添加到 pincode valuenotifier 应该听它并自动更新小部件但它没有这样做我验证了使用调试控制台它在我调用 setstate 时得到更新,这没问题,但我想在添加数据时更新小部件我的清单

在此处输入图像描述

这是为了证明我上面所说的 wigdet 在删除时更新,但不是在添加时更新

标签: flutterdart

解决方案


如果您使用ValueNotifier的是列表,则应st使用追加到该列表,除非您将该全局列表设为 a ,否则st.value.add()修改global.pincode列表不会反映ValueNotifier

因此,您将拥有st.value.add()或在您的全局文件ValueNotifier<List<String>> pincode = ValueNotifier(<String>[...]);中使用 avalueListenable: global.pincode和修改global.pincode.value.xyz


推荐阅读