如何在 FutureBuilder 完成获取项目之前加载其他静态元素
How to load other static elements before FutureBuilder finishes fetching items
我想在加载 FutureBuilder
之前加载像 bottom navigation bar
这样的静态元素。所以它应该看起来像这样。当我们进入新画面时,
CircularProgressIndicator
显示在中间,其他元素(如底部导航)已显示。
你能告诉我怎样才能做到这一点吗?
这是我的代码:
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:package/constants/AppConstants.dart';
import 'package:package/util/HttpActions.dart';
import 'BottomAppBar.dart';
import 'FAB.dart';
class HomePage extends StatefulWidget {
final String jwt;
const HomePage(this.jwt);
@override
_HomePage createState() => _HomePage();
factory HomePage.fromBase64(String jwt) => HomePage(jwt);
}
class _HomePage extends State<HomePage> {
late final String jwt;
@override
void initState() {
super.initState();
jwt = widget.jwt;
}
final uri = Uri.http(
AppConstants.BASE_URL,
AppConstants.SOME_URL,
{'email': 'some.mail@gmail.com'}); // TODO change to proper link
@override
Widget build(BuildContext context) => Scaffold(
body: Center(
child: FutureBuilder(
future: http.get(
uri,
headers: {
HttpHeaders.contentTypeHeader:
HttpActions.APPLICATION_JSON_HEADER,
HttpHeaders.authorizationHeader: jwt
},
),
builder: (context, snapshot) => snapshot.hasData
? Scaffold(
backgroundColor: const Color(0xFEF9F9FC),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,
floatingActionButton: buildFAB(),
bottomNavigationBar: BuildBottomAppBar(),
)
: snapshot.hasError
? Text("An error occurred")
: CircularProgressIndicator()),
),
);
}
现在,如果您看到导航底部栏在 snaphost 有数据时加载。
有什么办法可以制作类似专栏的东西,所以我将拥有静态项目、静态项目、未来构建器、静态项目(即 nav bottom bar
)
我想实现这样的效果:
desired effect
第一个小部件将是脚手架,底部导航栏和主体内部添加 Future Builder
像这样:
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:package/constants/AppConstants.dart';
import 'package:package/util/HttpActions.dart';
import 'BottomAppBar.dart';
import 'FAB.dart';
class HomePage extends StatefulWidget {
final String jwt;
const HomePage(this.jwt);
@override
_HomePage createState() => _HomePage();
factory HomePage.fromBase64(String jwt) => HomePage(jwt);
}
class _HomePage extends State<HomePage> {
late final String jwt;
@override
void initState() {
super.initState();
jwt = widget.jwt;
}
final uri = Uri.http(
AppConstants.BASE_URL,
AppConstants.SOME_URL,
{'email': 'some.mail@gmail.com'}); // TODO change to proper link
@override
Widget build(BuildContext context)
return Scaffold(
backgroundColor: const Color(0xFEF9F9FC),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,
floatingActionButton: buildFAB(),
bottomNavigationBar: BuildBottomAppBar(),
body: Center(
child: FutureBuilder(
future: http.get(
uri,
headers: {
HttpHeaders.contentTypeHeader:
HttpActions.APPLICATION_JSON_HEADER,
HttpHeaders.authorizationHeader: jwt
},
),
builder: (context, snapshot) => snapshot.hasData
? widgetWithYourData
: snapshot.hasError
? Text("An error occurred")
: CircularProgressIndicator()),
),
)
}
我想在加载 FutureBuilder
之前加载像 bottom navigation bar
这样的静态元素。所以它应该看起来像这样。当我们进入新画面时,
CircularProgressIndicator
显示在中间,其他元素(如底部导航)已显示。
你能告诉我怎样才能做到这一点吗?
这是我的代码:
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:package/constants/AppConstants.dart';
import 'package:package/util/HttpActions.dart';
import 'BottomAppBar.dart';
import 'FAB.dart';
class HomePage extends StatefulWidget {
final String jwt;
const HomePage(this.jwt);
@override
_HomePage createState() => _HomePage();
factory HomePage.fromBase64(String jwt) => HomePage(jwt);
}
class _HomePage extends State<HomePage> {
late final String jwt;
@override
void initState() {
super.initState();
jwt = widget.jwt;
}
final uri = Uri.http(
AppConstants.BASE_URL,
AppConstants.SOME_URL,
{'email': 'some.mail@gmail.com'}); // TODO change to proper link
@override
Widget build(BuildContext context) => Scaffold(
body: Center(
child: FutureBuilder(
future: http.get(
uri,
headers: {
HttpHeaders.contentTypeHeader:
HttpActions.APPLICATION_JSON_HEADER,
HttpHeaders.authorizationHeader: jwt
},
),
builder: (context, snapshot) => snapshot.hasData
? Scaffold(
backgroundColor: const Color(0xFEF9F9FC),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,
floatingActionButton: buildFAB(),
bottomNavigationBar: BuildBottomAppBar(),
)
: snapshot.hasError
? Text("An error occurred")
: CircularProgressIndicator()),
),
);
}
现在,如果您看到导航底部栏在 snaphost 有数据时加载。
有什么办法可以制作类似专栏的东西,所以我将拥有静态项目、静态项目、未来构建器、静态项目(即 nav bottom bar
)
我想实现这样的效果: desired effect
第一个小部件将是脚手架,底部导航栏和主体内部添加 Future Builder
像这样:
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:package/constants/AppConstants.dart';
import 'package:package/util/HttpActions.dart';
import 'BottomAppBar.dart';
import 'FAB.dart';
class HomePage extends StatefulWidget {
final String jwt;
const HomePage(this.jwt);
@override
_HomePage createState() => _HomePage();
factory HomePage.fromBase64(String jwt) => HomePage(jwt);
}
class _HomePage extends State<HomePage> {
late final String jwt;
@override
void initState() {
super.initState();
jwt = widget.jwt;
}
final uri = Uri.http(
AppConstants.BASE_URL,
AppConstants.SOME_URL,
{'email': 'some.mail@gmail.com'}); // TODO change to proper link
@override
Widget build(BuildContext context)
return Scaffold(
backgroundColor: const Color(0xFEF9F9FC),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,
floatingActionButton: buildFAB(),
bottomNavigationBar: BuildBottomAppBar(),
body: Center(
child: FutureBuilder(
future: http.get(
uri,
headers: {
HttpHeaders.contentTypeHeader:
HttpActions.APPLICATION_JSON_HEADER,
HttpHeaders.authorizationHeader: jwt
},
),
builder: (context, snapshot) => snapshot.hasData
? widgetWithYourData
: snapshot.hasError
? Text("An error occurred")
: CircularProgressIndicator()),
),
)
}