【问题标题】:Flutter FutureBuilder Returning Null ErrorFlutter FutureBuilder返回空错误
【发布时间】:2021-08-24 01:02:48
【问题描述】:

当我运行我的 Flutter 应用程序时,我的 IOS 模拟器出现错误。

有问题的小部件是:FutureBuilder 构建函数绝不能返回 null。要返回导致建筑小部件填满可用空间的空白空间,请返回“Container()”。要返回占用尽可能少空间的空白空间,请返回 "new Container(width: 0.0, height: 0.0)

void main(){
  WidgetsFlutterBinding.ensureInitialized();
  runApp(App());
}

class App extends StatelessWidget {
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
          theme: ThemeData(
            primaryColor: Color(0xFF6A8D73),
            primaryColorDark: Color(0xFF475E4D),
            accentColor: Color(0xffCFE8D5),
            primaryColorLight: Colors.white
          ),
          home: FutureBuilder(
            future: _initialization,
            builder: (context, snapshot){
              if (snapshot.hasError) {
                print(snapshot.error);
                return null;
              }
              if (snapshot.connectionState == ConnectionState.done) {
                return HomePage();
              }
              return Splash();
            },
          )
    );
  }
}
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
        create: (_) => UserRepository.instance(),
        child: Consumer(
          builder: (context, UserRepository user, _){
            switch(user.status){
              case Status.Uninitialized:
                return Splash();
              case Status.Unauthenticated:
              case Status.Authenticating:
                return LoginPage();
              case Status.Authenticated:
                return TaskBar();
              default:
                return null;
            }
          },
        ),
    );
  }
}

class Splash extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Material(
      child: Center(
        child: Text("Splash Screen"),
      ),
    );
  }
}

【问题讨论】:

  • 快照出错时返回null。您需要返回一个错误小部件

标签: firebase flutter dart


【解决方案1】:

您只需要在检查错误的地方替换以下代码-

if (snapshot.hasError) {
            print(snapshot.error);
            return SizedBox();
          }

【讨论】:

  • 你应该返回错误消息小部件而不是空容器
  • 你可以根据你的场景返回任何东西
猜你喜欢
  • 2020-03-08
  • 2019-03-21
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2020-05-17
  • 1970-01-01
  • 2020-04-12
相关资源
最近更新 更多