首页 > 解决方案 > 等式比较中的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”后应该调用 NGODetailsS​​creen

实际结果:即使第 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)

标签: flutterdart

解决方案


感谢@jamesdlin 指出解决方案。

基本上我变了

firestoreInstance
            .collection('users')
            .document(curUser.uid)
            .get()
            .then((value)

var value = await firestoreInstance
            .collection('users')
            .document(curUser.uid)
            .get();

它奏效了。


推荐阅读