将来结束时移至新屏幕的最佳方法



我有一个启动屏幕,该屏幕从API获取数据。我希望此屏幕处于活动状态(其中包含一个卷积进度小部件(在获取数据时,但是一旦获取了数据,我就必须推新路线才能进入下一个屏幕。

我一直在使用FutureBuilder玩耍,但这似乎不是正确的小部件,因为当数据获取数据时,我不想构建任何东西(至少在此屏幕上(。我只想将其保留为全球状态数据并继续前进。

在扑朔迷离中完成此操作的最佳方法是什么?

这就是我现在拥有的:

class SplashScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Guid Template test"),
        ),
        body: Container(
          child: Center(
              child: FutureBuilder(
                future: getMenuConfiguration(),
                builder: (builderContext, snapShot) {
                  //Here I would like to move to next screen, but this seems off because this is a builder method. Doesn't seem best option just a hack.
                  return Container();
                },
              )
          ),
        ));
  }
  Future<String> getMenuConfiguration() async
  {
    String url = "https://...";
    http.Response response = await http.get(url);
    if (response.statusCode == 200) {
      var m = json.decode(response.body);
      MenuModel.fromJson(m);
    }
    else {
      throw Exception('Failed to load post');
    }
  }
}

尝试此

首先让您的班级 Statefulwidget

@override
void initState() {
  onStart();
}
void onStart() async {
  await getMenuConfiguration();  //load your data here
  Navigator.push();  //push to next screen
}

的确,要保持简单,您只需使用一个状态的小部件[FutureBuilder]这是一个状态fulwidget]。

我有一个看起来像这样的加载屏幕

class LoadingScreen extends StatefulWidget {
  @override
  _LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
   @override
  void initState() {
    super.initState();
    Future.delayed(Duration.zero, () {
      checkCredentials(context);

  }
  checkCredentials(context) async {
  var test = await yourFunction();
  Navigator.of(context).pushReplacementNamed('/Page.Tabs');
  }
  @override
  Widget build(BuildContext context) {
    return SizedBox();
  }
}

我使用future.delayed(lisation.zero(,因为出于某种原因,如果checkcredentials是同步的; _;,oh,oh,并且Initstate可以访问上下文:d

相关内容

最新更新