首页 > 解决方案 > Flutter:如何更改另一个 dart 文件中变量的状态?

问题描述

我目前正在开发一个应用程序;我想更改在另一个 dart 文件中声明的字符串的值,然后将更改后的状态传递给有状态小部件。

IE;

  1. 我创建了一个名为“Body.dart”的文件,其中我声明了一个名为“scale”的字符串,其值最初为“Empty”。

  2. 稍后当按下另一个 dart 文件“scale_button”中的按钮时,我想在我的 Body.dart 文件中分配字符串 scale =“Hello”。这样有状态的小部件也会在屏幕上显示相同的内容。

标签: flutterdart

解决方案


在这种情况下,您可以使用provider(或任何其他状态管理)包。在yaml文件中添加,provider: ^4.3.2+4

class HomeApp extends StatefulWidget {
  @override
  _HomeAppState createState() => _HomeAppState();
}

class _HomeAppState extends State<HomeApp> {
  StringProvider _stringProvider;

  @override
  void initState() {
    super.initState();
    _stringProvider = Provider.of<StringProvider>(context, listen: false);
  }

  void updateString() {
    _stringProvider.setString('hai');
  }

  @override
  Widget build(BuildContext context) {
    StringProvider _stringProvider = Provider.of<StringProvider>(context);
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              child: Text(
                _stringProvider.str,
                style: TextStyle(
                  fontSize: 22,
                ),
              ),
            ),
            RaisedButton(
              onPressed: updateString,
              child: Text('Click'),
            ),
          ],
        ),
      ),
    );
  }
}
// class for storing data(StringProvider.dart)
import 'package:flutter/material.dart';

class StringProvider extends ChangeNotifier { // create a common file for data
  String _str = 'hello';

  String get str => _str;

  void setString(String st) {
    _str = st;
    notifyListeners();
  }
}

推荐阅读