我正在尝试用 Flutter 制作一个天气应用程序。但由于某种原因,build() 方法在 initState() 方法完成之前运行。问题是,所有状态变量都是使用 initState() 内的 setState() 方法初始化的,其变量将在 build() 方法中使用。我猜问题是 Flutter 试图在 setState() 方法之前访问这些状态变量,这会不断向我抛出错误:必须向 Text 小部件提供非空字符串。我知道这些代码太长,难以阅读。但如果你能帮我解决这个问题,我将不胜感激。
\nimport 'package:flutter/material.dart';\n\nimport "package:climat/screens/LoadingScreen.dart";\nimport "package:climat/screens/MainScreen.dart";\nimport "package:climat/screens/SearchScreen.dart";\n\nvoid main() {\n runApp(\n MaterialApp(\n theme: ThemeData(\n fontFamily: "Open Sans",\n ),\n title: "Climat",\n initialRoute: "/",\n onGenerateRoute: (RouteSettings routeSettings) {\n dynamic routes = <String, WidgetBuilder>{\n "/": (context) => LoadingScreen(),\n "/index": (context) => MainScreen(),\n "/search": (context) => SearchScreen(),\n };\n WidgetBuilder builder = routes[routeSettings.name];\n return MaterialPageRoute(builder: (context) => builder(context));\n },\n ),\n );\n}\nRun Code Online (Sandbox Code Playgroud)\nimport "package:flutter/material.dart";\nimport "package:flutter_spinkit/flutter_spinkit.dart";\n\nimport "package:climat/services/GeolocatorHelper.dart";\nimport "package:climat/services/NetworkHelper.dart";\n\nimport "package:climat/utilities/constants.dart";\n\nclass LoadingScreen …Run Code Online (Sandbox Code Playgroud) 恐怕这不是代码谈话,但是 CSS3 中的 Flexbox 和 Grid 总是让我的生活变得更轻松。但我无法停止担心浏览器兼容性。在 2020 年(现在)毫不犹豫地使用 Flexbox 和 Grid 真的安全吗?
如您所知,在 Dart 中,我们通过将类型附加在列表或映射前面来指定类型,如下所示。
List<String> listOfStrings = [ ... ];
Map<String, int> listOfInts = { ... };
Run Code Online (Sandbox Code Playgroud)
然后我遇到了这种奇怪的语法,
DropdownButton<String>( ... );
DropdownMenuItem<String>( ... );
Run Code Online (Sandbox Code Playgroud)
这些是小部件构建器,它们是类,对吧?怎么<String>可以贴在那里呢?这意味着什么?