MaterialApp


MaterialApp 將多個經常使用的 Material Design 所需要的 Widget 包裝起來,在這邊定義主題色,及導航路由… 所有的 Widget 都是由 MaterialApp 往下延伸的。
下面介紹 MaterialApp class 的建構子參數:

Home

第一個會使用到的參數就是 Home,將 Widget 放在 Home 裡面,進入 App 的時候,就會進入 Home 定義的 Widget 了。

Routes/initialRoute

當底下的頁面有很多的時候,可以在 MaterialApp 中的 Routes 定義
再利用 Navigator 切換不同的頁面(Route)

第一頁的路由通常是 “/”;
如果是 “/”,initialRoute 則不需要另外設定,因為 Flutter 會自動尋找 “/” 當作 home。
如果定義 initialRoute,需要確定 home 沒有設定,否則將會進入 home 的頁面。


    class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
        return MaterialApp(
            initialRoute: '/',
            routes: {
            '/': (_) =>FirstWidget(),
            '/second':(_) =>SecondWidget(),
            '/third':(_) =>ThirdWidget(),
            //<String, WidgetBuilder>{'/register': (_) => new RegisterPage()}
            },
        );
        }
    }

    //切頁
    Navigator.of(context).pushNamed('/register');

    //切頁 : 傳遞參數
    Navigator.of(context).pushNamed('/register',
        arguments: {'name': 'Raymond'}).then((value) {
        // 新增第二個變數arguments
        showDialog(
            // 新增一個對話框,用來顯示回傳的值
            context: context,
            child: AlertDialog(
            content: Text(value),
            ));
    });

    //接收參數
    dynamic obj = ModalRoute.of(context).settings.arguments;
    name = obj["name"]; // 把接收到的參數存到變數
    Navigator.of(context).pop("Hello ${name}"); // 當按下按鈕會返回上一頁,並回傳內容

Theme

在 theme 參數中,可以設定 App 所有的主題數值,例如背景色,主題色等等…


    class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
        return MaterialApp(
            theme: ThemeData(
                scaffoldBackgroundColor: Colors.lightBlue,
                primaryColor: Colors.lime),
        );
        }
    }
An unhandled error has occurred. Reload 🗙