【发布时间】:2019-10-24 17:47:53
【问题描述】:
我是 Flutter 的新手。我有一个 dart 文件“CreateDatabase.dart”,它应该从 csv 文件中获取数据并存储在一个变量中。在另一个文件“main.dart”中,我想访问此变量以使用获取的数据。 “CreateDatabase.dart”文件如下所示:
class CreateDatabase extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return CreateDatabaseState();
}
}
class CreateDatabaseState extends State<CreateDatabase> {
@override
void initState(){
super.initState();
fetchVenueDatabase();
}
List<List<dynamic>> venueDB;
List<Buildings> buildings;
List<Buildings> getBuildings(){
return this.buildings;
}
Future<String> _loadVenueDatabase() async {
return await rootBundle.loadString('assets/VenueDatabase.csv');
}
Future<List<List<dynamic>>> loadVenuedatabase() async {
String data = await _loadVenueDatabase();
List<List<dynamic>> rowsAsListOfValues = const CsvToListConverter().convert(data);
return rowsAsListOfValues;
}
fetchVenueDatabase() async{
venueDB = await loadVenuedatabase();
......
//manipulating venueDB and storing its value in this.buildings
......
this.buildings = buildings;
}
@override
Widget build(BuildContext context) {
return null;
}
}
main.dart 文件如下所示:
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
static List<Buildings> allBuildings;
@override
void initState() { //Initial State of the app
super.initState();
CreateDatabaseState cr = CreateDatabaseState();
allBuildings = cr.getBuildings();
}
@override
Widget build(BuildContext context) {
....
}
}
但是main中的getter方法,
allBuildings= cr.getBuildings();
总是返回 null。我哪里错了?
【问题讨论】:
-
这是一种反模式。你不应该那样做。相反,您应该有一个有状态的小部件来存储数据,它是所有需要它的小部件的祖先。