Flutter第一章(Center,Text宽闲,Container众眨,MaterialApp ,Scaffold)

版權(quán)聲明:本文為作者原創(chuàng)書籍容诬。轉(zhuǎn)載請(qǐng)注明作者和出處娩梨,未經(jīng)授權(quán),嚴(yán)禁私自轉(zhuǎn)載览徒,侵權(quán)必究1范ā!吱殉!
情感語錄:歡樂就是堅(jiān)強(qiáng)的發(fā)條掸冤,使永恒的自然循環(huán)不息。在世界的大鐘里面友雳,歡樂是推動(dòng)齒輪的動(dòng)力

大家好稿湿,歡迎來到Flutter專欄。你可能不會(huì)移動(dòng)端開發(fā)押赊,無論會(huì)與不會(huì)都沒關(guān)系饺藤,F(xiàn)lutter專欄將帶你走進(jìn)雙移動(dòng)端的領(lǐng)域包斑。或許你兩端原生開發(fā)都會(huì)涕俗,也會(huì)面對(duì)寫兩套原生代碼的問題罗丰,就算能力足夠,可能留給你的時(shí)間也不夠再姑。能不能一套代碼多平臺(tái)使用呢萌抵?當(dāng)然可以啦!元镀! Google 公司的一偉大創(chuàng)舉Flutter就誕生了绍填,F(xiàn)lutter當(dāng)前正火,在短短的時(shí)間內(nèi)可以說是步步逼近 React Native栖疑,雖然在學(xué)習(xí)成本上 Flutter 遠(yuǎn)高 RN(當(dāng)然看你目前是否掌握相應(yīng)的語言基礎(chǔ))讨永,但在性能上是略勝一籌,它和原生基本無異遇革。Flutter是以后的一個(gè)發(fā)展方向卿闹,為了更好的擁抱未來,所以學(xué)習(xí)Flutter很有必要萝快,要學(xué)好Flutter你得先掌握Dart語言锻霎,如果你沒有Dart語言基礎(chǔ)請(qǐng)先觀看我上期內(nèi)容: 戳這里?《 Flutter大戰(zhàn)前夜之Dart語言(上)》《Flutter大戰(zhàn)前夜之Dart語言(下)》) 兩篇文章帶你輕松入門 Dart 語言基礎(chǔ)杠巡。

本章簡要:

1量窘、Center 居中容器組件

2、Text 文本組件

3氢拥、Container 容器組件

4蚌铜、MaterialApp 和 Scaffold 主題組件

5、簡單的自定組件Widget

有關(guān)Flutter在 Windows 和 Mac 平臺(tái)的環(huán)境搭建介紹:

英文版地址:https://flutter.dev/docs/get-started/install

一嫩海、Flutter 目錄結(jié)構(gòu)介紹

使用你的IDE創(chuàng)建一個(gè)Flutter默認(rèn)工程冬殃,我這里使用的Android Studio,其他開發(fā)工具也是一樣叁怪,結(jié)構(gòu)如下审葬。

image.png

我們著重需要注意一下幾個(gè)文件夾,其他的暫時(shí)不用理會(huì)

文件夾                 作用

android                android 平臺(tái)相關(guān)代碼

ios                    ios 平臺(tái)相關(guān)代碼
    
lib                    flutter 相關(guān)代碼,主要編寫的代碼就在這個(gè)文件夾
    
test                   用于存放測試代碼
    
pubspec.yaml           配置文件奕谭,一般存放一些第三方庫的依賴涣觉。

【溫馨小貼士】 Flutter程序是可以支持 Android 的一級(jí)語言Kotlin 和 IOS 的Swift語言,如果需要原生語言的支持請(qǐng)?jiān)趧?chuàng)建項(xiàng)目的時(shí)候進(jìn)行勾選配置血柳。

默認(rèn)工程代碼官册,去掉注釋大致如下:

    import 'package:flutter/material.dart';

    void main() => runApp(MyApp());

    class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
     }
    }

    class MyHomePage extends StatefulWidget {
    MyHomePage({Key key, this.title}) : super(key: key);
    final String title;

    @override
    _MyHomePageState createState() => _MyHomePageState();
    }

    class _MyHomePageState extends State<MyHomePage> {
    int _counter = 0;

    void _incrementCounter() {
    setState(() {
      _counter++;
    });
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
     }
    }

從上面demo代碼來看,可能有點(diǎn)懵难捌,看不懂沒關(guān)系膝宁,下面分別一點(diǎn)點(diǎn)來介紹鸦难。

二、Flutter 入口文件员淫、入口方法

每一個(gè) flutter 項(xiàng)目的 lib 目錄里面都有一個(gè) main.dart 文合蔽; 它就是 flutter 的入口文件

  void main(){
     runApp(MyApp());
  }
 //也可以簡寫
  void main()=>runApp(MyApp());

其中的 main 方法是 dart 的入口方法。runApp 方法是 flutter 的入口方法介返。MyApp 是自定義的一個(gè)組件,關(guān)鍵字 new 可以不寫拴事,寫成 new MyApp()也沒有錯(cuò),在開發(fā)中常常不寫映皆,當(dāng)然這也看你個(gè)人習(xí)慣挤聘。

三、組件

Flutter的視圖都是通過組件繪制的捅彻,沒有像Android 原生開發(fā)中那樣可以通過xml文件進(jìn)行視圖繪制,習(xí)慣了Android 開發(fā)的同學(xué)對(duì)于這點(diǎn)來說可能很難適應(yīng)鞍陨。

1步淹、Center組件:

你可以看著是一個(gè)窗口視圖,或者說就是當(dāng)前屏幕,當(dāng)然這是取決于父容器的作用范圍诚撵,和自身的大小缭裆,該組件顧名思義就是將子組件放置在自己的中心位置。

2寿烟、Text組件:

這就是一個(gè)文本組件澈驼,用于顯示文本信息,在Android原生中它相當(dāng)于充當(dāng)TextView控件一樣的效果筛武。

下面我們來看一個(gè)例子:

import 'package:flutter/material.dart';
void main(){
  runApp(Center( child: Text(

    "我是一個(gè)文本內(nèi)容", textDirection: TextDirection.ltr, //讓文字從左向右流動(dòng)
  ),
  ));
}

效果如下:

Text組件.png

此時(shí)的Center組件你可以看做就是整個(gè)屏幕缝其,而屏幕中間放了一個(gè)文本組件Text來顯示我們的內(nèi)容。

3徘六、自定義組件:

自定義組件如同原生開發(fā)中一樣繼承View或者ViewGroup類去實(shí)現(xiàn)你自己想要的界面内边,在 Flutter 中自定義組件其實(shí)也是一個(gè)類,這個(gè)類需要繼承 StatelessWidget 或 StatefulWidget待锈。 前期我們都繼承 StatelessWidget漠其。后面會(huì)講到StatefulWidget 的使用。

【StatelessWidget 與 StatefulWidget 二者大致區(qū)分】

StatelessWidget 是無狀態(tài)組件竿音,狀態(tài)不可變的 widget

StatefulWidget 是有狀態(tài)組件和屎,持有的狀態(tài)可能在 widget 生命周期改變

下面我們來簡化下runApp 并給Text組件加點(diǎn)樣式

import 'package:flutter/material.dart';
void main(){
  runApp(MyApp());
}
class MyApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(
        "中文,是世界上最美的語言",
        textDirection: TextDirection.ltr, //讓文字從左向右流動(dòng)

        //添加樣式
        style: TextStyle(
            fontSize: 40.0, //設(shè)置40號(hào)字體
            fontWeight: FontWeight.bold, //加粗
            //設(shè)置字體顏色的三種方式
            // color: Colors.yellow
           //color: Color.fromRGBO(255, 222, 222, 0.5)
             color:Color.fromARGB(22, 255, 118, 18) 
        ),
      ),
    );
  }
}

運(yùn)行起來屏幕會(huì)上顯示我們添加了點(diǎn)文字效果春瞬。需要注意的是Flutter中的這些樣式都是通過命名函數(shù)進(jìn)行配置的柴信,在寫的時(shí)候,一定的和函數(shù)中的名稱一致,不然會(huì)報(bào)錯(cuò)快鱼。

4颠印、MaterialApp 和 Scaffold 組件

① 纲岭、MaterialApp組件
MaterialApp 是一個(gè)方便的 Widget,它封裝了應(yīng)用程序?qū)崿F(xiàn) Material Design 所需要的一些 Widget线罕。一般作為頂層 widget 使用止潮,常用屬性如下:

 home(主頁)
 title(標(biāo)題)
 color(顏色)
 theme(主題)
 routes(路由)

②、Scaffold
Scaffold 是 Material Design 布局結(jié)構(gòu)的基本實(shí)現(xiàn)钞楼。此類提供了用于顯示 drawer喇闸、snackbar 和底部 sheet 的 API。
Scaffold 有下面幾個(gè)主要屬性:

appBar - 顯示在界面頂部的一個(gè) AppBar询件。
body - 當(dāng)前界面所顯示的主要內(nèi)容 Widget燃乍。
drawer - 抽屜菜單控件。

從上面的實(shí)例呆萌來看一點(diǎn)都不美觀宛琅,這里介紹了MaterialApp 和 Scaffold 兩個(gè)組件刻蟹,我們可以輕松實(shí)現(xiàn)像Android 原生開發(fā)中帶有一個(gè)主題和ActionBar的樣式,當(dāng)然這兩個(gè)組件的用法不止下面這么簡單嘿辟,更多的使用會(huì)在后面的章節(jié)實(shí)戰(zhàn)中慢慢拓展舆瘪。

import 'package:flutter/material.dart';

//dart程序入口
void main(){

  //flutter 程序入口
  runApp(MyApp());
}

//自定義組件
class MyApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) {

    return MaterialApp(

      home:Scaffold(

        //設(shè)置標(biāo)題欄
        appBar:AppBar(
            title:Text('呆萌')
        ),
        //設(shè)置內(nèi)容區(qū)域
        body:Content(),
      ),
      //設(shè)置主題色
      theme: ThemeData(
          primarySwatch: Colors.yellow
      ),
    );
  }

}

//自定義的內(nèi)容
class Content extends StatelessWidget{

  @override
  Widget build(BuildContext context) {
    return Center(
        child:Text(
          "中文,是世界上最美的語言",
          textDirection: TextDirection.ltr,////讓文字從左向右流動(dòng)

          style: TextStyle(
            fontSize: 40.0, //設(shè)置40號(hào)字體
            color: Colors.yellow, // 設(shè)置字體顏色
          ),
        )
    );
  }
}

這樣基本實(shí)現(xiàn)了我們?cè)_發(fā)中構(gòu)建默認(rèn)空工程效果樣子红伦,結(jié)果大致如下:


image.png

大致了解Text組件和Container組件的使用英古,下面來詳細(xì)介紹下這兩個(gè)組件中常用的屬性,當(dāng)然這里并未完全列舉出來,這里只是開發(fā)中常用的而已昙读,更多信息需要自己參看源碼或者官方文檔 戳這里 (Text組件) 召调;戳這里 (Container組件)

一、Text組件:
                    
名稱                  功能

textAlign             本對(duì)齊方式(center 居中蛮浑,left 左
                      對(duì)齊唠叛,right 右對(duì)齊,justfy 兩端對(duì)齊)
                      textDirection 文本方向(ltr 從左至右陵吸,rtl 從右至左)
                    
overflow              文字超出屏幕之后的處理方式(clip
                      裁剪玻墅,fade漸隱,ellipsis省略號(hào))
                    
textScaleFactor       字體顯示倍率

maxLines              文字顯示最大行數(shù)

style                 字體的樣式設(shè)置


下面是TextStyle的參數(shù):

名稱                  功能

decoration            文字裝飾線(none 沒有線壮虫,lineThrough 刪
                      除線澳厢,overline 上劃線,underline 下劃線)
                      
decorationColor       文字裝飾線顏色

decorationStyle       文字裝飾線風(fēng)格([dashed,dotted]虛線囚似,
                      double 兩根線剩拢,solid 一根實(shí)線,wavy 波浪
                      線)
                      
wordSpacing           單詞間隙(如果是負(fù)值饶唤,會(huì)讓單詞變得更緊湊)
     
letterSpacing         字母間隙(如果是負(fù)值徐伐,會(huì)讓字母變得更緊湊)

fontStyle             文字樣式(italic 斜體,normal 正常體)

fontSize              文字大小

color                 文字顏色

fontWeight            字體粗細(xì)(bold 粗體募狂,normal 正常體)


二办素、Container組件

名稱                  功能

alignment             topCenter:頂部居中對(duì)齊
                      topLeft:頂部左對(duì)齊
                      topRight:頂部右對(duì)齊
                      center:水平垂直居中對(duì)齊
                      centerLeft:垂直居中水平居左對(duì)齊
                      centerRight:垂直居中水平居右對(duì)齊
                      bottomCenter 底部居中對(duì)齊
                      bottomLeft:底部居左對(duì)齊
                      bottomRight:底部居右對(duì)齊
                      
decoration            decoration:BoxDecoration(   //設(shè)置容器樣式
                          color: Colors.blue,  //Container的整體背景顏色
                          border: Border.all(  //設(shè)置邊框顏色和寬度
                            color: Colors.red,
                            width: 2.0,
                       ),
                       
borderRadius         BorderRadius.all(//設(shè)置邊框四邊都圓角
                         Radius.circular(8.0)
                      )
                     )
margin               margin 屬性是表示Container與外部其他組件的距離角雷。


padding              padding 就是內(nèi)邊距,指Container 邊緣與Child之間的距離

transform            讓 Container進(jìn)行一些位移旋轉(zhuǎn)之類


height               容器高度

width                容器寬度

child                容器子元素

四性穿、本章實(shí)戰(zhàn)

要求:在屏幕中心繪制一個(gè)正方形且讓四邊角進(jìn)行10個(gè)單位的圓角勺三,在中心區(qū)域顯示一段文字,且配置些樣式需曾,如顏色,字體大小和文本穿軸線等吗坚。

import 'package:flutter/material.dart';

//dart入口
void main(){

  //flutter 入口
  runApp(MyApp());
}

//自定義組件
class MyApp extends StatelessWidget{

  //實(shí)現(xiàn)抽象方法
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
        home:Scaffold(

           //導(dǎo)航欄 可以理解是原生中的ActionBar
            appBar: AppBar(

              // 設(shè)置ActionBar 標(biāo)題
                title:Text("呆萌")
            ),
            // 內(nèi)容區(qū)域
            body:HomeContent()
        )
    );
  }
}

class HomeContent extends StatelessWidget{
  @override
  Widget build(BuildContext context) {

    // 此時(shí)的Center 就是整個(gè)屏幕除去狀態(tài)欄和appbar的區(qū)域
    return Center(

      //在Center區(qū)域創(chuàng)建一個(gè)容器 寬高300
      child: Container(
        height: 300.0,
        width: 300.0,

        //設(shè)置容器樣式
        decoration: BoxDecoration(
            //Container的整體背景顏色
            color: Colors.yellow,

            //設(shè)置邊框顏色和寬度
            border: Border.all(
                color: Colors.blue,
                width: 2.0
            ),
            //設(shè)置邊框四邊都圓角10個(gè)單位
            borderRadius: BorderRadius.all(
              Radius.circular(10),
            )
        ),

        //設(shè)置內(nèi)邊距 左上右下都為20
        padding:EdgeInsets.all(20),

        //設(shè)置外邊距 左上右下
        margin: EdgeInsets.fromLTRB(10, 10, 10, 10),

        //按x軸位移100個(gè)單位
//        transform:Matrix4.translationValues(100,0,0),
        //按z軸旋轉(zhuǎn)百分之30
//        transform:Matrix4.rotationZ(0.3),
        //將X對(duì)角線提示到1.2倍長度,既高度不變,寬度會(huì)被拉伸
//         transform:Matrix4.diagonal3Values(1.2, 1, 1),
        //設(shè)置子元素的對(duì)齊方式 居中呆万,既Container 區(qū)域中部
        alignment: Alignment.center,
        //添加一個(gè)子元素
        child: Text(
             //設(shè)置文本內(nèi)容
            '全世界都在說中國話商源,孔夫子的話越來越國際化',
            // 設(shè)置文字左對(duì)齊
            textAlign:TextAlign.left,
            //文本超出長度 后...顯示方法,需要結(jié)合 maxLines使用
            overflow:TextOverflow.ellipsis ,
            // 最大顯示行數(shù)
            maxLines: 2,
            //字體顯示倍率
            textScaleFactor: 1.2,
            //設(shè)置文本樣式
            style:TextStyle(
                //16號(hào)字體
                fontSize: 15.0,
                //文字紅色
                color:Colors.red,
                fontWeight: FontWeight.w800,
                //斜體
                fontStyle: FontStyle.italic,
                //穿軸線
                decoration:TextDecoration.lineThrough,
                //穿軸線顯色
                decorationColor:Colors.black,
                //穿軸線為虛線
                decorationStyle: TextDecorationStyle.dashed,
                //字母間隙(如果是負(fù)值,會(huì)讓字母變得更緊湊)
                letterSpacing: 5.0

            )
        ),
      ),
    );
  }

}

代碼中的備注已經(jīng)有了詳細(xì)介紹谋减,這里就不在描述了牡彻,大致效果如下:


image.png
溫馨提示:常用開發(fā)指令

通過命令行 執(zhí)行flutter run

R 鍵:點(diǎn)擊后熱加載,也就算是重新加載吧出爹。
P 鍵:顯示網(wǎng)格讨便,這個(gè)可以很好的掌握布局情況,工作中很有用以政。
O 鍵:切換android和ios的預(yù)覽模式。
Q 鍵:退出調(diào)試預(yù)覽模式伴找。

【討論:】在Android原生開發(fā)中這么一個(gè)界面只需要在xml布局文件就能很輕松實(shí)現(xiàn)盈蛮,但在Flutter 卻要寫這么大一堆代碼,那么你更喜歡那種方式呢技矮?拋開Flutter能生產(chǎn)IOS應(yīng)用外抖誉,你覺得Flutter中這樣的做法到底有什么好處呢?

開篇文章內(nèi)容并不復(fù)雜也沒有太多可講的內(nèi)容衰倦,只是簡單入門了解袒炉,學(xué)習(xí)時(shí)參照上面案例進(jìn)行多加練習(xí)下即可。本章內(nèi)容到此就結(jié)束了樊零,如有不正歡迎留言指正我磁,如果喜歡可以留下你的小紅心!O(∩_∩)O 謝謝大家的觀看驻襟,下章再會(huì)6峒琛!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沉衣,一起剝皮案震驚了整個(gè)濱河市郁副,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豌习,老刑警劉巖存谎,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔疚,死亡現(xiàn)場離奇詭異,居然都是意外死亡既荚,警方通過查閱死者的電腦和手機(jī)稚失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來固以,“玉大人墩虹,你說我怎么就攤上這事『┝眨” “怎么了诫钓?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長篙螟。 經(jīng)常有香客問我菌湃,道長,這世上最難降的妖魔是什么遍略? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任惧所,我火速辦了婚禮,結(jié)果婚禮上绪杏,老公的妹妹穿的比我還像新娘下愈。我一直安慰自己,他們只是感情好蕾久,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布势似。 她就那樣靜靜地躺著,像睡著了一般僧著。 火紅的嫁衣襯著肌膚如雪履因。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天盹愚,我揣著相機(jī)與錄音栅迄,去河邊找鬼。 笑死皆怕,一個(gè)胖子當(dāng)著我的面吹牛毅舆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播端逼,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼朗兵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顶滩?” 一聲冷哼從身側(cè)響起余掖,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盐欺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赁豆,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年冗美,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魔种。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粉洼,死狀恐怖节预,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情属韧,我是刑警寧澤安拟,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站宵喂,受9級(jí)特大地震影響糠赦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锅棕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一拙泽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裸燎,春花似錦顾瞻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脆炎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氓辣,已是汗流浹背秒裕。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钞啸,地道東北人几蜻。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像体斩,于是被迫代替她去往敵國和親梭稚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容