blob: b9a35f96b17827dd2b54acb9e3fd74679cc447c5 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: public_member_api_docs
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'shared/data.dart';
part 'all_types.g.dart';
@TypedGoRoute<AllTypesRoute>(
path: '/:requiredBigIntField/:requiredBoolField/:requiredDateTimeField'
'/:requiredDoubleField/:requiredEnumField/:requiredIntField'
'/:requiredNumField/:requiredStringField/:requiredUriField',
)
@immutable
class AllTypesRoute extends GoRouteData {
const AllTypesRoute({
required this.requiredBigIntField,
required this.requiredBoolField,
required this.requiredDateTimeField,
required this.requiredDoubleField,
required this.requiredEnumField,
required this.requiredIntField,
required this.requiredNumField,
required this.requiredStringField,
required this.requiredUriField,
this.bigIntField,
this.boolField,
this.dateTimeField,
this.doubleField,
this.enumField,
this.intField,
this.numField,
this.stringField,
this.uriField,
});
final BigInt requiredBigIntField;
final bool requiredBoolField;
final DateTime requiredDateTimeField;
final double requiredDoubleField;
final PersonDetails requiredEnumField;
final int requiredIntField;
final num requiredNumField;
final String requiredStringField;
final Uri requiredUriField;
final BigInt? bigIntField;
final bool? boolField;
final DateTime? dateTimeField;
final double? doubleField;
final PersonDetails? enumField;
final int? intField;
final num? numField;
final String? stringField;
final Uri? uriField;
@override
Widget build(BuildContext context) => Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('built!'),
SelectableText(location),
],
),
),
);
@override
int get hashCode => Object.hashAll(_items);
@override
bool operator ==(Object other) {
if (other is AllTypesRoute) {
final List<Object?> mine = _items;
final List<Object?> theirs = other._items;
for (int i = 0; i < mine.length; i++) {
if (mine[i] != theirs[i]) {
return false;
}
}
}
return true;
}
List<Object?> get _items => <Object?>[
requiredBigIntField,
requiredBoolField,
requiredDateTimeField,
requiredDoubleField,
requiredEnumField,
requiredIntField,
requiredNumField,
requiredStringField,
requiredUriField,
bigIntField,
boolField,
dateTimeField,
doubleField,
enumField,
intField,
numField,
stringField,
uriField,
];
}
void main() => runApp(AllTypesApp());
class AllTypesApp extends StatelessWidget {
AllTypesApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MaterialApp.router(
routeInformationParser: _router.routeInformationParser,
routerDelegate: _router.routerDelegate,
);
late final GoRouter _router = GoRouter(
debugLogDiagnostics: true,
routes: $appRoutes,
// redirect to the login page if the user is not logged in
redirect: (GoRouterState state) {
if (state.location == '/') {
final String location = AllTypesRoute(
requiredBigIntField: BigInt.two,
requiredBoolField: true,
requiredDateTimeField: DateTime.now(),
requiredDoubleField: 3.14,
requiredEnumField: PersonDetails.favoriteSport,
requiredIntField: -42,
requiredNumField: 3.15,
requiredStringField: r'$!/#bob%%20',
requiredUriField: Uri.parse('https://dart.dev'),
bigIntField: BigInt.zero,
boolField: false,
dateTimeField: DateTime(0),
doubleField: 3.14,
enumField: PersonDetails.favoriteSport,
intField: -42,
numField: 3.15,
stringField: r'$!/#bob%%20',
uriField: Uri.parse('https://dart.dev'),
).location;
return location;
}
// no need to redirect at all
return null;
},
);
}