首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在“颤振”中单击按钮访问动态输入字段值

如何在“颤振”中单击按钮访问动态输入字段值
EN

Stack Overflow用户
提问于 2022-09-24 06:55:22
回答 2查看 82关注 0票数 -1

我正在做一份考勤申请,在那里我给工人分配工资。我想把给工人的所有工资都存入数据库。但问题是,我想访问所有给定的值,在按钮点击。我不知道如何在颤栗中做到这一点。我是个初学者。

我已经给出了所有的代码和图像,我想要的输出。

仿真器图像

这是我的密码。

考勤屏幕

代码语言:javascript
复制
...rest code...
 floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDialog(
            context: context,
            barrierDismissible: false, // user must tap button!
            builder: (BuildContext context) {
              return AlertDialog(
                title: const Text('Upload Patti'),
                content: SingleChildScrollView(
                  child: ListBody(
                    children: [
                      TextFormField(
                        controller: _mainWagesController,
                        decoration: const InputDecoration(
                          border: OutlineInputBorder(),
                          hintText: "Enter Amount",
                          prefixIcon: Icon(Icons.wallet, color: Colors.blue),
                        ),
                      ),
                    ],
                  ),
                ),
                actions: <Widget>[
                  ElevatedButton(
                    onPressed: () {
                      Navigator.pop(context);
                      newWages = _mainWagesController.text;
                      setState(() {});
                    },
                    child: const Text("Assign Wages"),
                  ),
                ],
              );
            },
          );
        },
        child: const Icon(Icons.check_circle),
      ),
body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.all(8.00),
          child: Column(children: [
            const SizedBox(
              height: 20,
            ),
            Center(
              child: Text(
                "Date :  ${DateFormat.yMMMEd().format(DateTime.parse(widget.attendanceDate.toString()))}",
                style: const TextStyle(fontSize: 20),
              ),
            ),
            const SizedBox(
              height: 20,
            ),
            FutureBuilder(
              future: SupervisorAttendanceServices.getAttendancesDetailsList(
                  widget.attendanceId),
              builder: (BuildContext context, AsyncSnapshot snapshot) {
                if (snapshot.hasData) {
                  var data = snapshot.data['hamal'];
                  return ListView.builder(
                      itemCount: data.length,
                      physics: const NeverScrollableScrollPhysics(),
                      shrinkWrap: true,
                      itemBuilder: (BuildContext context, int index) {
                        return HamalAttendanceWidget(
                            workerId: data[index]['worker_id'],
                            name: data[index]['worker_name'],
                            wages: newWages,
                            masterAttendanceId: widget.attendanceId,
                            isPrensent: data[index]
                                    ['attendance_worker_presense']
                                .toString());
                      });
                } else if (snapshot.hasError) {
                  return const Center(
                    child: Text("Something went wrong !"),
                  );
                } else {
                  return const Center(child: LinearProgressIndicator());
                }
              },
            ),
          ]),
        ),
      ),
...rest code

小部件

代码语言:javascript
复制
 Widget build(BuildContext context) {
    return Card(
      child: Column(children: [
        Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            const SizedBox(
              width: 10,
              height: 50,
            ),
            const Icon(FeatherIcons.user),
            const SizedBox(
              width: 20,
            ),
            Text(
              widget.name,
              style: const TextStyle(fontSize: 18),
            ),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            SizedBox(
                width: 150,
                height: 60,
                child: TextFormField(
                  // onChanged: _onChangeHandler,
                  initialValue: widget.wages.toString(),
                  decoration: const InputDecoration(
                      hintText: "Wages",
                      prefixIcon: Icon(
                        Icons.wallet,
                        color: Colors.blue,
                      )),
                )),
          ],
        )
      ]),
    );
  }
EN

回答 2

Stack Overflow用户

发布于 2022-09-24 08:44:25

我建议您在应用程序中使用StateManager,例如,GetX是一个很好的解决方案。创建如下所示的控制器文件:

代码语言:javascript
复制
// define this enum outside of class to handle the state of the page for load data 

enum AppState { initial, loading, loaded, error, empty, disabled }
Rx<AppState> pageState = AppState.initial.obs;

class AttendanceCntroller extends GetxController{
RxList<dynamic> dataList=RxList<dynamic>();
   @override
     void onInit() {
     //you can write other codes in here to handle data
     pageState(AppState.loading);

     dataList.value=
     SupervisorAttendanceServices.getAttendancesDetailsList(attendanceId);

     pageState(AppState.loaded);

     super.onInit();
   }
}

在视图(UI)页面中,以这样的方式处理它:

代码语言:javascript
复制
class AttendanceView extends GetView<AttendanceCntroller>{
  @override
   Widget body(BuildContext context) {
   // TODO: implement body
   return Obx( ()=> controller.pageState.value==AppState.loading ? const
   Center(child: LinearProgressIndicator()) :  ListView.builder(
    itemCount: controller.dataList.length,
    physics: const NeverScrollableScrollPhysics(),
    shrinkWrap: true,
    itemBuilder: (BuildContext context, int index) {
      return HamalAttendanceWidget(
          workerId: controller.dataList['worker_id'],
          name: controller.dataList['worker_name'],
          wages: newWages,
          masterAttendanceId: widget.attendanceId,
          isPrensent: controller.dataList[index]
          ['attendance_worker_presense']
              .toString());
    })
)

}}

要获得更多数据,请阅读GetX链接,并使用我的GitHub的GetX示例存储库读取干净的体系结构,它具有带有依赖注入处理的GetX高级状态管理。

票数 0
EN

Stack Overflow用户

发布于 2022-11-05 15:23:07

如果希望在TextFormField中具有预填充的值,可以使用initialValuecontroller参数。

controller参数的值将帮助您获得/更新TextFormField的值。

有关控制器参数,请参阅下面。

代码语言:javascript
复制
TextEditingController controller = TextEditingController(text: 'This is text will be pre-filled in TextFormField');
...
TextFormField(
  controller: controller,
);

创建这些控制器的列表或映射。

代码语言:javascript
复制
List<TextEditingController> listOfControllers = [ controller1, controlle2,...];

在Button的onClick()方法上循环这个列表。

代码语言:javascript
复制
ElevatedButton(
  onPressed: () {
    for(var controllerItem in listOfControllers) {
      print(controllerItem.text); // the value of TextFormField
    }
  },
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73835286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档