**Hello everyone, I am trying to develop a project with flutter web, but the unexpected null value error is written on the screen, and in the console, The relevant error-causing widget was:
Builder
Builder:file:///Users/mertyavuz/.pub-cache/hosted/pub.dev/go_router-14.1.4/lib/src/builder.dart:256:9
I get this error **
Router Config
<code> import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:hotor_web/view/authentication/login/login_screen.dart';
import 'package:hotor_web/view/authentication/register/register_screen.dart';
import '../../view/management/screen_management.dart';
class AppRouterConfig {
late final GoRouter router = GoRouter(
routes: <RouteBase>[
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement();
},
routes: <RouteBase>[
GoRoute(
path: 'login',
builder: (BuildContext context, GoRouterState state) {
return const LoginScreen();
},
),
GoRoute(
path: 'register',
builder: (BuildContext context, GoRouterState state) {
return const RegisterScreen();
},
),
GoRoute(
path: 'admin',
builder: (BuildContext context, GoRouterState state) {
return const LoginScreen();
},
),
GoRoute(
path: 'openlearnings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 2);
},
),
GoRoute(
path: 'activelearnings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 1);
},
),
GoRoute(
path: 'help',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 3);
},
),
GoRoute(
path: 'settings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 4);
},
),
],
),
],
);
}
</code>
<code> import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:hotor_web/view/authentication/login/login_screen.dart';
import 'package:hotor_web/view/authentication/register/register_screen.dart';
import '../../view/management/screen_management.dart';
class AppRouterConfig {
late final GoRouter router = GoRouter(
routes: <RouteBase>[
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement();
},
routes: <RouteBase>[
GoRoute(
path: 'login',
builder: (BuildContext context, GoRouterState state) {
return const LoginScreen();
},
),
GoRoute(
path: 'register',
builder: (BuildContext context, GoRouterState state) {
return const RegisterScreen();
},
),
GoRoute(
path: 'admin',
builder: (BuildContext context, GoRouterState state) {
return const LoginScreen();
},
),
GoRoute(
path: 'openlearnings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 2);
},
),
GoRoute(
path: 'activelearnings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 1);
},
),
GoRoute(
path: 'help',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 3);
},
),
GoRoute(
path: 'settings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 4);
},
),
],
),
],
);
}
</code>
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:hotor_web/view/authentication/login/login_screen.dart';
import 'package:hotor_web/view/authentication/register/register_screen.dart';
import '../../view/management/screen_management.dart';
class AppRouterConfig {
late final GoRouter router = GoRouter(
routes: <RouteBase>[
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement();
},
routes: <RouteBase>[
GoRoute(
path: 'login',
builder: (BuildContext context, GoRouterState state) {
return const LoginScreen();
},
),
GoRoute(
path: 'register',
builder: (BuildContext context, GoRouterState state) {
return const RegisterScreen();
},
),
GoRoute(
path: 'admin',
builder: (BuildContext context, GoRouterState state) {
return const LoginScreen();
},
),
GoRoute(
path: 'openlearnings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 2);
},
),
GoRoute(
path: 'activelearnings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 1);
},
),
GoRoute(
path: 'help',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 3);
},
),
GoRoute(
path: 'settings',
builder: (BuildContext context, GoRouterState state) {
return const ScreenManagement(initialPage: 4);
},
),
],
),
],
);
}
Register Screen
<code> import 'package:flutter/material.dart';
import 'package:hotor_web/core/base/view/base_view.dart';
import 'package:hotor_web/core/constants/images.dart';
import 'package:hotor_web/view/authentication/register/pages/register_screen_one.dart';
import 'package:hotor_web/view/authentication/register/view_model/register_view_model.dart';
import '../../../core/base/state/base_state.dart';
import '../../../core/services/register/register_service.dart';
import 'pages/register_screen_three.dart';
import 'pages/register_screen_two.dart';
class RegisterScreen extends StatefulWidget {
const RegisterScreen({super.key, this.initialPage = 0});
final int initialPage;
@override
State<RegisterScreen> createState() => _RegisterScreenState();
}
class _RegisterScreenState extends BaseState<RegisterScreen> {
final RegisterService registerService = RegisterService();
final RegisterViewModel _viewModel = RegisterViewModel();
@override
void initState() {
super.initState();
_viewModel.pageController = PageController(initialPage: widget.initialPage);
print("PageController initialized with initialPage: ${widget.initialPage}");
}
@override
Widget build(BuildContext context) {
print("Building RegisterScreen with context: $context");
return BaseView(
viewModel: _viewModel,
onPageBuilder: (context, dynamic viewModel) {
print("Inside onPageBuilder with viewModel: $viewModel");
return scaffoldBody();
},
);
}
Scaffold scaffoldBody() {
print("Building scaffoldBody");
return Scaffold(
body: SizedBox(
width: screenWidth(),
child: Row(
children: [
Expanded(
flex: 5,
child: Image.asset(
AppImages.loginBackground.imagePath,
fit: BoxFit.cover,
),
),
Expanded(
flex: 5,
child: PageView(
controller: _viewModel.pageController,
physics: const NeverScrollableScrollPhysics(),
children: const [
RegisterScreenOne(),
RegisterScreenTwo(),
RegisterScreenThree(),
],
),
),
],
),
),
);
}
}
</code>
<code> import 'package:flutter/material.dart';
import 'package:hotor_web/core/base/view/base_view.dart';
import 'package:hotor_web/core/constants/images.dart';
import 'package:hotor_web/view/authentication/register/pages/register_screen_one.dart';
import 'package:hotor_web/view/authentication/register/view_model/register_view_model.dart';
import '../../../core/base/state/base_state.dart';
import '../../../core/services/register/register_service.dart';
import 'pages/register_screen_three.dart';
import 'pages/register_screen_two.dart';
class RegisterScreen extends StatefulWidget {
const RegisterScreen({super.key, this.initialPage = 0});
final int initialPage;
@override
State<RegisterScreen> createState() => _RegisterScreenState();
}
class _RegisterScreenState extends BaseState<RegisterScreen> {
final RegisterService registerService = RegisterService();
final RegisterViewModel _viewModel = RegisterViewModel();
@override
void initState() {
super.initState();
_viewModel.pageController = PageController(initialPage: widget.initialPage);
print("PageController initialized with initialPage: ${widget.initialPage}");
}
@override
Widget build(BuildContext context) {
print("Building RegisterScreen with context: $context");
return BaseView(
viewModel: _viewModel,
onPageBuilder: (context, dynamic viewModel) {
print("Inside onPageBuilder with viewModel: $viewModel");
return scaffoldBody();
},
);
}
Scaffold scaffoldBody() {
print("Building scaffoldBody");
return Scaffold(
body: SizedBox(
width: screenWidth(),
child: Row(
children: [
Expanded(
flex: 5,
child: Image.asset(
AppImages.loginBackground.imagePath,
fit: BoxFit.cover,
),
),
Expanded(
flex: 5,
child: PageView(
controller: _viewModel.pageController,
physics: const NeverScrollableScrollPhysics(),
children: const [
RegisterScreenOne(),
RegisterScreenTwo(),
RegisterScreenThree(),
],
),
),
],
),
),
);
}
}
</code>
import 'package:flutter/material.dart';
import 'package:hotor_web/core/base/view/base_view.dart';
import 'package:hotor_web/core/constants/images.dart';
import 'package:hotor_web/view/authentication/register/pages/register_screen_one.dart';
import 'package:hotor_web/view/authentication/register/view_model/register_view_model.dart';
import '../../../core/base/state/base_state.dart';
import '../../../core/services/register/register_service.dart';
import 'pages/register_screen_three.dart';
import 'pages/register_screen_two.dart';
class RegisterScreen extends StatefulWidget {
const RegisterScreen({super.key, this.initialPage = 0});
final int initialPage;
@override
State<RegisterScreen> createState() => _RegisterScreenState();
}
class _RegisterScreenState extends BaseState<RegisterScreen> {
final RegisterService registerService = RegisterService();
final RegisterViewModel _viewModel = RegisterViewModel();
@override
void initState() {
super.initState();
_viewModel.pageController = PageController(initialPage: widget.initialPage);
print("PageController initialized with initialPage: ${widget.initialPage}");
}
@override
Widget build(BuildContext context) {
print("Building RegisterScreen with context: $context");
return BaseView(
viewModel: _viewModel,
onPageBuilder: (context, dynamic viewModel) {
print("Inside onPageBuilder with viewModel: $viewModel");
return scaffoldBody();
},
);
}
Scaffold scaffoldBody() {
print("Building scaffoldBody");
return Scaffold(
body: SizedBox(
width: screenWidth(),
child: Row(
children: [
Expanded(
flex: 5,
child: Image.asset(
AppImages.loginBackground.imagePath,
fit: BoxFit.cover,
),
),
Expanded(
flex: 5,
child: PageView(
controller: _viewModel.pageController,
physics: const NeverScrollableScrollPhysics(),
children: const [
RegisterScreenOne(),
RegisterScreenTwo(),
RegisterScreenThree(),
],
),
),
],
),
),
);
}
}
Register Screen One
<code> import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:hotor_web/core/components/form_widgets/management/validate_management.dart';
import '../../../../core/base/state/base_state.dart';
import '../../../../core/components/form_widgets/dropdown_form_widget.dart';
import '../../../../core/components/form_widgets/text_form_widget.dart';
import '../../../widgets/step_progress_widget.dart';
class RegisterScreenOne extends StatefulWidget {
const RegisterScreenOne({super.key});
@override
State<RegisterScreenOne> createState() => _RegisterScreenOneState();
}
class _RegisterScreenOneState extends BaseState<RegisterScreenOne> {
@override
Widget build(BuildContext context) {
print("dynamicHeight: ${dynamicHeight(0.1)}");
print("dynamicWidth: ${dynamicWidth(0.7)}");
print("currentTheme: $currentTheme");
return Padding(
padding: EdgeInsets.symmetric(
vertical: dynamicHeight(0.1),
),
child: Column(
children: [
progress(),
SizedBox(
height: dynamicHeight(0.05),
),
FormBuilder(
child: SizedBox(
width: dynamicWidth(0.7),
child: const Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
//* Name
TextFormWidget(
hintText: "Ad",
title: "Ad",
keyboardType: TextInputType.name,
identifierName: "name",
validationType: InputValidationType.text,
width: 250,
labelVisibility: true,
),
SizedBox(width: 20),
TextFormWidget(
hintText: "Soyad",
title: "Soyad",
keyboardType: TextInputType.name,
identifierName: "surname",
validationType: InputValidationType.text,
width: 250,
labelVisibility: true,
),
],
),
const TextFormWidget(
hintText: "Eğer yok ise 'Yok' yazabilirsiniz.",
title: "E-posta",
keyboardType: TextInputType.name,
identifierName: "email",
validationType: InputValidationType.text,
width: 520,
labelVisibility: true,
),
DropDownFormWidget(
identifierName: "jobTag",
hintText: "İş Tanımı Seçiniz",
title: "İş Tanımı",
items: ["e", "s"], // ViewModel'den gelen liste
labelVisible: true,
),
],
),
),
),
],
),
);
}
Padding progress() {
return Padding(
padding: EdgeInsets.symmetric(
horizontal: dynamicWidth(0.1),
),
child: Column(
children: [
const StepProgressWidget(
currentPage: 1,
totalSteps: 3,
),
SizedBox(
height: dynamicHeight(0.02),
),
//* Title
Text(
"Bilgilerinizi girerek kayıt olma işlemine başlayabilirsiniz.",
style: currentTheme.textTheme.bodyLarge,
textAlign: TextAlign.center,
),
],
),
);
}
}
</code>
<code> import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:hotor_web/core/components/form_widgets/management/validate_management.dart';
import '../../../../core/base/state/base_state.dart';
import '../../../../core/components/form_widgets/dropdown_form_widget.dart';
import '../../../../core/components/form_widgets/text_form_widget.dart';
import '../../../widgets/step_progress_widget.dart';
class RegisterScreenOne extends StatefulWidget {
const RegisterScreenOne({super.key});
@override
State<RegisterScreenOne> createState() => _RegisterScreenOneState();
}
class _RegisterScreenOneState extends BaseState<RegisterScreenOne> {
@override
Widget build(BuildContext context) {
print("dynamicHeight: ${dynamicHeight(0.1)}");
print("dynamicWidth: ${dynamicWidth(0.7)}");
print("currentTheme: $currentTheme");
return Padding(
padding: EdgeInsets.symmetric(
vertical: dynamicHeight(0.1),
),
child: Column(
children: [
progress(),
SizedBox(
height: dynamicHeight(0.05),
),
FormBuilder(
child: SizedBox(
width: dynamicWidth(0.7),
child: const Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
//* Name
TextFormWidget(
hintText: "Ad",
title: "Ad",
keyboardType: TextInputType.name,
identifierName: "name",
validationType: InputValidationType.text,
width: 250,
labelVisibility: true,
),
SizedBox(width: 20),
TextFormWidget(
hintText: "Soyad",
title: "Soyad",
keyboardType: TextInputType.name,
identifierName: "surname",
validationType: InputValidationType.text,
width: 250,
labelVisibility: true,
),
],
),
const TextFormWidget(
hintText: "Eğer yok ise 'Yok' yazabilirsiniz.",
title: "E-posta",
keyboardType: TextInputType.name,
identifierName: "email",
validationType: InputValidationType.text,
width: 520,
labelVisibility: true,
),
DropDownFormWidget(
identifierName: "jobTag",
hintText: "İş Tanımı Seçiniz",
title: "İş Tanımı",
items: ["e", "s"], // ViewModel'den gelen liste
labelVisible: true,
),
],
),
),
),
],
),
);
}
Padding progress() {
return Padding(
padding: EdgeInsets.symmetric(
horizontal: dynamicWidth(0.1),
),
child: Column(
children: [
const StepProgressWidget(
currentPage: 1,
totalSteps: 3,
),
SizedBox(
height: dynamicHeight(0.02),
),
//* Title
Text(
"Bilgilerinizi girerek kayıt olma işlemine başlayabilirsiniz.",
style: currentTheme.textTheme.bodyLarge,
textAlign: TextAlign.center,
),
],
),
);
}
}
</code>
import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:hotor_web/core/components/form_widgets/management/validate_management.dart';
import '../../../../core/base/state/base_state.dart';
import '../../../../core/components/form_widgets/dropdown_form_widget.dart';
import '../../../../core/components/form_widgets/text_form_widget.dart';
import '../../../widgets/step_progress_widget.dart';
class RegisterScreenOne extends StatefulWidget {
const RegisterScreenOne({super.key});
@override
State<RegisterScreenOne> createState() => _RegisterScreenOneState();
}
class _RegisterScreenOneState extends BaseState<RegisterScreenOne> {
@override
Widget build(BuildContext context) {
print("dynamicHeight: ${dynamicHeight(0.1)}");
print("dynamicWidth: ${dynamicWidth(0.7)}");
print("currentTheme: $currentTheme");
return Padding(
padding: EdgeInsets.symmetric(
vertical: dynamicHeight(0.1),
),
child: Column(
children: [
progress(),
SizedBox(
height: dynamicHeight(0.05),
),
FormBuilder(
child: SizedBox(
width: dynamicWidth(0.7),
child: const Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
//* Name
TextFormWidget(
hintText: "Ad",
title: "Ad",
keyboardType: TextInputType.name,
identifierName: "name",
validationType: InputValidationType.text,
width: 250,
labelVisibility: true,
),
SizedBox(width: 20),
TextFormWidget(
hintText: "Soyad",
title: "Soyad",
keyboardType: TextInputType.name,
identifierName: "surname",
validationType: InputValidationType.text,
width: 250,
labelVisibility: true,
),
],
),
const TextFormWidget(
hintText: "Eğer yok ise 'Yok' yazabilirsiniz.",
title: "E-posta",
keyboardType: TextInputType.name,
identifierName: "email",
validationType: InputValidationType.text,
width: 520,
labelVisibility: true,
),
DropDownFormWidget(
identifierName: "jobTag",
hintText: "İş Tanımı Seçiniz",
title: "İş Tanımı",
items: ["e", "s"], // ViewModel'den gelen liste
labelVisible: true,
),
],
),
),
),
],
),
);
}
Padding progress() {
return Padding(
padding: EdgeInsets.symmetric(
horizontal: dynamicWidth(0.1),
),
child: Column(
children: [
const StepProgressWidget(
currentPage: 1,
totalSteps: 3,
),
SizedBox(
height: dynamicHeight(0.02),
),
//* Title
Text(
"Bilgilerinizi girerek kayıt olma işlemine başlayabilirsiniz.",
style: currentTheme.textTheme.bodyLarge,
textAlign: TextAlign.center,
),
],
),
);
}
}
2