国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flutter開發(fā)實(shí)戰(zhàn)-常用的路由Route配置

這篇具有很好參考價(jià)值的文章主要介紹了flutter開發(fā)實(shí)戰(zhàn)-常用的路由Route配置。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

flutter開發(fā)實(shí)戰(zhàn)-常用的路由Route配置

路由(Route)在移動(dòng)開發(fā)中通常指頁面(Page),這跟 Web 開發(fā)中單頁應(yīng)用的 Route 概念意義是相同的,Route 在 Android中 通常指一個(gè) Activity,在 iOS 中指一個(gè) ViewController。所謂路由管理,就是管理頁面之間如何跳轉(zhuǎn),通常也可被稱為導(dǎo)航管理。Flutter 中的路由管理和原生開發(fā)類似,無論是 Android 還是 iOS,導(dǎo)航管理都會維護(hù)一個(gè)路由棧,路由入棧(push)操作對應(yīng)打開一個(gè)新頁面,路由出棧(pop)操作對應(yīng)頁面關(guān)閉操作,而路由管理主要是指如何來管理路由棧。

這段來自:https://book.flutterchina.club/chapter2/flutter_router.html#_2-4-1-%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%A4%BA%E4%BE%8B

下面記錄一下本人常使用的路由設(shè)置。

一、配置router_manager

// 定義各個(gè)頁面的路由name
class RouterName {
  // 隱私統(tǒng)一
  static const String agreement = 'agreement';

  // 啟動(dòng)頁廣告
  static const String splash = 'splash';

  // tab
  static const String tab = '/';

  // 用戶profile
  static const String profilePage = 'profilePage';
}

通過頁面跳轉(zhuǎn),經(jīng)常使用的是PageRouteBuilder,這里自定義幾個(gè)常用的PageRouteBuilder

class NoAnimRouteBuilder extends PageRouteBuilder {
  final Widget page;

  NoAnimRouteBuilder(this.page)
      : super(
      opaque: false,
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: Duration(milliseconds: 0),
      transitionsBuilder:
          (context, animation, secondaryAnimation, child) => child);
}

class FadeRouteBuilder extends PageRouteBuilder {
  final Widget page;

  FadeRouteBuilder(this.page)
      : super(
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: Duration(milliseconds: 500),
      transitionsBuilder: (context, animation, secondaryAnimation,
          child) =>
          FadeTransition(
            opacity: Tween(begin: 0.1, end: 1.0).animate(CurvedAnimation(
              parent: animation,
              curve: Curves.fastOutSlowIn,
            )),
            child: child,
          ));
}

class SlideTopRouteBuilder extends PageRouteBuilder {
  final Widget page;

  SlideTopRouteBuilder(this.page)
      : super(
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: Duration(milliseconds: 800),
      transitionsBuilder:
          (context, animation, secondaryAnimation, child) =>
          SlideTransition(
            position: Tween<Offset>(
                begin: Offset(0.0, -1.0), end: Offset(0.0, 0.0))
                .animate(CurvedAnimation(
                parent: animation, curve: Curves.fastOutSlowIn)),
            child: child,
          ));
}

class SizeRoute extends PageRouteBuilder {
  final Widget page;

  SizeRoute(this.page)
      : super(
    pageBuilder: (context, animation, secondaryAnimation) => page,
    transitionDuration: Duration(milliseconds: 300),
    transitionsBuilder: (context, animation, secondaryAnimation, child) =>
//                Align(
//                  child: SizeTransition(child: child, sizeFactor: animation),
//                ),
    ScaleTransition(
      scale: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
          parent: animation, curve: Curves.fastOutSlowIn)),
      child: child,
    ),
  );
}

通過頁面跳轉(zhuǎn),iOS效果的跳轉(zhuǎn)效果是CupertinoPageRoute,使用CupertinoPageRoute子類

// 通過裁剪去除頁面的shadow

class MyCupertinoPageRoute<T> extends CupertinoPageRoute {
  MyCupertinoPageRoute({
    required WidgetBuilder builder,
    RouteSettings? settings,
  }) : super(builder: builder, settings: settings);

  
  bool get barrierDismissible => true;

  
  Color? get barrierColor => ColorUtil.hexColor(0x000000, alpha: 0.2);

  
  // A relatively rigorous eyeball estimation.
  Duration get transitionDuration => const Duration(milliseconds: 450);

  
  Widget buildTransitions(BuildContext context, Animation<double> animation,
      Animation<double> secondaryAnimation, Widget child) {
    // 通過裁剪去除頁面的shadow
    return ClipRRect(
      clipBehavior: Clip.hardEdge,
      child:
          super.buildTransitions(context, animation, secondaryAnimation, child),
    );
  }
}

實(shí)現(xiàn)settings.name的不同name對應(yīng)不同的頁面Route

class RouterManager {
  // ignore: missing_return
  static Route<dynamic> generateRoute(RouteSettings settings) {
    print("generateRoute: ${settings}, name:${settings.name}");
    switch (settings.name) {
      case RouterName.home:
        {
          return NoAnimRouteBuilder(const MyHomePage(
            title: "home",
          ));
        }
        break;

      case RouterName.login:
        {
          return NoAnimRouteBuilder(const LoginPage(
            title: "LoginPage",
          ));
        }
        break;

      case RouterName.profilePage:
        {
          return MyCupertinoPageRoute(
            builder: (_) => PersonProfilePage(
              arguments: settings.arguments,	// 傳遞的參數(shù)
            ),
          );
        }
        break;


      default:
        return NoAnimRouteBuilder(const MyHomePage(
          title: "home",
        ));
    }
  }
}

二、在入口main的MaterialApp使用router_manager

return MaterialApp(
      theme: ThemeData(
        fontFamily: "PingFang SC",
        primarySwatch: themeModel.theme,
      ),
      debugShowCheckedModeBanner: false,
      supportedLocales: S.delegate.supportedLocales,
      locale: localeModel.getLocale(),
	// 設(shè)置route
      onGenerateRoute: RouterManager.generateRoute,
      navigatorObservers: buildObservers(),
      localizationsDelegates: const [
        S.delegate,
        RefreshLocalizations.delegate, //下拉刷新
        GlobalCupertinoLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate
      ],
      localeResolutionCallback: (_locale, supportedLocales) {
        if (localeModel.getLocale() != null) {
          //如果已經(jīng)選定語言,則不跟隨系統(tǒng)
          return localeModel.getLocale();
        } else {
          //跟隨系統(tǒng)
          print("_locale:${_locale}");
          Locale locale;
          if (supportedLocales.contains(_locale)) {
            locale = _locale!;
          } else {
            //如果系統(tǒng)語言不是中文簡體或美國英語,則默認(rèn)使用美國英語
            locale = Locale('en', 'US');
          }
          return locale;
        }
      },
    );
  }

三、路由頁面跳轉(zhuǎn)

配置之后就可以使用了,使用的示例-路由頁面跳轉(zhuǎn)示例

// 進(jìn)入個(gè)人信息
  void enterMyProfilePage() {
    dynamic obj = widget.arguments;
    if (widget.arguments != null && widget.arguments is Map) {
      NavigatorRoute.push(RouterName.profilePage, arguments: obj);
    }
  }

四、小結(jié)

flutter開發(fā)實(shí)戰(zhàn)-常用的路由Route配置,主要實(shí)現(xiàn)配置路由,PageRouteBuilder、MaterialApp中設(shè)置onGenerateRoute,最后使用NavigatorRoute.push進(jìn)行頁面跳轉(zhuǎn),頁面?zhèn)鲄?shù)。

學(xué)習(xí)記錄,每天不停進(jìn)步。文章來源地址http://www.zghlxwxcb.cn/news/detail-545049.html

到了這里,關(guān)于flutter開發(fā)實(shí)戰(zhàn)-常用的路由Route配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • route、ip route添加刪除路由表命令,路由表永久化設(shè)置

    學(xué)習(xí)linux筆記小實(shí)踐一 route 與 ip route的使用 route 與 ip route www.baidu.com 14.119.104.189 add ps:gw、via指自己的網(wǎng)關(guān)地址 del default 在/etc/sysconfig/network-scripts/route-ens33配置文件中添加語句 或 以下方法: 1)在/etc/rc.local里添加 方法: route add -net 192.168.3.0/24 dev eth0 route add -net 192.168.2.0/2

    2024年02月04日
    瀏覽(22)
  • ip route 路由命令詳解

    (523條消息) ip route 命令詳解_thj_blog的博客-CSDN博客_ip route命令詳解 Linux如何查看網(wǎng)關(guān)地址 - study_goup - 博客園 (cnblogs.com) 添加路由192.20.30.0/24網(wǎng)段走eth0網(wǎng)卡 ip route add 192.20.30.0/24 dev eth0 table local Linux下ip route、ip rule、iptables的關(guān)系(轉(zhuǎn)) - EasonJim - 博客園 (cnblogs.com) (608條消息) i

    2023年04月09日
    瀏覽(17)
  • React Route5 路由

    ?? React Route5 路由??專欄:React ??個(gè)人主頁:繁星學(xué)編程?? ??個(gè)人簡介:一個(gè)不斷提高自我的平凡人?? ??分享方向:目前主攻前端,其他知識也會階段性分享?? ??格言:??沒有走不通的路,只有不敢走的人!?? ??讓我們一起進(jìn)步,一起成為更好的自己?。?!??

    2024年02月15日
    瀏覽(16)
  • Linux(三)---------網(wǎng)絡(luò)路由命令(route路由命令)

    Linux(三)---------網(wǎng)絡(luò)路由命令(route路由命令)

    計(jì)算機(jī)之間的數(shù)據(jù)傳輸必須經(jīng)過網(wǎng)絡(luò),網(wǎng)絡(luò)可以直接兩臺計(jì)算機(jī),也可以通過一個(gè)一個(gè)的節(jié)點(diǎn)去連接。路由可以理解為互聯(lián)網(wǎng)的中轉(zhuǎn)站,網(wǎng)絡(luò)中的數(shù)據(jù)包就是通過一個(gè)一個(gè)的路由器轉(zhuǎn)發(fā)到目的地的。 ?路由分類學(xué)習(xí): 路由分為靜態(tài)和動(dòng)態(tài)路由 linux機(jī)器上配置的都是靜態(tài)路由,

    2024年02月14日
    瀏覽(22)
  • 老杜Vue筆記⑥ 路由route

    老杜Vue筆記⑥ 路由route

    動(dòng)力節(jié)點(diǎn)vue2+3視頻課程 傳統(tǒng)web應(yīng)用 傳統(tǒng)web應(yīng)用,又叫做多頁面web應(yīng)用:核心是一個(gè)web站點(diǎn)由多個(gè)HTML頁面組成,點(diǎn)擊時(shí)完成頁面的切換,因?yàn)槭乔袚Q到新的HTML頁面上,所以當(dāng)前頁面會全部刷新。 單頁面web應(yīng)用(SPA:Single Page web Application) 整個(gè)網(wǎng)站只有一個(gè)HTM頁面,點(diǎn)擊時(shí)只

    2023年04月22日
    瀏覽(15)
  • 第五十五回:命名路由(Route)

    我們在上一章回中介紹了BoxDecoration Widget相關(guān)的內(nèi)容,本章回中將介紹命名路由(Route).閑話休提,讓我們一起Talk Flutter吧。 我們在這里介紹的命名路由是路由(Route)中的一種,主要用來當(dāng)作導(dǎo)航,通過導(dǎo)航跳轉(zhuǎn)到不同的頁面,它和我們前面章回中介紹的路由類似,只不過是給路由

    2024年02月09日
    瀏覽(22)
  • 【Vue】Vue-route路由

    Vue-router官網(wǎng) 由vue-router模塊控制,需要額外安裝依賴。參考官網(wǎng) router-link:路由鏈接,跳轉(zhuǎn)至路由視圖,展示指定路由組件信息 router-view:路由視圖,展示路由組件信息 route:路由信息 router:路由對象 router-link 路由跳轉(zhuǎn),類似a標(biāo)簽,路由跳轉(zhuǎn)作用 router-view 路由視圖,用于其

    2023年04月22日
    瀏覽(21)
  • route命令 路由表 Linux Centos

    route route 命令在Linux中被用于顯示和操縱IP路由表。然而,現(xiàn)在大部分Linux發(fā)行版都推薦使用 ip route 命令代替 route ,因?yàn)?ip route 提供更多的功能和更靈活的控制。 以下是 route 命令的基本用法: 查看路由表 : route -n 這個(gè)命令顯示當(dāng)前機(jī)器的路由表。 -n 標(biāo)志意味著數(shù)字形式的網(wǎng)

    2024年02月04日
    瀏覽(17)
  • 路由vue-route的使用

    路由vue-route的使用

    path:配置路由訪問的路徑 name:給路由起名字(命名路由) component:訪問路由時(shí),渲染的組件 App.vue 這個(gè)是vue-route里面提供的組件 作用:路由的出口 舉例:當(dāng)我訪問根路由時(shí)會渲染IndexView.vue組件 IndexView.vue中的內(nèi)容 而IndexView.vue中的內(nèi)容會在根組件下的 router-view/ 中展示 推

    2024年01月16日
    瀏覽(21)
  • route命令行查看或者修改默認(rèn)路由

    route命令行查看或者修改默認(rèn)路由

    route print命令 打開CMD,輸入route print,就可以查看我們計(jì)算機(jī)的路由表,如圖 看第一項(xiàng)0.0.0.0的網(wǎng)關(guān)為192.168.1.1,說明我們計(jì)算機(jī)的網(wǎng)關(guān)為192.168.1.1,如果我們刪除自己的網(wǎng)關(guān),計(jì)算機(jī)還能正常運(yùn)行嗎?如圖 我們來看目前的網(wǎng)絡(luò)連接狀態(tài): 可以看到目前是:無網(wǎng)絡(luò)訪問權(quán)限,也

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包