如何更新Dart类变量并刷新抖动状态?

时间:2019-05-27 23:22:38

标签: android flutter dart

我有一个主飞镖文件和一个设置飞镖文件。设置飞镖文件负责主飞镖文件的外观。设置dart具有AppTheme类。当用户在此设置页面上键入时,我希望主页进行更新。

我对此的尝试是调用类并根据用户输入重新定义变量。无论我是否使用setState()都不起作用。我还尝试过jus停留在主页上,并尝试更改主题onPressed的设置按钮。那也不起作用。 Iconbutton更新也不会更新状态。

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:resume/settings.dart';


void main() {
  runApp(MyApp());
}


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Title',
      theme: ThemeData.light(),
      home: HomePage(),
    );
  }
}


class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}


class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {

    double buttonMargin = MediaQuery.of(context).size.width / 10;
    double screenWidth = MediaQuery.of(context).size.width;
    double screenHeight = MediaQuery.of(context).size.height;

    return MaterialApp(
      home: Scaffold(
        backgroundColor: AppTheme().backgroundMain,
        body: SafeArea(
          child: Padding(
            padding: const EdgeInsets.fromLTRB(0, 20, 0, 0),
            child: Column(
              children: <Widget>[
                Container(
                  height: (MediaQuery.of(context).size.height / 2.25),
                  child: Column(children: <Widget>[
                    Container(
                      margin: EdgeInsets.all(10),
                      child: Text(AppTheme().name,
                          style: TextStyle(
                              fontFamily: 'Pacifico',
                              fontSize: screenWidth / 8.57142857143,
                              color: AppTheme().nameTextColor,
                              fontWeight: FontWeight.bold)),
                    ),
                  ]),
                ),
                Container(
                  height: screenHeight / 2.3,
                  alignment: Alignment.bottomCenter,
                  child: ListView(
                    scrollDirection: Axis.horizontal,
                    children: <Widget>[
                      Container(
                          margin: EdgeInsets.fromLTRB(
                              buttonMargin * 1.5,
                              buttonMargin * 3,
                              buttonMargin * 1.5,
                              buttonMargin * 3),
                          height: MediaQuery.of(context).size.height / 2,
                          width: MediaQuery.of(context).size.width / 2,
                          child: RaisedButton(
                            color: AppTheme().backgroundSecondary,
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                Icon(
                                  Icons.settings,
                                  color: Colors.white,
                                ),
                                Padding(
                                  padding: const EdgeInsets.all(8.0),
                                  child: Text(
                                    'Settings',
                                    style: TextStyle(color: Colors.white),
                                  ),
                                )
                              ],
                            ),
                            onPressed: () {
                              setState(() {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(builder: (context) {
                                    return MySettings();
                                  }),
                                );
                              },
                              );
                              },
                          ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}




settings.dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

void settings() {
  runApp(MySettings());
}

class AppTheme {
  var backgroundMain = Colors.red;
  var backgroundSecondary = Colors.teal;
  var backgroundAvatar = Colors.white;
  var nameTextColor = Colors.white;
  var professionTextColor = Colors.red[100];
  var contactTextColor = Colors.teal;
  var testPrint = print("hi");

  String name = 'John Doe';

  String nameFont = 'Pacifico';
  String professionFont = 'roboto';
}

class MySettings extends StatefulWidget {
  @override
  MySettingsState createState() => MySettingsState();
}

class MySettingsState extends State<MySettings> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: AppTheme().backgroundMain,
          title: Text('Settings'),
          leading: IconButton(
            icon: Icon(Icons.arrow_back),
            onPressed: () {
              setState(() {
                AppTheme().backgroundMain = Colors.yellow;
                print(AppTheme().name);
                Navigator.pop(context);
              });
            },
          ),
        ),
        backgroundColor: Colors.teal,
        body: SafeArea(
            child: ListView(
          children: <Widget>[
            Container(
              child: TextField(
                onChanged: (text) {
                  setState(() {
                    AppTheme().name = text;
                  });
                },
              ),
            ),
            Container(
              child: TextField(),
            ),
          ],
        )),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

1确保正确导入

Flutter/Dart Static variables lost / keep getting reinitialized

2您不能更改类中的变量。您必须创建一个对象并更改该对象。

即我在做

Class MyClass {
var myVariable = someValue
}

MyClass.myVariale = aDifferentValue

这没有更新MyClass 创建对象后需要做的工作

var myClassObject = new Myclass();
myClassObject.myVariable = aDifferentValue

现在,我只是修改并调用myClassObject。