Flutter 颤振:从main()方法更改小部件的状态

Flutter 颤振:从main()方法更改小部件的状态,flutter,Flutter,我正在尝试从存储器读取数据,读取完成后,我需要更新类的状态\u MyAppState。 访问配置单元是在main方法中完成的,因为初始化的配置单元框也可以在其他类中访问 下面给出了我编写的代码。我需要的是在读取完成后,从main()方法更新\u MyAppState类的变量\u load void main() async { var _dataReadFromHive = {}; runApp(MyApp()); final appDocDir = await path_pr

我正在尝试从存储器读取数据,读取完成后,我需要更新类的状态
\u MyAppState
。 访问配置单元是在main方法中完成的,因为初始化的配置单元框也可以在其他类中访问

下面给出了我编写的代码。我需要的是在读取完成后,从main()方法更新
\u MyAppState
类的变量
\u load

void main() async {
  var _dataReadFromHive = {};

  runApp(MyApp());


  final appDocDir = await path_provider.getApplicationDocumentsDirectory();
  await Hive.init(appDocDir.path);

  //read data from hive
  Hive.openBox('data').then((status){
   var box = Hive.box('data');
   //read data
   //after reading, update the state of MyAppState class

  });
}

...

class _MyAppState extends State<MyApp>{
    var _loading = true;

    Widget build(BuildContext context){
        return Material(
            child:Center(
                child : _loading ? CircularProgressIndicator() : Text("Loaded"),
            ),
        );
    }
}
void main()异步{
var_dataReadFromHive={};
runApp(MyApp());
final appDocDir=等待路径_provider.getApplicationDocumentsDirectory();
等待Hive.init(appDocDir.path);
//从配置单元读取数据
openBox('data')。然后((状态){
var-box=Hive.box(“数据”);
//读取数据
//读取后,更新MyAppState类的状态
});
}
...
类MyAppState扩展了状态{
var_加载=真;
小部件构建(构建上下文){
退货(
儿童:中心(
子项:_加载?CircularProgressIndicator():文本(“加载”),
),
);
}
}
请帮我做这个。我试过了,但我错过了一些东西(我是一个不安的人)


感谢您的帮助。

您不需要从主功能更新状态。 如代码所示,从initState调用函数,并从那里更新应用程序的状态

我希望这有帮助


void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  MyApp({Key key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  var _loading = false;

  @override
  void initState() {
    readDataFromHive();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Material(
      child: Center(
        child: _loading ? CircularProgressIndicator() : Text("Loaded"),
      ),
    );
  }

  void readDataFromHive() async{
    setState(() {
      _loading = true;
    });
    final appDocDir = await path_provider.getApplicationDocumentsDirectory();
    await Hive.init(appDocDir.path);

    //read data from hive
    Hive.openBox('data').then((status) {
      var box = Hive.box('data');
      //read data
      //after reading, update the state of MyAppState class
      setState(() {
        _loading = false;
      });
    });
  }
}

void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
MyApp({Key}):超级(Key:Key);
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
var_加载=错误;
@凌驾
void initState(){
readDataFromHive();
super.initState();
}
@凌驾
小部件构建(构建上下文){
退货(
儿童:中心(
子项:_加载?CircularProgressIndicator():文本(“加载”),
),
);
}
void readDataFromHive()异步{
设置状态(){
_加载=真;
});
final appDocDir=等待路径_provider.getApplicationDocumentsDirectory();
等待Hive.init(appDocDir.path);
//从配置单元读取数据
openBox('data')。然后((状态){
var-box=Hive.box(“数据”);
//读取数据
//读取后,更新MyAppState类的状态
设置状态(){
_加载=假;
});
});
}
}