Flutter命名路由

命名路由需要在根组件定义Routes

main.dart

import 'package:flutter/material.dart';
import 'package:untitled1/Pages/Tabs.dart';
import 'package:untitled1/Pages/SearchPage.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Tabs(),
      routes: {
        '/Search':(context)=>SearchPage()
      },
      theme: ThemeData(primarySwatch: Colors.cyan),
    );
  }
}

然后使用Navigator.pushNamed(context, routeName)跳转

import 'package:flutter/material.dart';
import 'package:untitled1/Pages/SearchPage.dart';

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: <Widget>[
          RaisedButton(
            child: Text('跳转到搜索页面',style: TextStyle(
              color: Colors.white
            ),),
            onPressed: (){
              Navigator.pushNamed(context, '/Search');
           
            },
            color: Theme.of(context).accentColor,
            textTheme: ButtonTextTheme.primary,//文字主题
          )
        ],
      ),
    );
  }
}

命名路由传参

routes统一配置Routes.dart

import 'package:flutter/material.dart';
import 'package:untitled1/Pages/Tabs.dart';
import 'package:untitled1/Pages/SearchPage.dart';


final routes = {
  '/':(context,{arguments}) => Tabs(),
  '/Search': (context, {arguments}) => SearchPage(arguments: arguments,)
};

//命名路由传参统一配置统一配置
var onGenerateRoute = (RouteSettings settings) {
  final String name = settings.name;
  final Function pageContentBuilder = routes[name];
  if (pageContentBuilder != null) {
    if (settings.arguments != null) {
      final Route route = MaterialPageRoute(
          builder: (context) =>
              pageContentBuilder(context, arguments: settings.arguments));
      return route;
    } else {
      final Route route = MaterialPageRoute(
          builder: (context) =>
              pageContentBuilder(context)
      );
      return route;
    }
  }
};

main.dart

import 'package:flutter/material.dart';
import 'package:untitled1/routes/Routes.dart';

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

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      //home: Tabs(),
      initialRoute: '/',//初始化的时候加载的路由
      //命名路由传参统一处理
      onGenerateRoute:onGenerateRoute,
      theme: ThemeData(primarySwatch: Colors.cyan),
    );
  }
}

在需要跳转的页面加上需要传递的参数arguments-----SearchPage.dart

import 'package:flutter/material.dart';

class SearchPage extends StatelessWidget {
  final arguments;

  SearchPage({this.arguments});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(this.arguments!=null?arguments['title']:'无参',style: TextStyle(
          color: Colors.amber
        ),),
      ),
      body: Text('搜索页面'),
    );
  }
}

最后Navigator.pushNamed跳转

Home.dart


import 'package:flutter/material.dart';
import 'package:untitled1/Pages/SearchPage.dart';

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: <Widget>[
          RaisedButton(
            child: Text('跳转到搜索页面',style: TextStyle(
              color: Colors.white
            ),),
            onPressed: (){
              Navigator.pushNamed(context, '/Search',arguments: {
                "title":'传递参数'
              });
            },
            color: Theme.of(context).accentColor,
            textTheme: ButtonTextTheme.primary,//文字主题
          )
        ],
      ),
    );
  }
}

猜你喜欢

转载自blog.csdn.net/qq_42572245/article/details/106669780