App navigation example using WidgetsApp

前端 未结 1 760
再見小時候
再見小時候 2020-12-30 11:05

I\'m trying to declare my apps navigation. As I am not using MaterialApp wrapper or styling, all my imports come from package:flutter/widgets.dart.

相关标签:
1条回答
  • 2020-12-30 11:40

    You can use onGenerateRoute property to generate route for widgets app.

    Here is a very minimal implementation of the same:

    import 'package:flutter/widgets.dart';
    
    void main() => runApp(new MyWidgetsApp());
    
    class MyWidgetsApp extends StatelessWidget {
    
      Route generate(RouteSettings settings){
        Route page;
        switch(settings.name){
          case "/":
            page =  new PageRouteBuilder(
                pageBuilder: (BuildContext context,Animation<double> animation,
                    Animation<double> secondaryAnimation){
                  return new Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      const Text("Home Page",textDirection: TextDirection.ltr,),
                      const Padding(padding: const EdgeInsets.all(10.0)),
                      new GestureDetector(
                        onTap: () => Navigator.of(context).pushNamed("/first"),
                        child: new Container(
                          padding: const EdgeInsets.all(10.0),
                          color:Colors.blue,
                          child: const Text("Go to First Page"),
                        ),
                      ),
                      const Padding(padding: const EdgeInsets.all(10.0)),
                      new GestureDetector(
                        onTap: () => Navigator.of(context).pushNamed("/abcd"),
                        child: new Container(
                          padding: const EdgeInsets.all(10.0),
                          color:Colors.blue,
                          child: const Text("Unkown Route"),
                        ),
                      )
                    ],
                  );
                },
                transitionsBuilder: (_, Animation<double> animation, Animation<double> second, Widget child) {
                  return new FadeTransition(
                    opacity: animation,
                    child: new FadeTransition(
                      opacity: new Tween<double>(begin: 1.0, end: 0.0).animate(second),
                      child: child,
                    ),
                  );
                }
            );
            break;
          case "/first":
            page =  new PageRouteBuilder(
                pageBuilder: (BuildContext context,Animation<double> animation,
                    Animation<double> secondaryAnimation){
                  return new Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        const Text("First Page",textDirection: TextDirection.ltr,),
                        const Padding(padding: const EdgeInsets.all(10.0)),
                        new GestureDetector(
                          onTap: () => Navigator.of(context).pop(),
                          child: new Container(
                            padding: const EdgeInsets.all(10.0),
                            color:Colors.blue,
                            child: const Text("Back"),
                          ),
                        )
                      ]
                  );
                },
                transitionsBuilder: (_, Animation<double> animation, Animation<double> second, Widget child) {
                  return new FadeTransition(
                    opacity: animation,
                    child: new FadeTransition(
                      opacity: new Tween<double>(begin: 1.0, end: 0.0).animate(second),
                      child: child,
                    ),
                  );
                }
            );
            break;
        }
        return page;
      }
    
      Route unKnownRoute(RouteSettings settings){
        return new PageRouteBuilder(
            pageBuilder: (BuildContext context,Animation<double> animation,
                Animation<double> secondaryAnimation){
              return new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    const Text("First Page",textDirection: TextDirection.ltr,),
                    const Padding(padding: const EdgeInsets.all(10.0)),
                    new GestureDetector(
                      onTap: () => Navigator.of(context).pop(),
                      child: new Container(
                        padding: const EdgeInsets.all(10.0),
                        color:Colors.blue,
                        child: const Text("Back"),
                      ),
                    )
                  ]
              );
            }
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return new WidgetsApp(
            onGenerateRoute: generate,
            onUnknownRoute: unKnownRoute,
            textStyle: const TextStyle(),
            initialRoute: "/",
            color: Colors.red
        );
      }
    }
    

    Hope that helped!

    0 讨论(0)
提交回复
热议问题