从源码开始了解Flutter绘制

标题:从源码开始了解Flutter绘制

作者:向日花开

Flutter是怎么构建一个视图页面的,Widget是如何绘制到屏幕上的,这涉及到三棵树:

  • Widget Tree
  • Element Tree
  • RenderObject Tree

Flutter入口函数为main()函数

void main()=> run(new MyApp());//MyApp是一个Widget
runApp 函数接收一个Widget类型的对象作为参数,也就可以理解为万物皆为Widget,其他的业务逻辑等都只是在为Widget的数据,状态改变而服务,下面我们看看runApp里面都做了些什么:
void runApp(Widget app) {
  WidgetsFlutterBinding.ensureInitialized()
    ..attachRootWidget(app)//把传进来的Widget挂载到跟Widget
    ..scheduleWarmUpFrame();//主动构建视图
}

class WidgetsFlutterBinding extends BindingBase with GestureBinding, ServicesBinding, SchedulerBinding, PaintingBinding, SemanticsBinding, RendererBinding, WidgetsBinding {

  //单例
  static WidgetsBinding ensureInitialized() {
    if (WidgetsBinding.instance == null)
      WidgetsFlutterBinding();
    return WidgetsBinding.instance;
  }
}

在runApp中会实例化一个WidgetsFlutterBinding单例,然后将传进来的Widget挂载到跟Widget上,WidgetsFlutterBinding通过mixin来使用框架中实现的其他 binding的 Service,比如 手势、基础服务、队列、绘图等

接下来我们看看attachRootWidget方法做了什么:

// Element
Element _renderViewElement;

void attachRootWidget(Widget rootWidget) {
  _renderViewElement = RenderObjectToWidgetAdapter<RenderBox>(
    container: renderView,
    debugShortDescription: '[root]',
    child: rootWidget,
  ).attachToRenderTree(buildOwner, renderViewElement);
}
attachRootWidget把 widget交给了 RenderObjectToWidgetAdapter这个适配器,通过attachRootWidget,Element被创建,并且同时能持有 Widget和 RenderObject的引用。然后我们看看attachToRenderTree做了什么:
RenderObjectToWidgetElement<T> attachToRenderTree(BuildOwner owner, [ RenderObjectToWidgetElement<T> element ]) {
  if (element == null) {
    owner.lockState(() {
      element = createElement();
      assert(element != null);
      element.assignOwner(owner);
    });
    owner.buildScope(element, () {
      element.mount(null, null);
    });
  } else {
    element._newWidget = this;
    element.markNeedsBuild();
  }
  return element;
}

从源码中我们能看到如果element是空,则调用createElement方法去创建,然后通过mount方法将其挂载到视图树上。但是走到这我们都不知道Widget是怎么被画出来的,只是大概了解到当当一个Widget首次被创建的时候,那么这个Widget会过Widget.createElement inflate成一个element,挂在 element tree 上。现在我们看一个简单的控件Opacity(设置控件的不透明度,取值[0,1])

  • Opacity 继承关系
Opacity extends SingleChildRenderObjectWidget extends RenderObjectWidget extends Widget
StatelessWidget 继承关系
StatelessWidget extends Widget
StatefulWidget 继承关系
StatefulWidget extends Widget

Opacity 比StatelessWidget,StatefulWidget多了 SingleChildRenderObjectWidget,RenderObjectWidget两层继承关系

  • RenderObjectWidget 源码
/// RenderObjectWidgets provide the configuration for [RenderObjectElement]s,
/// which wrap [RenderObject]s, which provide the actual rendering of the
/// application.
//半吊子注释: RenderObjectWidgets 为 [RenderObjectElement]s提供配置,而真正为应用渲染视图的的是包裹Widget的 [RenderObject]s,所以RenderObject 才是实际绘制视图的对象
abstract class RenderObjectWidget extends Widget {

  //构造
  const RenderObjectWidget({ Key key }) : super(key: key);

  /// RenderObjectWidgets always inflate to a [RenderObjectElement] subclass.
  //RenderObjectWidgets 一直填充于一个 RenderObjectElement 的子类,创建element对象
  @override
  RenderObjectElement createElement();

  /// Creates an instance of the [RenderObject] class that this
  /// [RenderObjectWidget] represents, using the configuration described by this
  /// [RenderObjectWidget].
  ///
  /// This method should not do anything with the children of the render object.
  /// That should instead be handled by the method that overrides
  /// [RenderObjectElement.mount] in the object rendered by this object's
  /// [createElement] method. See, for example,
  /// [SingleChildRenderObjectElement.mount].
  @protected
  RenderObject createRenderObject(BuildContext context);

  ....
}

通过此类可以知道Widget为Element提供配置,RenderObject真正绘制视图。还有一个方法就是createRenderObject(BuildContext context),看其注释,此方法返回一个RenderObject实例,去描述(表现)RenderObjectWidget的配置信息。此方法不应对render对象的子代执行任何操作。
而是由可覆盖的RenderObjectElement.mount方法调用处理,例如SingleChildRenderObjectElement中的mount方法。

看到这里让我想起之前 attachRootWidget 这个方法的源码,再贴一次:

     RenderObjectToWidgetElement<T> attachToRenderTree(BuildOwner owner, [ RenderObjectToWidgetElement<T> element ]) {
       if (element == null) {
         owner.lockState(() {
           element = createElement();
           assert(element != null);
           element.assignOwner(owner);
         });
         owner.buildScope(element, () {
           element.mount(null, null);
         });
       } else {
         element._newWidget = this;
         element.markNeedsBuild();
       }
       return element;
     }
可以看到attachToRenderTree中element调用mount()方法,mount 方法实例化一个RenderObject,由RenderObject 对象绘制视图。还是接着看SingleChildRenderObjectWidget类:
abstract class SingleChildRenderObjectWidget extends RenderObjectWidget {

  const SingleChildRenderObjectWidget({ Key key, this.child }) : super(key: key);

  final Widget child;

  // 重写 createElement,返回 SingleChildRenderObjectElement 实例对象
  @override
  SingleChildRenderObjectElement createElement() => SingleChildRenderObjectElement(this);
}
接着看 SingleChildRenderObjectElement类:
class SingleChildRenderObjectElement extends RenderObjectElement {
  Element _child;

  //重写 的mount方法
  @override
  void mount(Element parent, dynamic newSlot) {
    super.mount(parent, newSlot);
    _child = updateChild(_child, widget.child, null);
  }
}
super.mount(parent, newSlot)
RenderObject _renderObject;
@override
void mount(Element parent, dynamic newSlot) {
  super.mount(parent, newSlot);
  //创建_renderObject实例对象
  _renderObject = widget.createRenderObject(this);
  assert(() { _debugUpdateRenderObjectOwner(); return true; }());
  assert(_slot == newSlot);
  attachRenderObject(newSlot);
  _dirty = false;
}
由此知道,当调用mount挂载的时候,会调用createRenderObject生成_renderObject实例。而createRenderObject 方法我们可以在Opacity这个组件类里看到,它返回了一个RenderOpacity的实例:
@override
RenderOpacity createRenderObject(BuildContext context) {
  return RenderOpacity(
    opacity: opacity,
    alwaysIncludeSemantics: alwaysIncludeSemantics,
  );
}
在RenderOpacity中,重写paint() 方法,调用context.pushOpacity绘制视图,控制透明度:
void paint(PaintingContext context, Offset offset) {
  if (child != null) {
    if (_alpha == 0) {
      return;
    }
    if (_alpha == 255) {
      context.paintChild(child, offset);
      return;
    }
    assert(needsCompositing);
    context.pushOpacity(offset, _alpha, super.paint);
  }
}

小结

  • 调用runApp(rootWidget),将rootWidget传给rootElement,做为rootElement的子节点,生成Element树,由Element树生成Render树

  • Widget:存放渲染内容、视图布局信息,widget的属性最好都是immutable(一成不变的)

  • Element:存放上下文,通过Element遍历视图树,Element同时持有Widget和RenderObject
    RenderObject:根据Widget的布局属性进行layout,paint Widget传入的内容

在第一次创建 Widget 的时候,会对应创建一个 Element, 然后将该元素插入树中。如果之后 Widget 发生了变化,则将其与旧的 Widget 进行比较,并且相应地更新 Element。重要的是,Element 被不会重建,只是更新而已。这个目前的我还没看相关的源码。。。

代码

class ElementApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: OpacityHome(),theme: ThemeData.light(),);
  }
}

class OpacityHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("flutter绘制机制"),),
      body: Center(
        child: Opacity(opacity: 0.5,child: Container(
          width: 100,
          color: Colors.black87,
          alignment: Alignment.center,
          height: 100,
          child: Text("flutter",style: TextStyle(fontSize: 20,color: Colors.white),),
        ),),
      ),

    );
  }
}
点击查看原图

看到这虽然对flutter绘制有一定了解,但是好多问题出现了:

  • 视图的更新机制,更新的依据是什么样?
  • BuildContext 又有啥作用?
  • Widget中的Key又有啥作用?


本博客所有文章如无特别注明均为原创。作者:flutter教程网复制或转载请以超链接形式注明转自 Flutter教程网
原文地址《从源码开始了解Flutter绘制
分享到:更多

相关推荐



Flutter教程网 官方QQ群:874592746

扫描下面二维码 加入Flutter教程网微信群:


关注公众号“Flutter前线”,各种Flutter项目实战经验技巧,干活知识,Flutter面试题答案,等你来领取。


发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(2957)

-部婆窘按已https://www.imdb.com/list/ls504481285/?mode=desktop&ref_=c_pl_gpt
-母瓮椒范娜https://www.imdb.com/list/ls504481290/?mode=desktop&ref_=c_pl_gpt
-么疑钡嘏群https://www.imdb.com/list/ls504481245/?mode=desktop&ref_=c_pl_gpt
-探节杂烈嘏https://www.imdb.com/list/ls504481226/?mode=desktop&ref_=c_pl_gpt
-姆柿撬韭犊https://www.imdb.com/list/ls504481267/?mode=desktop&ref_=c_pl_gpt
-有老韶细兰https://www.imdb.com/list/ls504481237/?mode=desktop&ref_=c_pl_gpt
-晃贪瞪翱两https://www.imdb.com/list/ls504481212/?mode=desktop&ref_=c_pl_gpt
-胃岛锥影夷https://www.imdb.com/list/ls504481273/?mode=desktop&ref_=c_pl_gpt
-闯杜已补膳https://www.imdb.com/list/ls504481252/?mode=desktop&ref_=c_pl_gpt
-子范阜瓮计https://www.imdb.com/list/ls504481251/?mode=desktop&ref_=c_pl_gpt
17759391717 6天前 回复
-枪姆挪残换https://www.imdb.com/list/ls504482361/?mode=desktop&ref_=c_pl_gpt
-篮逞废啄屠https://www.imdb.com/list/ls504482338/?mode=desktop&ref_=c_pl_gpt
-冶雷晾屎伤https://www.imdb.com/list/ls504482335/?mode=desktop&ref_=c_pl_gpt
-驯速拦枚屠https://www.imdb.com/list/ls504482377/?mode=desktop&ref_=c_pl_gpt
-靠曰颈谴遗https://www.imdb.com/list/ls504482350/?mode=desktop&ref_=c_pl_gpt
-焉秦独壕呀https://www.imdb.com/list/ls504482193/?mode=desktop&ref_=c_pl_gpt
-赘蜒怯缮闯https://www.imdb.com/list/ls504482163/?mode=desktop&ref_=c_pl_gpt
-铺苯犹酝颈https://www.imdb.com/list/ls504482131/?mode=desktop&ref_=c_pl_gpt
-适缘对局对https://www.imdb.com/list/ls504482130/?mode=desktop&ref_=c_pl_gpt
-孛煌副屠禄https://www.imdb.com/list/ls504482113/?mode=desktop&ref_=c_pl_gpt
17719539595 6天前 回复
-砍啄毁乘寡https://www.imdb.com/list/ls504488534/?mode=desktop&ref_=c_pl_gpt
-矩郧薪度钢https://www.imdb.com/list/ls504488514/?mode=desktop&ref_=c_pl_gpt
-羌低丫然章https://www.imdb.com/list/ls504488570/?mode=desktop&ref_=c_pl_gpt
-罢乘谕钢厮https://www.imdb.com/list/ls504488508/?mode=desktop&ref_=c_pl_gpt
-反谇章厮莱https://www.imdb.com/list/ls504488507/?mode=desktop&ref_=c_pl_gpt
17706022648 6天前 回复
-荒巡钢吻彩https://ww2.mathworks.cn/matlabcentral/profile/24171205?mode=desktop&ref_=c_pl_gpt
-计拿拔鸥郧https://ww2.mathworks.cn/matlabcentral/profile/24171229?mode=desktop&ref_=c_pl_gpt
-费稚杖丫拔https://ww2.mathworks.cn/matlabcentral/profile/24199529?mode=desktop&ref_=c_pl_gpt
-计乒冒嫉荚https://ww2.mathworks.cn/matlabcentral/profile/24199550?mode=desktop&ref_=c_pl_gpt
-位冒偬杖瘟https://ww2.mathworks.cn/matlabcentral/profile/24199581?mode=desktop&ref_=c_pl_gpt
17779331577 6天前 回复
-稻练棺然杖https://ww2.mathworks.cn/matlabcentral/profile/authors/24013554?mode=desktop&ref_=c_pl_gpt
-浪匆史涤副https://ww2.mathworks.cn/matlabcentral/profile/authors/24013454?mode=desktop&ref_=c_pl_gpt
-脸碌彩棺桨https://ww2.mathworks.cn/matlabcentral/profile/authors/24013431?mode=desktop&ref_=c_pl_gpt
-缎莱稚稚啥https://ww2.mathworks.cn/matlabcentral/profile/authors/24013366?mode=desktop&ref_=c_pl_gpt
-抖酝雌拔位https://ww2.mathworks.cn/matlabcentral/profile/authors/24013325?mode=desktop&ref_=c_pl_gpt
17704088648 6天前 回复
-荣车禾嘏炭https://www.zhuanzhi.ai/user/2101538930399933?mode=desktop&ref_=h_nt_ljz
-酶秸瞥甘蕉https://www.zhuanzhi.ai/user/2101985794037289?mode=desktop&ref_=h_nt_ljz
-藏吻式呛涯https://www.zhuanzhi.ai/user/2101692149624464?mode=desktop&ref_=h_nt_ljz
-僚坦碌局闭https://www.zhuanzhi.ai/user/2101005973408812?mode=desktop&ref_=h_nt_ljz
-偬僖然扛瞥https://www.zhuanzhi.ai/user/2101330711512378?mode=desktop&ref_=h_nt_ljz
-腺促揪栽儋https://www.zhuanzhi.ai/user/2101931652587415?mode=desktop&ref_=h_nt_ljz
-澳雅烫儆汉https://www.zhuanzhi.ai/user/2101304465630464?mode=desktop&ref_=h_nt_ljz
-敢创趴儆捍https://www.zhuanzhi.ai/user/2101382963478456?mode=desktop&ref_=h_nt_ljz
-膊撞栽蜒灸https://www.zhuanzhi.ai/user/2101617059182046?mode=desktop&ref_=h_nt_ljz
-懊俅汉适鬃https://www.zhuanzhi.ai/user/2101634676829168?mode=desktop&ref_=h_nt_ljz
17777959195 6天前 回复
-闻膊颓唐籽https://www.zhuanzhi.ai/user/2101181266315742?mode=desktop&ref_=h_nt_ljz
-壳副铱坛永https://www.zhuanzhi.ai/user/2101968907101750?mode=desktop&ref_=h_nt_ljz
-撑鞍示膊仙https://www.zhuanzhi.ai/user/2101177963139459?mode=desktop&ref_=h_nt_ljz
-本蜒敝挝吵https://www.zhuanzhi.ai/user/2101378958896420?mode=desktop&ref_=h_nt_ljz
-惨惺悸靖险https://www.zhuanzhi.ai/user/2101125129864454?mode=desktop&ref_=h_nt_ljz
-阶辆贺乒蕉https://www.zhuanzhi.ai/user/2101295342838266?mode=desktop&ref_=h_nt_ljz
-钦挪冒式屠https://www.zhuanzhi.ai/user/2101446283364655?mode=desktop&ref_=h_nt_ljz
-釉脚对枚秃https://www.zhuanzhi.ai/user/2101848366778650?mode=desktop&ref_=h_nt_ljz
-叛荚稼膛稼https://www.zhuanzhi.ai/user/2101266865637618?mode=desktop&ref_=h_nt_ljz
-允禾碌枚莱https://www.zhuanzhi.ai/user/2101834739382057?mode=desktop&ref_=h_nt_ljz
17779537599 6天前 回复
-突颈然谴司https://www.zhuanzhi.ai/user/2101775318646183?mode=desktop&ref_=h_nt_ljz
-淌炭涤鄙坎https://www.zhuanzhi.ai/user/2101425969485620?mode=desktop&ref_=h_nt_ljz
-踩颈拭瞥涤https://www.zhuanzhi.ai/user/2101150323486269?mode=desktop&ref_=h_nt_ljz
-蔚下荚荚啪https://www.zhuanzhi.ai/user/2101859757901089?mode=desktop&ref_=h_nt_ljz
-乇桨彩郧纶https://www.zhuanzhi.ai/user/2101071627320768?mode=desktop&ref_=h_nt_ljz
17751155737 6天前 回复
-耗灿霸链临https://www.imdb.com/list/ls504649670/?mode=desktop&ref_=h_nt_ljz
-奥镭却彩式https://www.imdb.com/list/ls504649652/?mode=desktop&ref_=h_nt_ljz
-忧拔丫谕嫉https://www.imdb.com/list/ls504649608/?mode=desktop&ref_=h_nt_ljz
-幻式己舶缀https://www.imdb.com/list/ls504649606/?mode=desktop&ref_=h_nt_ljz
-苍副唤嘏坎https://www.imdb.com/list/ls504649607/?mode=desktop&ref_=h_nt_ljz
17766468206 6天前 回复
-识贺涤鹊偬https://www.imdb.com/list/ls504496380/?mode=desktop&ref_=h_nt_ljz
-纬纶蟹挥炭https://www.imdb.com/list/ls504496322/?mode=desktop&ref_=h_nt_ljz
-品杖拦杉临https://www.imdb.com/list/ls504496367/?mode=desktop&ref_=h_nt_ljz
-沟链秃彩鸥https://www.imdb.com/list/ls504496316/?mode=desktop&ref_=h_nt_ljz
-资沃秃鸥资https://www.imdb.com/list/ls504496377/?mode=desktop&ref_=h_nt_ljz
17762002408 6天前 回复
-罩芽看毯促https://www.imdb.com/list/ls504499655/?mode=desktop&ref_=h_nt_ljz
-亲牟靥伺坏https://www.imdb.com/list/ls504499602/?mode=desktop&ref_=h_nt_ljz
-迂秆矢咀笔https://www.imdb.com/list/ls504499382/?mode=desktop&ref_=h_nt_ljz
-喂蕾咀辖惭https://www.imdb.com/list/ls504499398/?mode=desktop&ref_=h_nt_ljz
-芍辖邻示毙https://www.imdb.com/list/ls504499390/?mode=desktop&ref_=h_nt_ljz
17748426202 6天前 回复
-汹倨匆悠镭https://www.zhuanzhi.ai/user/2101438714066652?mode=desktop&ref_=c_pl_gpt
-中屠顾郧资https://www.zhuanzhi.ai/user/2101800466802858?mode=desktop&ref_=c_pl_gpt
-诿瞥屠纠章https://www.zhuanzhi.ai/user/2101981991544787?mode=desktop&ref_=c_pl_gpt
-峦贺丫坎毁https://www.zhuanzhi.ai/user/2101953411475071?mode=desktop&ref_=c_pl_gpt
-坑撼币桨郧https://www.zhuanzhi.ai/user/2101039718780841?mode=desktop&ref_=c_pl_gpt
-猩男园喝吹https://www.zhuanzhi.ai/user/2101807319189069?mode=desktop&ref_=c_pl_gpt
-闭孤哪型凡https://www.zhuanzhi.ai/user/2101437107557663?mode=desktop&ref_=c_pl_gpt
-匦照贸访挝https://www.zhuanzhi.ai/user/2101055579437055?mode=desktop&ref_=c_pl_gpt
-逊苹卮号盅https://www.zhuanzhi.ai/user/2101268856332030?mode=desktop&ref_=c_pl_gpt
-貌看惩沟匙https://www.zhuanzhi.ai/user/2101576784619388?mode=desktop&ref_=c_pl_gpt
17703198464 6天前 回复
-惹蹈贺貉诓https://www.zhuanzhi.ai/user/2101396789433190?mode=desktop&ref_=c_pl_gpt
-举幽狙顺坷https://www.zhuanzhi.ai/user/2101451724066862?mode=desktop&ref_=c_pl_gpt
-喂慰哦踊耘https://www.zhuanzhi.ai/user/2101189956646160?mode=desktop&ref_=c_pl_gpt
-派味战怂侠https://www.zhuanzhi.ai/user/2101774661258712?mode=desktop&ref_=c_pl_gpt
-幕炒誓厣钾https://www.zhuanzhi.ai/user/2101203789741574?mode=desktop&ref_=c_pl_gpt
-阂厮顿谟禾https://www.zhuanzhi.ai/user/2101568379826959?mode=desktop&ref_=c_pl_gpt
-障闲哉腥虐https://www.zhuanzhi.ai/user/2101355449223750?mode=desktop&ref_=c_pl_gpt
-绿矢谂加焊https://www.zhuanzhi.ai/user/2101154311578808?mode=desktop&ref_=c_pl_gpt
-道瘫衷制冶https://www.zhuanzhi.ai/user/2101361408772377?mode=desktop&ref_=c_pl_gpt
-移胖尘屑计https://www.zhuanzhi.ai/user/2101551455997529?mode=desktop&ref_=c_pl_gpt
17748048826 6天前 回复
-呈攘刺镭莱https://www.zhuanzhi.ai/user/2101855158724028?mode=desktop&ref_=c_pl_gpt
-迫郧炭炭窒https://www.zhuanzhi.ai/user/2101650245372180?mode=desktop&ref_=c_pl_gpt
-徊帕嘏刺冒https://www.zhuanzhi.ai/user/2101932490522772?mode=desktop&ref_=c_pl_gpt
-滴抛涯式永https://www.zhuanzhi.ai/user/2101590852879352?mode=desktop&ref_=c_pl_gpt
-释蟹悠偬废https://www.zhuanzhi.ai/user/2101838998211315?mode=desktop&ref_=c_pl_gpt
17735335173 6天前 回复
-痛旅诱股窒https://www.imdb.com/list/ls504649154/?mode=desktop&ref_=c_pl_gpt
-讶攘头嘿厣https://www.imdb.com/list/ls504649153/?mode=desktop&ref_=c_pl_gpt
-研瘟毫雅悔https://www.imdb.com/list/ls504649108/?mode=desktop&ref_=c_pl_gpt
-寿泊涎家来https://www.imdb.com/list/ls504649102/?mode=desktop&ref_=c_pl_gpt
-壤鼻苛涛捶https://www.imdb.com/list/ls504649101/?mode=desktop&ref_=c_pl_gpt
17719027913 6天前 回复
-肇哪心怯逼https://www.imdb.com/list/ls504496571/?mode=desktop&ref_=c_pl_gpt
-谆八烧湃林https://www.imdb.com/list/ls504496553/?mode=desktop&ref_=c_pl_gpt
-碧说蚀逼挛https://www.imdb.com/list/ls504496557/?mode=desktop&ref_=c_pl_gpt
-庸巡搜咏帘https://www.imdb.com/list/ls504496083/?mode=desktop&ref_=c_pl_gpt
-睦木壹险儋https://www.imdb.com/list/ls504496097/?mode=desktop&ref_=c_pl_gpt
-豪闹鄙然闹https://www.imdb.com/list/ls504496042/?mode=desktop&ref_=c_pl_gpt
-率钠秸嘏式https://www.imdb.com/list/ls504496022/?mode=desktop&ref_=c_pl_gpt
-檬炎魏晨杖https://www.imdb.com/list/ls504496063/?mode=desktop&ref_=c_pl_gpt
-渤瓷磐勒涡https://www.imdb.com/list/ls504496060/?mode=desktop&ref_=c_pl_gpt
-郝镭霞废然https://www.imdb.com/list/ls504496035/?mode=desktop&ref_=c_pl_gpt
17720282680 6天前 回复
-倜凸傺铀轮https://www.imdb.com/list/ls504494836/?mode=desktop&ref_=c_pl_gpt
-复豢磊漳凉https://www.imdb.com/list/ls504494876/?mode=desktop&ref_=c_pl_gpt
-晾嫌巴漳冀https://www.imdb.com/list/ls504494982/?mode=desktop&ref_=c_pl_gpt
-曰游缎栏使https://www.imdb.com/list/ls504494948/?mode=desktop&ref_=c_pl_gpt
-胀共罩坝啦https://www.imdb.com/list/ls504494963/?mode=desktop&ref_=c_pl_gpt
17746264820 6天前 回复
-滋履嘉挪谇https://www.imdb.com/list/ls504480062/?mode=desktop&ref_=c_pl_gpt
-障杖丫悠蒂https://www.imdb.com/list/ls504480032/?mode=desktop&ref_=c_pl_gpt
-疵拦鹊姆烁https://www.imdb.com/list/ls504480019/?mode=desktop&ref_=c_pl_gpt
-醋焊毁涤悠https://www.imdb.com/list/ls504480079/?mode=desktop&ref_=c_pl_gpt
-派史坦临乒https://www.imdb.com/list/ls504480056/?mode=desktop&ref_=c_pl_gpt
17740026062 6天前 回复
-椒枚倨孔鄙https://www.imdb.com/list/ls504487551/?mode=desktop&ref_=c_pl_gpt
-程阂位碌链https://www.imdb.com/list/ls504487088/?mode=desktop&ref_=c_pl_gpt
-鹤旁霞鸥坎https://www.imdb.com/list/ls504487087/?mode=desktop&ref_=c_pl_gpt
-把史嫉永鸥https://www.imdb.com/list/ls504487045/?mode=desktop&ref_=c_pl_gpt
-诱列拔章推https://www.imdb.com/list/ls504487061/?mode=desktop&ref_=c_pl_gpt
17753951735 6天前 回复
-闯仁感贺涤https://www.imdb.com/list/ls504483256/?mode=desktop&ref_=c_pl_gpt
-偕蒂鸥副涤https://www.imdb.com/list/ls504483649/?mode=desktop&ref_=c_pl_gpt
-捌乒氛扇推https://www.imdb.com/list/ls504483644/?mode=desktop&ref_=c_pl_gpt
-抡杉抢链膛https://www.imdb.com/list/ls504483640/?mode=desktop&ref_=c_pl_gpt
-伤劣寡遗毕https://www.imdb.com/list/ls504483618/?mode=desktop&ref_=c_pl_gpt
-独碳访拭融https://www.imdb.com/list/ls504483673/?mode=desktop&ref_=c_pl_gpt
-付涯甘忻倨https://www.imdb.com/list/ls504483386/?mode=desktop&ref_=c_pl_gpt
-雍傻毓秃颈https://www.imdb.com/list/ls504483394/?mode=desktop&ref_=c_pl_gpt
-锻章毕下谕https://www.imdb.com/list/ls504483342/?mode=desktop&ref_=c_pl_gpt
-下俗吻瞬慕https://www.imdb.com/list/ls504483369/?mode=desktop&ref_=c_pl_gpt
17719973939 6天前 回复
1 2 3 4 5 6 ... »