-
Notifications
You must be signed in to change notification settings - Fork 6
/
main.dart
112 lines (109 loc) · 3.42 KB
/
main.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import 'package:example/layouts/about.dart';
import 'package:example/layouts/article.dart';
import 'package:example/layouts/home.dart';
import 'package:example/layouts/tabs/all_articles.dart';
import 'package:example/layouts/tabs/shop.dart';
import 'package:example/layouts/tabs/update_profile.dart';
import 'package:example/layouts/tabs/user.dart';
import 'package:flutter/material.dart';
import 'package:riverpod_navigation/riverpod_navigation.dart';
import 'layouts/share.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
final routes = RouteDefinition(
key: Key('Home'),
template: UriTemplate.parse('/'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: HomeLayout(
activeTab: activeTab,
tabs: tabs,
),
),
tabs: [
RouteDefinition(
template: UriTemplate.parse('/all-articles'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: AllArticlesLayout(),
),
),
RouteDefinition(
template: UriTemplate.parse('/shop'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: ShopLayout(),
),
),
RouteDefinition(
template: UriTemplate.parse('/user'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: UserLayout(),
),
next: [
RouteDefinition(
template: UriTemplate.parse('/update-profile'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: UpdateProfileLayout(),
),
),
],
),
],
next: [
RouteDefinition(
template: UriTemplate.parse('/articles/:id'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: ArticleLayout(
id: entry.parameter('id'),
),
),
next: [
RouteDefinition(
template: UriTemplate.parse('/share'),
key: Key('share'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: ShareLayout(
articleId: entry.parameter('id'),
),
),
),
],
),
RouteDefinition(
template: UriTemplate.parse('/about'),
builder: (context, entry, tabs, activeTab) => MaterialPage(
child: AboutLayout(),
),
),
],
);
return RiverpodNavigation(
routes: routes,
uriRewriter: (notifier, uri) {
const publicPrefix = 'https://example.com';
final stringUri = uri.toString();
if (stringUri.startsWith(publicPrefix)) {
return Uri.parse(stringUri.substring(publicPrefix.length));
}
return uri;
},
popBehaviour: (notifier, stack) {
if (stack.lastRoute?.key == Key('share')) {
return PopResult.update(Uri.parse('/'));
}
return PopResult.auto();
},
builder: (context, delegate, parser) => MaterialApp.router(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
routerDelegate: delegate,
routeInformationParser: parser,
),
);
}
}