在顯示應用程式的初始螢屏時,它需要從 FTP 服務器下載檔案并處理資料。為顫振實作了啟影片面
class Home extends StatelessWidget {
const Home({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Future.delayed(Duration(seconds: 3)),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.connectionState == ConnectionState.waiting)
return SplashUI(); ///Splash Screen
else
return MainUI(); ///Main Screen
},
);
}
}
現在,延遲 3 秒,啟動螢屏顯示 3 秒,在此期間從 FTP 下載檔案并處理資料。我想保持啟影片面直到資料處理完成而不是指定時間。
啟影片面
Widget _splashUI(Size size){
return SafeArea(
child: Center(
child: Container(
width: size.width * 0.5,
height: size.height * 0.1,
child: Image(
fit: BoxFit.fill,
image: AssetImage('assets/images/elf_logo.png'),
),
),
),
);
}
Widget build(BuildContext context) {
getFtpFile();
dataProgress();
return Platform.isAndroid ?
MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: _splashUI(_size),
),
) :
CupertinoApp(
debugShowCheckedModeBanner: false,
home: CupertinoPageScaffold(
child: _splashUI(_size),
),
);
}
我想知道如何在處理資料時保留 SplashScreen,而不是延遲處理 SplashScreen。謝謝。
uj5u.com熱心網友回復:
processing datarather than在處理 SplashScreen時保留SplashScreenwith delayed。
為什么不改變延遲?
class Home extends StatelessWidget {
const Home({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _processingData(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.connectionState == ConnectionState.waiting)
return SplashUI(); ///Splash Screen
else
return MainUI(); ///Main Screen
},
);
}
Future<List> _processingData() {
return Future.wait[
_getFtpFile(),
_dataProgress(),
];
}
}
uj5u.com熱心網友回復:
你可以像其他人過去那樣做;你應該讓你的方法getFTPFile和dataProgress回傳一個Future ,然后你使用Future.wait等待這兩個 Futures ,如這個答案 https://stackoverflow.com/a/54465973/871364
Future.wait([
getFTPFile(),
dataProgress(),
], () {
// once all Futures have completed, navigate to another page here
});
uj5u.com熱心網友回復:
軟體包flutter_native_splash完全符合您的要求。FlutterNativeSplash.preserve()在您之前撥打電話以runApp()保持螢屏上的啟影片面,然后FlutterNativeSplash.remove();在您的下載完成時:
import 'package:flutter_native_splash/flutter_native_splash.dart';
void main() {
WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
runApp(const MyApp());
}
// when your download is completed, remove the splash screen:
FlutterNativeSplash.remove();
完全披露:我維護這個包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/431657.html
