【发布时间】:2021-02-23 10:13:00
【问题描述】:
我是这样写我未来的建设者的
FutureBuilder(
future: Future.delayed(Duration(seconds: 3)),
builder: (c, s) =>
s.connectionState != ConnectionState.done
? Center(child: CircularProgressIndicator())
: nextPage()
虽然工作正常,但它显示了几秒钟的错误,说“类型'Future'不是'Widget'类型的子类型被抛出我的futureBuilder。” 接下来我把它改成
FutureBuilder(
future: Future.delayed(Duration(seconds: 3)).then((response) {
nextPage();
}),
builder: (context, snapshot) {
if (snapshot.hasData) {
return null;
} else if (snapshot.hasError)
return Text(snapshot.error.toString());
return CircularProgressIndicator();
},
);
但这里的问题是我的 nextpage() 只是闪烁并消失了。
有什么帮助吗?
编辑: 这是我的完整代码,我的要求是前 3 秒的循环进度指示器,然后是 nextpage()。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Title',
home: MyApp(),
);
}
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
nextPage() async{
bool visitedFlag = await getVIsitingFlag();
setVIsitingFlag();
if (visitedFlag == true) {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => HomeScreen()));
}
else {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => NewScreen()));
}
}
@override
void initState() {
Future.delayed(Duration(seconds: 3)).then((response) {
nextPage();
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFF311a2e),
body: SafeArea(
child:
CircularProgressIndicator();
),
);
}
}
getVIsitingFlag() async{
SharedPreferences preferences = await SharedPreferences.getInstance();
bool alreadyVisited = preferences.getBool('alreadyVisited') ?? false ;
return alreadyVisited;
}
setVIsitingFlag()async{
SharedPreferences preferences = await SharedPreferences.getInstance();
preferences.setBool('alreadyVisited', true);
}
【问题讨论】:
标签: flutter dart flutter-layout flutter-dependencies