詳情裏面是hemlt和圖片組成的,可是flutter是不支持html的因此須要其餘插件html
flutter webview plugin:這個不太好用git
flutter_html:用這個插件github
在加載詳情頁面的時候,控制檯輸出報錯了。web
須要用的到異步的處理app
provide/details_info.dart類的方法:getGoodsInfoless
https://github.com/Sub6Resources/flutter_html異步
視頻和iframe標籤目前不支持async
添加引用:ide
flutter_html: ^0.9.6
開了上網工具 下載也仍是比較慢的函數
新建details_web.dart頁面。把details_tabbar.dart裏面的導入的包引入進來。
import 'package:flutter/material.dart'; import 'package:provide/provide.dart'; import '../../provide/details_info.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
引入HTML的插件。直接輸入html就出出現提示了。
引入html的widget
import './details_page/details_web.dart';
而後調用
咱們的詳情就已經出來了
details_page/details_web.dart
import 'package:flutter/material.dart'; import 'package:provide/provide.dart'; import '../../provide/details_info.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_html/flutter_html.dart'; class DetailsWeb extends StatelessWidget { @override Widget build(BuildContext context) { var goodsDetails = Provide.value<DetailsInfoProvide>(context).goodsInfo.data.goodInfo.goodsDetail; return Container( child: Html( data: goodsDetails//注意這裏是data,而不是child了!!!! ), ); } }
pages/details_page.dart
import 'package:flutter/material.dart'; import 'package:provide/provide.dart'; import '../provide/details_info.dart'; import './details_page/details_top_area.dart'; import './details_page/details_expain.dart'; import './details_page/details_tabbar.dart'; import './details_page/details_web.dart'; class DetailsPage extends StatelessWidget { final String goodsId; DetailsPage(this.goodsId);//flutter 1.2的最新的寫法 構造函數 @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leading: IconButton( icon: Icon(Icons.arrow_back), onPressed: (){ Navigator.pop(context);//返回上一個頁面 }, ), title: Text('商品詳細頁'), ), body: FutureBuilder( future: _getBackInfo(context), builder: (context,snapshot){ //判斷是否有數據 if(snapshot.hasData){ //若是有數據返回一個Container return Container( child: ListView( children: <Widget>[ DetailsTopArea(), DetailsExplain(), DetailsTabbar(), DetailsWeb() ], ), ); }else{ return Text('加載中......');//沒有數據的狀況 } }, ), ); } Future _getBackInfo(BuildContext context) async{ await Provide.value<DetailsInfoProvide>(context).getGoodsInfo(goodsId); //print('加載完成...........'); return '完成加載'; } }