#flutter
Вопрос:
Я настоящий новичок в flutter и хотел бы обратиться к вам за помощью для решения следующей проблемы:
Я хочу записать текущее время в файл, но отображается следующая ошибка:
= = = = = = = Исключение, обнаруженное библиотекой виджетов =====================
В Builder была вызвана следующая ошибка noSuchMethod: метод «writeStartTimeString» был вызван при значении null. Получатель: null Попытался вызвать: writeStartTimeString(«1629015208721»)
Вот мой код:
**startTimeStorage.dart**
import 'dart:async';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
class StartTimeStorage {
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
Future<File> get _localFile async {
final path = await _localPath;
print('$path/startTime.txt');
return File('$path/startTime.txt');
}
Future<String> readStartTimeString() async {
try {
final file = await _localFile;
// Read the file
final contents = await file.readAsString();
print('reading');
print(contents);
return contents;
} catch (e) {
// If encountering an error, return ''
return '';
}
}
Future<File> writeStartTimeString(String startTimeString) async {
final file = await _localFile;
print('writing');
print(startTimeString);
// Write the file
return file.writeAsString(startTimeString);
}
}
**main File:**
class ParkingTimerScreen extends StatefulWidget {
StartTimeStorage startTimeStorage;
_ParkingTimerScreen createState() => _ParkingTimerScreen();
}
class _ParkingTimerScreen extends State<ParkingTimerScreen> {
@override
void initState() {
super.initState();
var _timestamp = DateTime.now().millisecondsSinceEpoch;
print('printing _timestamp:$_timestamp');
//Writing to file, ***where error appears.***
widget.startTimeStorage.writeStartTimeString(_timestamp.toString());
//Reading from file and store the value to startTimeString
widget.startTimeStorage.readStartTimeString().then((String value) {
startTimeString = value;
});
//...other code.....
//.....
}
Комментарии:
1. Вы не инициализируете
startTimeStorage
. По крайней мере, не в показанном коде.
Ответ №1:
Вы должны инициализировать переменную StartTimeStorage в классе ParkingTimeScreen.
class ParkingTimerScreen extends StatefulWidget {
StartTimeStorage startTimeStorage = StartTimeStorage();
_ParkingTimerScreen createState() => _ParkingTimerScreen();
}
Ответ №2:
вы должны использовать инициализатор
в вашем главном ParkingTimerScreen
виджете файла получите startTimeStorage
, но вы не инициализировали его, и приложение выдает эту ошибку
потому startTimeStorage
что имеет значение null и readStartTimeString
вызывает переменную null
class ParkingTimerScreen extends StatefulWidget {
StartTimeStorage startTimeStorage;
ParkingTimerScreen({required this.startTimeStorage});
_ParkingTimerScreen createState() => _ParkingTimerScreen();
}