Используя Flutter, я пытаюсь передать данные через конструктор на новый экран.
Тем не менее, это несколько особый случай, потому что на экране виджет Stateful и я Я использую Навигационные маршруты метод навигации.
Данные также могут иметь тип int, если это имеет значение.
Именованная навигация по маршруту настроена так :
void main() => runApp(Main());
class Main extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
initialRoute: PreLoadScreen.id,
//initialRoute: TemporaryScreen.id,
routes: {
TemporaryScreen.id: (context) => TemporaryScreen(),
InfoScreen.id: (context) => InfoScreen(),
PreLoadScreen.id: (context) => PreLoadScreen(),
StatsScreen.id: (context) => StatsScreen(),
RideScreen.id: (context) => RideScreen(),
AudioScreen.id: (context) => AudioScreen(),
},
);
}
}
Экран, на который я передаю данные, имеет следующий код конструктора:
class StatsScreen extends StatefulWidget {
static const String id = 'stats_screen';
int tableID; // current shift table ID being passed in from super
// Constructor required for having data passed in
StatsScreen({Key key, @required this.tableID}) : super(key: key);
@override
_StatsScreenState createState() {
print('statsscreen DEBUG: $tableID'); // <-- this shows the data passed was NULL! :(
return _StatsScreenState();
}
}
Экран, на который я передаю данные ОТ, содержит следующий код:
void _checkShiftStatus() async {
bool userClockedIn = await ShiftManager().isUserClockedIn();
int tableName = await ShiftManager().getActiveRideTableName();
print('preload DEBUG: tablename: $tableName'); // <-- this verifies the data is NOT null here.
if (userClockedIn) {
Navigator.pushNamed(context, StatsScreen.id,
arguments: {'tableID': tableName}); // <--- something is wrong here, presumably
} else {
shouldDisplayStartShift = !userClockedIn;
showProgressSpinner = false;
}
}
Я пытался изменить строку подозреваемого на:
Navigator.pushNamed(context, StatsScreen.id,
arguments: tableName);
и ...
Navigator.pushNamed(context, StatsScreen.id,
arguments: {tableName});
Но получить тот же результат на целевом экране (переданные данные являются нулевыми). Это что-то вроде бейсбола ... жидкое тесто - это начальный экран ... и ловушка - это экран, к которому мы движемся. Мяч это данные. За исключением моего случая, бэттером, кажется, является Сэмми Соса, и мяч где-то вне парка ... что отлично подходит для новичков, но не для меня.
Я также пробовал гуглить, документы, stackoverflow (даже этот конкретный c ответ ... но я, кажется, не могу извлечь из этого уместное значение), и Бакарди ... и я очень раздражен. Пожалуйста, кто-нибудь укажет на мою синтаксическую ошибку и в какой строке. Спасибо!