import '../../Data/expansionbutton.dart';
import 'package:flutter/material.dart';
import '../../Data/Globalvariable.dart' as global;
import 'menu.dart';
class Textbtn extends StatefulWidget {
final Widget menu = Text('Add Pin');
@override
_TextbtnState createState() => _TextbtnState(menu: menu);
}
class _TextbtnState extends State<Textbtn> {
Widget menu;
bool expn = false;
_TextbtnState({this.menu});
String pin;
void addfun() {
setState(() {
global.pincode.add(pin);
menu = MenuBar();
expn = false;
});
}
@override
Widget build(BuildContext context) {
return ExpnButton(
expanded: expn,
wiget: SizedBox(
height: MediaQuery.of(context).size.height - 400,
width: MediaQuery.of(context).size.width - 10,
child: Padding(
child: menu,
padding: EdgeInsets.all(19),
),
),
upperwig: SizedBox(
height: 80,
child: TextField(
onChanged: (value) {
pin = value;
},
maxLength: 6,
keyboardType: TextInputType.number,
decoration: InputDecoration(
icon: Icon(Icons.pin_drop),
suffix: TextButton(
style: TextButton.styleFrom(
primary: Colors.blue,
),
onPressed: () {
addfun();
},
child: Text('Add'),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
),
hintText: " Enter pin code",
labelText: "Pin Code"),
),
),
);
}
}
我试图从用户那里获取pin,并将选择的pin显示给用户,同时我创建了一个全局列表,但是当我通过setstate更改列表时,这些更改似乎根本不起作用
Globalvariable.dart
library project.globals;
List<String> pincode = ['Select Pin',];
以下是menubar()的文件
menu.dart
import 'package:flutter/material.dart';
import '../../Data/Globalvariable.dart' as global;
import 'package:flutter/foundation.dart';
class MenuBar extends StatefulWidget {
@override
MenuBarState createState() {
return MenuBarState();
}
}
class MenuBarState extends State<MenuBar> {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: global.pincode.length,
itemBuilder: (context, index) {
final item = global.pincode[index];
return Dismissible(
key: Key(item),
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),
),
);
},
);
}
}
我想要的只是从用户获取输入并在展开时显示它,但是我的代码能够接受输入并更改global.pincode,正如我在调试控制台中看到的那样,但是这些更改似乎不会更改按钮的状态,或者更确切地说,更改不会更改按钮的列表视图
发布于 2021-08-16 12:28:49
列表中的User Valuelistenablebuilder &在Valuelistenablebuilder中将数组/列表作为值传递。如果发生任何更改,它将更新列表。
发布于 2021-08-18 12:35:12
嗯,我想出了我使用的changenotifier的答案,创建了一个扩展changenotifier的类,并将所有更改的变量放在该类中,然后添加所有更改使用者和小部件中的数据的语句,我需要在provider中重新构建这些数据,它可以完美地工作
https://stackoverflow.com/questions/68808706
复制相似问题