为什么在flutter中调用Setstate()函数后值没有改变

j9per5c4  于 2023-01-31  发布在  Flutter
关注(0)|答案(2)|浏览(342)
import 'package:flutter/material.dart';
import 'package:get/get.dart';
//import 'package:get/get_core/src/get_main.dart';
import 'package:intl/intl.dart';
import 'package:menstrual_period_tracker/input2.dart';
import 'package:nepali_date_picker/nepali_date_picker.dart';
class Picker extends StatefulWidget {
const Picker({super.key});
@override
State<Picker> createState() => _PickerState();
}
class _PickerState extends State<Picker> {
NepaliDateTime _dateTime = NepaliDateTime.now();
void _showdatepicker() async {
await showDatePicker(
  context: context,
  initialDate: NepaliDateTime.now(),
  firstDate: NepaliDateTime(2002),
  lastDate: NepaliDateTime.now(),
).then((value) {
  setState(() {
    NepaliDateTime? updatevalue = NepaliDateTime.tryParse(value.toString()),
        _dateTime = updatevalue;
  });
});

} //在我的代码中,我使用了尼泊尔日历,所以我用NepaliDateTime替换了DateTime,then方法使用的值是DateTime,所以我必须将其类型转换为NepaliDateTime,我将该变量赋值给_datetime,但是值没有更改//警告消息是localvaraible的值没有使用

ocebsuys

ocebsuys1#

可能是因为toString()后面有逗号而出错。请尝试将其更改为分号。

setState(() {
    NepaliDateTime? updatevalue = NepaliDateTime.tryParse(value.toString()); // change to semicolon
    _dateTime = updatevalue;
  });

最好将非状态转换器代码从setState中移出:

NepaliDateTime? updatevalue = NepaliDateTime.tryParse(value.toString()); // change to semicolon
setState(() {
  _dateTime = updatevalue;
});
y53ybaqx

y53ybaqx2#

这是因为不建议使用setState方法进行计算。
docs
通常,建议setState方法仅用于 Package 对状态的实际更改,而不是可能与更改关联的任何计算。
在代码示例中,可以将分析移出方法。

NepaliDateTime? updatevalue = NepaliDateTime.tryParse(value.toString()),
  setState(() {
    _dateTime = updatevalue;
  });

相关问题