如何在整个应用程序中设置按钮的更新文本值

How to set the updated text value of button throughout the app

我想在整个应用程序中设置按钮的更新文本值,当我单击按钮时,它的文本更改为当前时间,但是当我导航到其他屏幕时,然后返回到我创建的屏幕按钮,它没有显示更新后的文本。

这是我的按钮小部件

 String getTime;

//from here i get the current time 
void _getTime() {
    final String formattedDateTime =
        DateFormat('kk:mm:ss a').format(DateTime.now()).toString();
    setState(() {
      getTime = formattedDateTime;
      print("time");
      print(getTime);
    });
  }

 String timeInText = "Time in";

 Widget _timein() {
    //enable- initial case
    bool firstCaseFlag = true;
  

    if (getTimeInStatus == false && timeInButtonPressed == true) {
      print("i1");
      return FlatButton(
          color: timeInButtonPressed ? Colors.blue[500] : Colors.blue[200],
          textColor: Colors.white,
          padding: EdgeInsets.all(15.0),
          shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(buttonRoundRadius)),
          child: Row(children: <Widget>[
            Icon(
              Icons.timer,
            ),
            Expanded(
              child: Text(
                timeInText,
                textAlign: TextAlign.center,
                style: TextStyle(fontSize: textFontSize),
              ),
            ),
          ]),
          onPressed: () {
            _getTime();
            setState(() {
              if (firstCaseFlag == true) {
                
                timeInText = getTime; //here i set the button text to current time
                timeIn = timeInText;
               
                firstCaseFlag = false;
              } else {
                
              }
            });
            calltimeInApi();
          });

条件:

在某些情况下按钮会改变那里的状态,比如我有 2 个按钮,即 timein 和 timeout,最初 timein 按钮将启用点击而超时将被禁用,所以如果用户点击 timein 按钮,它的文本会改变当前时间和超时按钮将被启用(这一切都在发生),如果用户移动到其他屏幕并回到主屏幕(我在其中创建了超时和超时按钮),那么当用户点击它时,timein 按钮文本应该显示那个时间.

问题:

我的问题是,当我移动到其他屏幕并回到主屏幕时,timein 按钮已启用,但在我单击它时没有显示时间。

请帮助我如何修复它。

使用 Provider 之类的状态管理来保存值,然后在任何地方访问。

包裹link:https://pub.dev/packages/provider

有用的参考:https://flutter.dev/docs/development/data-and-backend/state-mgmt/intro

我更喜欢使用状态管理StateProvider。这是一个仅使用 global variable.

的示例
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:stack_overflow/exports.dart';

String buttonText = "Click to set";
///for riverpod
///final buttonState = StateProvider((ref) => "Click to set");

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

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

class _BaseWidgetState extends State<BaseWidget> {
  void _getTime() {
    final String formattedDateTime =
        DateFormat('kk:mm:ss a').format(DateTime.now()).toString();
    setState(() {
      buttonText = formattedDateTime;
      print("time");
      print(buttonText);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          ElevatedButton(
            onPressed: () {
              _getTime();
            },
            child: Text(buttonText),
          ),
          ElevatedButton(
            onPressed: () {
              Navigator.of(context).push(MaterialPageRoute(
                builder: (context) => NextWidget(),
              ));
            },
            child: Text("next"),
          ),
        ],
      ),
    );
  }
}

class NextWidget extends StatelessWidget {
  const NextWidget({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ElevatedButton(
        onPressed: () {
          Navigator.of(context).pop();
        },
        child: Text("Back"),
      ),
    );
  }
}