flutter - 等式比较中的Flutter String问题
问题描述
问题
这是我在 Flutter 中的代码。如您所见,在第 33 行,type的值是 'ngo',正如第 34 行使用 print 语句打印的那样。但是,在 if 块中,不会执行正确的块。我不明白是什么问题。请帮忙。
main.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/services.dart';
import 'package:xyz/homescreen.dart';
import 'package:xyz/ngo_details.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
await SystemChrome.setEnabledSystemUIOverlays([]);
var _homeWidget = await checkUserLogin();
//Timer(Duration(seconds: 3), () {runApp(MyApp(rootWidget: _homeWidget));});
runApp(MyApp(rootWidget: _homeWidget));
}
Future<Widget> checkUserLogin() async {
final firestoreInstance = Firestore.instance;
final curUser = await FirebaseAuth.instance.currentUser();
if (curUser != null) {
firestoreInstance
.collection('users')
.document(curUser.uid)
.get()
.then((value) {
if (!value.exists) {
FirebaseAuth.instance.signOut();
return HomeScreen();
} else {
String type = value.data['type'];
print(type);
if (type == 'ngo') {
return NGODetailsScreen(user: curUser);
}
else if (type =='user') {
return NGODetailsScreen(user: curUser);
}
}
print('no cases selected');
return Container(color: Colors.yellow,);
});
} else {
return HomeScreen();
}
print('return outer');
return Container(color: Colors.red,);
}
class MyApp extends StatelessWidget {
final firestoreInstance = Firestore.instance;
final rootWidget;
MyApp({this.rootWidget});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Charity for Everyone',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: rootWidget,
);
}
}
输出 :
预期结果:在第 34 行输出“ngo”后应该调用 NGODetailsScreen
实际结果:即使第 34 行输出“ngo”,也会执行带有红色背景的容器
Logs
PS D:\flutter\xyz> flutter run
Launching lib\main.dart on Redmi Note 4 in debug mode...
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done 16.1s
√ Built build\app\outputs\apk\debug\app-debug.apk.
I/flutter (18833): return outer
W/DynamiteModule(18833): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(18833): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(18833): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/ResourceType(18833): No package identifier when getting name for resource number 0x00000000
V/NativeCrypto(18833): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 286 native methods...
D/NetworkSecurityConfig(18833): No Network Security Config specified, using platform default
I/ProviderInstaller(18833): Installed default security provider GmsCore_OpenSSL
W/art (18833): Before Android 4.1, method double java.util.concurrent.ThreadLocalRandom.internalNextDouble(double, double) would have incorrectly overridden the package-private method
in java.util.Random
W/art (18833): Before Android 4.1, method int java.util.concurrent.ThreadLocalRandom.internalNextInt(int, int) would have incorrectly overridden the package-private method in java.util.Random
W/art (18833): Before Android 4.1, method long java.util.concurrent.ThreadLocalRandom.internalNextLong(long, long) would have incorrectly overridden the package-private method in java.util.Random
Syncing files to device Redmi Note 4... 1,216ms
Flutter run key commands.
r Hot reload.
R Hot restart.
h Repeat this help message.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
An Observatory debugger and profiler on Redmi Note 4 is available at: http://127.0.0.1:65500/s-e-dD_DnYk=/
I/flutter (18833): ngo
Application finished.
D:\flutter\xyz>flutter analyze
Analyzing xyz...
No issues found! (ran in 22.5s)
解决方案
感谢@jamesdlin 指出解决方案。
基本上我变了
firestoreInstance
.collection('users')
.document(curUser.uid)
.get()
.then((value)
至
var value = await firestoreInstance
.collection('users')
.document(curUser.uid)
.get();
它奏效了。
推荐阅读
- r - 使用“链式设置块”在学习者教程应用程序中的块之间共享变量
- aws-lambda - Lambda 函数无法访问 appsync
- timer - 同时改变 PWM 的占空比和频率
- ajax - MVC ASP.net 核心 API 通过 Swagger 和外部 Web 应用程序获取域用户
- java - 如何遍历 JSONObject(complex) 并选择键值对并将其插入到 Map
- amazon-web-services - AWS SAM StepFunctionsExecutionPolicy 错误:未授权执行:states:StartExecution
- javascript - 锚元素在第一次单击时无法正确滚动,但在第二次尝试时滚动正常
- node.js - 在 EJS 文件中包含标签的可选类的语法
- django - Django REST Framework:如何制作自定义验证器来一次验证多个字段的组合?
- php - Laravel 急切加载与模型属性条件的关系