flutter仿boss直聘,一個比較完整的例子(一)

kimi_he發表於2018-03-14

基於Flutter1.0的最新版本來了,請前往檢視flutter仿BOSS直聘(二),大前端技術實現.

簡介:2年前,RN剛出來時做了個仿拉鉤的demo,react-native-lagou. 這次flutter來了,想感受一下,索性用目前flutter的版本寫的一個仿boss直聘應用。 時間有限,沒完全仿照,去掉了一些功能,但是介面風格一致,有參考價值。

感悟

  1. 與一些文章裡介紹的非常相似,如果會RN,那麼學起來會很快,flutter借鑑了RN的元件化思想,路由機制,狀態機等。
  2. Dart語法有些奇葩,但掌握之後,開發效率會很快,整個demo加起來開發了2天不到。
  3. 可以同時在android和ios執行。
  4. 效能很快,超過RN,因為沒有bridge層。
  5. 還是要多看官方文件和原始碼,才能碰到問題解決。
  6. IDE還不是很友好,hot reload有時無效。
  7. 還是比RN要複雜一些的。

先上效果

img

部署到手機

確保flutter正確安裝之後,進入目錄執行flutter run --release

環境問題

如果flutter環境有問題,在.bash_profile里加上如下內容

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PATH=`pwd`/flutter/bin:$PATH
複製程式碼

涉及技術點

  1. Theme主題設定
      theme: new ThemeData(
        primaryIconTheme: const IconThemeData(color: Colors.white),
        brightness: Brightness.light,
        primaryColor: new Color.fromARGB(255, 0, 215, 198),
        accentColor: Colors.cyan[300],
      )
複製程式碼
  1. 自定義TabBar
     @override
      Widget build(BuildContext context) {
        assert(debugCheckHasMaterial(context));
    
        double height = _kTextAndIconTabHeight;
        Widget label = new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              new Container(
                child: new Image(
                  image: new AssetImage(this.icon),
                  height: 30.0,
                  width: 30.0,
                ),
                margin: const EdgeInsets.only(bottom: _kMarginBottom),
              ),
              _buildLabelText()
            ]
        );
      }
複製程式碼
  1. MD風格及一些元件應用
    new SliverAppBar(
      expandedHeight: _appBarHeight,
      pinned: _appBarBehavior == AppBarBehavior.pinned,
      floating: _appBarBehavior == AppBarBehavior.floating ||
          _appBarBehavior == AppBarBehavior.snapping,
      snap: _appBarBehavior == AppBarBehavior.snapping,
      flexibleSpace: new FlexibleSpaceBar(
        title: new Text(_company.name,
            style: new TextStyle(color: Colors.white)),
        background: new Stack(
          fit: StackFit.expand,
          children: <Widget>[
            new Image.network(
              'https://img.bosszhipin.com/beijin/mcs/chatphoto/20170725/861159df793857d6cb984b52db4d4c9c.jpg',
              fit: BoxFit.cover,
              height: _appBarHeight,
            ),
          ],
        ),
      ),
    )
複製程式碼
  1. 解決了官方demo里路由跳轉效果卡頓的問題
    Navigator.of(context).push(new PageRouteBuilder(
        opaque: false,
        pageBuilder: (BuildContext context, _, __) {
          return new CompanyDetail(company);
        },
        transitionsBuilder: (_, Animation<double> animation, __, Widget child) {
          return new FadeTransition(
            opacity: animation,
            child: new SlideTransition(position: new Tween<Offset>(
              begin: const Offset(0.0, 1.0),
              end: Offset.zero,
            ).animate(animation), child: child),
          );
        }
    ));
複製程式碼

TODO

  1. 下拉篩選元件
  2. mock server,模擬真實請求
  3. 分頁
  4. 目錄結構調整,更符合生產環境
  5. viewpager輪播圖
  6. 路由機制封裝

聯絡方式

微信:heruijun2258,註明來意。

相關文章