flutter 卡顿_Flutter WebView 卡顿问题

使用的是官方 webview_flutter 库,感觉 flutter 的 webview 挺多坑的,所以记录一下。

路由切换卡顿

问题:使用 Navigator.of(context).push(...) 路由切换到一个含有 webview 的 page 时,首次渲染会卡顿,这是因为 WebView 第一次构造的时候很慢导致的(也就是看不到了路由切换动画)

一种临时解决方案,在切换动画加载完毕后,再去构造 WebView,这样从用户角度上看,就不会有路由切换动画的卡顿了。class WebViewPage extends StatefulWidget {

final String uri;

WebViewPage({

@required this.uri,

}) : assert(uri != null);

@override

_WebViewPageState createState() => _WebViewPageState();

}

class _WebViewPageState extends State {

WebViewController _controller;

bool _animationCompleted = false;

@override

Widget build(BuildContext context) {

// 主要是下面的代码

var route = ModalRoute.of(context);

if (route != null && !_animationCompleted) {

void handler(status) {

if (status == AnimationStatus.completed) {

route.animation.removeStatusListener(handler);

setState(() {

_animationCompleted = true;

});

}

}

route.animation.addStatusListener(handler);

}

return Scaffold(

title: widget.title,

backgroundColor: Colors.white,

body: _animationCompleted

? WebView(

initialUrl: 'about:blank',

onWebViewCreated: (WebViewController webViewController) {

_controller = webViewController;

_loadHtmlFromAssets();

},

)

: Container(),

);

}

_loadHtmlFromAssets() async {

var uri = Uri.dataFromString(

await rootBundle.loadString(widget.uri),

mimeType: 'text/html',

encoding: Encoding.getByName('utf-8'),

).toString();

_controller.loadUrl(uri);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值