![](/img/trans.png)
[英]My login screen doesn't redirect me to the new screen after I successfully login! Flutter
[英]Flutter redirect to a new screen when a condition is true
我有一個 flutter 應用程序
主要.dart
import 'package:flutter/material.dart';
import 'network.dart';
void main() => runApp(HomePage());
class HomePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState();
}
}
class _MyAppState extends State<HomePage> {
String _message = '';
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
_register() {
_firebaseMessaging.getToken().then((token) => print(token));
}
@override
void initState() {
super.initState();
getMessage();
TestNetwork.checkNetwork().then((val){
print(val);
});
}
void getMessage(){
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print('on message $message');
setState(() => _message = message["notification"]["title"]);
}, onResume: (Map<String, dynamic> message) async {
print('on resume $message');
setState(() => _message = message["notification"]["title"]);
}, onLaunch: (Map<String, dynamic> message) async {
print('on launch $message');
setState(() => _message = message["notification"]["title"]);
});
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return new MaterialApp(
home: new Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("Message: $_message"),
OutlineButton(
child: Text("Register My Devices"),
onPressed: () {
_register();
},
)
]),
),
);
}
}
我正在從另一個 dart 文件調用 a.network 檢查功能,所以
網絡.dart
import 'package:http/http.dart' as http;
import 'dart:async';
class TestNetwork {
static String mainWebServiceURL="http://mydmain.com/webservicepath/";
static Future<bool> checkNetwork() async {
try{
Map<String,String> _user = {};
_user['name'] = "Username";
final response= await http.post(mainWebServiceURL+'/index.php',
body: _user,
);
if(response.statusCode==200)
return Future.value(true);
else
// I want to redierct to another page in main.dart page
}
catch (_) {
// I want to redierct to another page in main.dart page
}
}
}
所以我的問題是,如果checkNetwork()
function 失敗或響應為“否定”,那么我想在 main.dart 或其他頁面中重定向/顯示另一個頁面。
(注意:將以下代碼包裝在零時間延遲的未來中只是為了確保在我們使用它時上下文准備就緒)
@override
void initState() {
super.initState();
getMessage();
Future.delayed(Duration.zero,(){
TestNetwork.checkNetwork().then((val){
Navigator.of(context).push(MaterialPageRoute(builder: (ctx)=>MySuccessRoute()));
},onError: (){
Navigator.of(context).push(MaterialPageRoute(builder: (ctx)=>MyFailureRoute()));
});
});
}
我對此有個想法,您可以執行以下操作之一:
checkNetwork
function 返回true
或false
,然后使用這個 boolean 值來確定在MaterialApp
小部件的home
字段中使用哪個小部件。SplashScreen
,它始終是MaterialApp
的home
字段中使用的小部件,在這個小部件中,您檢查網絡並根據checkNetwork
結果執行正確的Navigator.push()
。我個人更喜歡方法 2,因為它可以給你更多的控制權。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.