flutter 跳转以及传参,路由分离(三)

编写一个自己的listview的demo


import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class FlistViewPush extends StatefulWidget {
  @override
  __FlistViewPushState createState() => __FlistViewPushState();
}

class __FlistViewPushState extends State<FlistViewPush> {
  var functionLists = [];
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    initData();
  }
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          backgroundColor: Colors.lightBlue,
          title: Text(" 目录"),
        ),
        body: Center(
          child: ListView.builder(
            padding: const EdgeInsets.all(15.0),
            itemCount: functionLists.length,
            itemBuilder: (context, index) {
              var func = functionLists[index];
              return ListTile(
                contentPadding: const EdgeInsets.all(10.0),
                title: Text(
                  "${func["name"]}",
                  style: TextStyle(
                    fontSize: 20,
                    color: Colors.black,
                  ),
                ),
                subtitle: Text(
                  "${func["desc"]}",
                  style: TextStyle(
                    fontSize: 15,
                    color: Colors.grey,
                  ),
                ),
                onTap: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) {
                      return FlistViewPush();
                    }),
                  );
                },
              );
            },
          ),
        ),
      ),
    );
  }

  void initData() {
    functionLists.add({"name": "Text", "desc": "文本显示和样式。"});
    functionLists.add({"name": "Assets、图片、Icons", "desc": "管理assets, 显示图片和Icon。"});
    print(functionLists);
    //更新状态
    setState(() {

    });
  }
}

2.页面传值:

2.1简单的在定义的dart文件写传参类

class FlistViewPush extends StatefulWidget {
  String data = '';
  FlistViewPush({this.data='null'});
  @override
  __FlistViewPushState createState() => __FlistViewPushState(data: data);
}

class __FlistViewPushState extends State<FlistViewPush> {
  var functionLists = [];
  String data = '';
  var da;
  __FlistViewPushState({this.data = 'null'});
@override
  void initState() {
    // TODO: implement initState
    super.initState();
//    da = ModalRoute.of(context)?.settings.arguments;
    initData();

  }
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          backgroundColor: Colors.lightBlue,
          title: Text(" 目录"),
        ),
        body: Center(
          child: ListView.builder(
            padding: const EdgeInsets.all(15.0),
            itemCount: functionLists.length,
            itemBuilder: (context, index) {
              var func = functionLists[index];
              return ListTile(
                contentPadding: const EdgeInsets.all(10.0),
                title: Text(
                  "${func["name"]}",
                  style: TextStyle(
                    fontSize: 20,
                    color: Colors.black,
                  ),
                ),
                subtitle: Text(
                  "${func["desc"]}",
                  style: TextStyle(
                    fontSize: 15,
                    color: Colors.grey,
                  ),
                ),
                onTap: () {
//                  Navigator.push(
//                    context,
//                    MaterialPageRoute(builder: (context) {
//                      return FlistViewPush();
//                    }),
//                  );
                Navigator.pop(context);
                },
              );
            },
          ),
        ),
      ),
    );
  }

  void initData() {
    functionLists.add({"name": "Text", "desc": "文本显示和样式。"});
    functionLists.add({"name": "Assets、图片、Icons", "desc": "管理assets, 显示图片和Icon。"});
    print(functionLists);
    print(data);
//    print(da);
    //更新状态
    setState(() {

    });
  }


}

 Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) {
                      return FlistViewPush(data: '测试',);
                    },
                  ),

2.2 需要分离路由,pushNamed传参数

分离路由:

import 'package:flutter/material.dart';

import '../FlistViewDemo/FlistView.dart';
import '../FlistViewDemo/FlistViewPushPage.dart';
import '../FlistViewDemo/MYDetailPage.dart';
import '../FlistViewDemo/MYUnknownPage.dart';
import '../MYHomePage.dart';

class MYRouter {
  static final Map<String, WidgetBuilder> routes = {
    RandomWords.routeName: (ctx) =>RandomWords(), // 记得在页面里面 声明静态变量 static const String routeName = "/";
    FlistViewPush.routeName: (ctx) => FlistViewPush(),//  声明静态变量 static const String routeName = "/about";
    FMListVC.routeName: (ctx) => FMListVC()//  声明静态变量 static const String routeName = "/about";
  };
  static final String initialRoute = RandomWords.routeName;
  static final RouteFactory generateRoute = (settings) {
    if (settings.name == MYDetailPage.routeName) {
      return MaterialPageRoute(
          builder: (ctx) {
            return MYDetailPage(settings.arguments.toString());
          }
      );
    }
    return null;
  };
  static final RouteFactory unknownRoute = (settings) {
    return MaterialPageRoute(
        builder: (ctx) {
          return MYUnknownPage();
        }
    );
  };
}


RandomWords、FlistViewPush、FMListVC修改为自己的dart
MYDetailPage、MYUnknownPage修改为自己的dart
其中,routes(map对象):是项目的各个页面路由配置
initialRoute:是项目的根路由,初始化的时候最先展示的页面
onGenerateRoute(RouteFactory类型函数):路由拦截判断,可以对某些指定的路由进行拦截,有时候不想改变页面结构,但是又想要求跳转到这个页面的时候可以用到,比如,页面设定了传参你进行跳转的时候。
onUnknownRoute(RouteFactory类型函数):在路由匹配不到的时候用到,一般都返回一个统一的错误页面或404页面

MYUnknownPage.dart文件:

import 'package:flutter/material.dart';


class MYUnknownPage extends StatefulWidget {
  static const String routeName = "/mYUnknownPage";
  @override
  FMHomeState createState() => FMHomeState();
}

class FMHomeState extends State<MYUnknownPage> {

  @override
  void initState() {
    super.initState();

  }


  @override
  Widget build(BuildContext context) {
    // TODO: implement build

    return Container(
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          backgroundColor: Colors.lightBlue,
          title: Text(" 404"),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children:<Widget> [
              Text('404')
            ],
          ),
        ),
      ),

    );
  }
}

在主入口文件main.dart中尽量是做到简洁

void main() => runApp(
    MyApp()
);
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(


      title: 'Startup Name Generator',
      theme:  ThemeData(
        primaryColor: Colors.white,
      ),
      routes: MYRouter.routes,
      initialRoute: MYRouter.initialRoute,
      onGenerateRoute: MYRouter.generateRoute,
      onUnknownRoute: MYRouter.unknownRoute,

    );
  }
}

跳转传入参数

 Navigator.pushNamed(context, "/flistViewPush",arguments: {
                    "id":102,
                  });

接收参数

第一种在initState拿参数可以采用

 Future.delayed(Duration.zero, () {
   Object? message = ModalRoute.of(context)?.settings.arguments ;
      print( message);
    });

第二种 build中取参数

Object? message = ModalRoute.of(context)?.settings.arguments ;
      print( message);

!!!!!路过同志,动动手指点个赞,感谢!!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容