Класс MaterialPageRoute
Класс MaterialPageRoute наследует
ModalRoute
и строит страницу через builder.
Имя и аргументы задают в settings.
Полноэкранный диалог включают через fullscreenDialog.
Экземпляр передают в
Navigator.push.
Синтаксис
MaterialPageRoute<void>(
builder: (context) {
return Scaffold(
body: Center(
child: Text('abcde'),
),
);
},
)
Параметры
| Параметр | Описание |
|---|---|
builder |
Строит виджет страницы. Обязателен. |
settings |
Имя и arguments маршрута. Тип
RouteSettings.
|
fullscreenDialog |
Открыть как полноэкранный диалог с другой анимацией. |
maintainState |
Сохранять State страницы, когда она не видна.
|
Пример
Давайте откроем второй экран через MaterialPageRoute:
import 'package:flutter/material.dart';
class MprHome extends StatelessWidget
{
const MprHome({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<void>(
builder: (ctx) => Scaffold(
appBar: AppBar(
title: const Text('12345'),
),
body: const Center(
child: Text('abcde'),
),
),
),
);
},
child: const Text('open'),
),
),
);
}
}
void main()
{
runApp(
MaterialApp(
home: MprHome(),
),
);
}
На экране по кнопке open страница съедет с анимацией Material и покажет AppBar '12345'.
Пример
Давайте зададим имя маршрута в settings:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Builder(
builder: (context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
var route = MaterialPageRoute<void>(
settings: const RouteSettings(
name: '/detail',
),
builder: (ctx) => const Scaffold(
body: Center(
child: Text('12345'),
),
),
);
Navigator.push(context, route);
},
child: const Text('abcde'),
),
),
);
},
),
),
);
}
На экране push откроет именованный маршрут '/detail' с текстом '12345'.
Смотрите также
-
класс
PageRouteBuilder,
Routeсо своей анимацией -
класс
Route,
базовый тип маршрута -
метод
push,
кладётMaterialPageRouteна стопку -
класс
RouteSettings,
имя и arguments для settings