Flutter 2.0 路由 Route 配置 例子

301 阅读1分钟

Flutter 2.0 路由 Route 配置

onGenerateRoute 函数可直接复制使用

import 'package:flutter/material.dart';

void main() {
  runApp(Myapp());
}

class Myapp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 路由配置
      onGenerateRoute: (settings) {
        debugPrint(settings.toString());
        final Map routes = {
          '/': (context) => HomeScreen(),
          '/details': (context) => DetailScreen(arguments: settings.arguments),
        };

        if (routes[settings.name] != null) {
          Function builder = routes[settings.name];
          return MaterialPageRoute(builder: builder);
        }
        return MaterialPageRoute(builder: (context) => UnknownScreen());
      },
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: TextButton(
          child: Text('View Details'),
          onPressed: () {
            Navigator.of(context)
                .pushNamed('/details', arguments: {'id': '5988'});
          },
        ),
      ),
    );
  }
}

class DetailScreen extends StatefulWidget {
  final Map arguments;
  DetailScreen({Key key, this.arguments}) : super(key: key);

  @override
  _DetailScreenState createState() => _DetailScreenState(arguments: arguments);
}

class _DetailScreenState extends State<DetailScreen> {
  Map arguments;
  _DetailScreenState({this.arguments});

  @override
  void initState() {
    super.initState();
    debugPrint(arguments.toString());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('=== ' + arguments['id']),
            TextButton(
              child: Text('Pop!'),
              onPressed: () {
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  }
}

// 404 页面
class UnknownScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Text('404!'),
      ),
    );
  }
}

来自一个初学者分享记录