最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

超過百萬的StackOverflow Flutter 20大問題(推薦)

 更新時間:2020年04月17日 10:05:24   作者:老孟程序員  
這篇文章主要介紹了超過百萬的StackOverflow Flutter 問題,有的問題在stackoverflow上有幾十萬的閱讀量,說明很多人都遇到了這些問題,把這些問題整理分享給大家需要的朋友可以參考下

今天分享StackOverflow上高訪問量的20大問題,這些問題給我一種特別熟悉的感覺,我想你一定或多或少的遇到過,有的問題在stackoverflow上有幾十萬的閱讀量,說明很多人都遇到了這些問題,把這些問題整理分享給大家,每期20個,每隔2周分享一次。

如何實現(xiàn)Android平臺的wrap_content 和match_parent

你可以按照如下方式實現(xiàn):

1、Width = Wrap_content Height=Wrap_content:

Wrap(
 children: <Widget>[your_child])

2、Width = Match_parent Height=Match_parent:

Container(
  height: double.infinity,
 width: double.infinity,child:your_child)

3、Width = Match_parent ,Height = Wrap_conten:

Row(
 mainAxisSize: MainAxisSize.max,
 children: <Widget>[*your_child*],
);

4、Width = Wrap_content ,Height = Match_parent:

Column(
 mainAxisSize: MainAxisSize.max,
 children: <Widget>[your_child],
);

如何避免FutureBuilder頻繁執(zhí)行future方法

錯誤用法:

@override
Widget build(BuildContext context) {
 return FutureBuilder(
 future: httpCall(),
 builder: (context, snapshot) {
  
 },
 );
}

正確用法:

class _ExampleState extends State<Example> {
 Future<int> future;

 @override
 void initState() {
 future = Future.value(42);
 super.initState();
 }

 @override
 Widget build(BuildContext context) {
 return FutureBuilder(
  future: future,
  builder: (context, snapshot) {
  
  },
 );
 }
}

底部導(dǎo)航切換導(dǎo)致重建問題

在使用底部導(dǎo)航時經(jīng)常會使用如下寫法:

Widget _currentBody;

@override
Widget build(BuildContext context) {
 return Scaffold(
 body: _currentBody,
 bottomNavigationBar: BottomNavigationBar(
  items: <BottomNavigationBarItem>[
  	...
  ],
  onTap: (index) {
  _bottomNavigationChange(index);
  },
 ),
 );
}

_bottomNavigationChange(int index) {
 switch (index) {
 case 0:
  _currentBody = OnePage();
  break;
 case 1:
  _currentBody = TwoPage();
  break;
 case 2:
  _currentBody = ThreePage();
  break;
 }
 setState(() {});
}

此用法導(dǎo)致每次切換時都會重建頁面。

解決辦法,使用IndexedStack

int _currIndex;

@override
Widget build(BuildContext context) {
 return Scaffold(
 body: IndexedStack(
  index: _currIndex,
  children: <Widget>[OnePage(), TwoPage(), ThreePage()],
  ),
 bottomNavigationBar: BottomNavigationBar(
  items: <BottomNavigationBarItem>[
  	...
  ],
  onTap: (index) {
  _bottomNavigationChange(index);
  },
 ),
 );
}

_bottomNavigationChange(int index) {
 setState(() {
  _currIndex = index;
 });
}

TabBar切換導(dǎo)致重建(build)問題

通常情況下,使用TabBarView如下:

TabBarView(
 controller: this._tabController,
 children: <Widget>[
 _buildTabView1(),
 _buildTabView2(),
 ],
)

此時切換tab時,頁面會重建,解決方法設(shè)置PageStorageKey

var _newsKey = PageStorageKey('news');
var _technologyKey = PageStorageKey('technology');

TabBarView(
 controller: this._tabController,
 children: <Widget>[
 _buildTabView1(_newsKey),
 _buildTabView2(_technologyKey),
 ],
)

Stack 子組件設(shè)置了寬高不起作用

在Stack中設(shè)置100x100紅色盒子,如下:

Center(
 child: Container(
 height: 300,
 width: 300,
 color: Colors.blue,
 child: Stack(
  children: <Widget>[
  Positioned.fill(
   child: Container(
   height: 100,
   width: 100,
   color: Colors.red,
   ),
  )
  ],
 ),
 ),
)

此時紅色盒子充滿父組件,解決辦法,給紅色盒子組件包裹Center、Align或者UnconstrainedBox,代碼如下:

Positioned.fill(
 child: Align(
 child: Container(
  height: 100,
  width: 100,
  color: Colors.red,
 ),
 ),
)

如何在State類中獲取StatefulWidget控件的屬性

class Test extends StatefulWidget {
 Test({this.data});
 final int data;
 @override
 State<StatefulWidget> createState() => _TestState();
}

class _TestState extends State<Test>{

}

如下,如何在_TestState獲取到Test的data數(shù)據(jù)呢:

  • 在_TestState也定義同樣的參數(shù),此方式比較麻煩,不推薦。
  • 直接使用widget.data(推薦)。

default value of optional parameter must be constant

上面的異常在類構(gòu)造函數(shù)的時候會經(jīng)常遇見,如下面的代碼就會出現(xiàn)此異常:

class BarrageItem extends StatefulWidget {
 BarrageItem(
  { this.text,
  this.duration = Duration(seconds: 3)});

異常信息提示:可選參數(shù)必須為常量,修改如下:

const Duration _kDuration = Duration(seconds: 3);

class BarrageItem extends StatefulWidget {
 BarrageItem(
  {this.text,
  this.duration = _kDuration});

定義一個常量,Dart中常量通常使用k開頭,_表示私有,只能在當前包內(nèi)使用,別問我為什么如此命名,問就是源代碼中就是如此命名的。

如何移除debug模式下右上角“DEBUG”標識

MaterialApp(
 debugShowCheckedModeBanner: false
)

如何使用16進制的顏色值

下面的用法是無法顯示顏色的:

Color(0xb74093)

因為Color的構(gòu)造函數(shù)是ARGB,所以需要加上透明度,正確用法:

Color(0xFFb74093)

FF表示完全不透明。

如何改變應(yīng)用程序的icon和名稱

鏈接:https://blog.csdn.net/mengks1987/article/details/95306508

如何給TextField設(shè)置初始值

class _FooState extends State<Foo> {
 TextEditingController _controller;

 @override
 void initState() {
 super.initState();
 _controller = new TextEditingController(text: '初始值');
 }

 @override
 Widget build(BuildContext context) {
 return TextField(
   controller: _controller,
  );
 }
}

Scaffold.of() called with a context that does not contain a Scaffold

Scaffold.of()中的context沒有包含在Scaffold中,如下代碼就會報此異常:

class HomePage extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Scaffold(
  appBar: AppBar(
  title: Text('老孟'),
  ),
  body: Center(
  child: RaisedButton(
   color: Colors.pink,
   textColor: Colors.white,
   onPressed: _displaySnackBar(context),
   child: Text('show SnackBar'),
  ),
  ),
 );
 }
}

_displaySnackBar(BuildContext context) {
 final snackBar = SnackBar(content: Text('老孟'));
 Scaffold.of(context).showSnackBar(snackBar);
}

注意此時的context是HomePage的,HomePage并沒有包含在Scaffold中,所以并不是調(diào)用在Scaffold中就可以,而是看context,修改如下:

_scaffoldKey.currentState.showSnackBar(snackbar);

或者:

Scaffold(
 appBar: AppBar(
  title: Text('老孟'),
 ),
 body: Builder(
  builder: (context) => 
   Center(
   child: RaisedButton(
   color: Colors.pink,
   textColor: Colors.white,
   onPressed: () => _displaySnackBar(context),
   child: Text('老孟'),
   ),
  ),
 ),
);

Waiting for another flutter command to release the startup lock

在執(zhí)行flutter命令時經(jīng)常遇到上面的問題,

解決辦法一:

1、Mac或者Linux在終端執(zhí)行如下命令:

killall -9 dart

2、Window執(zhí)行如下命令:

taskkill /F /IM dart.exe

解決辦法二:

刪除flutter SDK的目錄下/bin/cache/lockfile文件。

無法調(diào)用setState

不能在StatelessWidget控件中調(diào)用了,需要在StatefulWidget中調(diào)用。

設(shè)置當前控件大小為父控件大小的百分比

1、使用FractionallySizedBox控件

2、獲取父控件的大小并乘以百分比:

MediaQuery.of(context).size.width * 0.5

Row直接包裹TextField異常:BoxConstraints forces an infinite width

解決方法:

Row(
	children: <Widget>[
		Flexible(
			child: new TextField(),
		),
 ],
),

TextField 動態(tài)獲取焦點和失去焦點

獲取焦點:

FocusScope.of(context).requestFocus(_focusNode);

_focusNode為TextField的focusNode:

_focusNode = FocusNode();

TextField(
	focusNode: _focusNode,
	...
)

失去焦點:

_focusNode.unfocus();

如何判斷當前平臺

import 'dart:io' show Platform;

if (Platform.isAndroid) {
 // Android-specific code
} else if (Platform.isIOS) {
 // iOS-specific code
}

平臺類型包括:

Platform.isAndroid
Platform.isFuchsia
Platform.isIOS
Platform.isLinux
Platform.isMacOS
Platform.isWindows

Android無法訪問http

其實這本身不是Flutter的問題,但在開發(fā)中經(jīng)常遇到,在Android Pie版本及以上和IOS 系統(tǒng)上默認禁止訪問http,主要是為了安全考慮。

Android解決辦法:

./android/app/src/main/AndroidManifest.xml配置文件中application標簽里面設(shè)置networkSecurityConfig屬性:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
 <application android:networkSecurityConfig="@xml/network_security_config">
		 <!-- ... -->
 </application>
</manifest>

./android/app/src/main/res目錄下創(chuàng)建xml文件夾(已存在不用創(chuàng)建),在xml文件夾下創(chuàng)建network_security_config.xml文件,內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
 <base-config cleartextTrafficPermitted="true">
  <trust-anchors>
   <certificates src="system" />
  </trust-anchors>
 </base-config>
</network-security-config>

IOS無法訪問http

./ios/Runner/Info.plist文件中添加如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	...
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
</dict>
</plist>

交流

Github地址:https://github.com/781238222/flutter-do

170+組件詳細用法:http://laomengit.com

總結(jié)

到此這篇關(guān)于超過百萬的StackOverflow Flutter 20大問題的文章就介紹到這了,更多相關(guān)StackOverflow Flutter 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 兩種Android打電話實現(xiàn)方法

    兩種Android打電話實現(xiàn)方法

    這篇文章主要為大家詳細介紹了兩種Android打電話實現(xiàn)方法,具有一定的實用性,感興趣的小伙伴們可以參考一下
    2016-08-08
  • RxJava 1升級到RxJava 2過程中踩過的一些“坑”

    RxJava 1升級到RxJava 2過程中踩過的一些“坑”

    RxJava2相比RxJava1,它的改動還是很大的,那么下面這篇文章主要給大家總結(jié)了在RxJava 1升級到RxJava 2過程中踩過的一些“坑”,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下來要一起看看吧。
    2017-05-05
  • Android AlertDialog六種創(chuàng)建方式案例詳解

    Android AlertDialog六種創(chuàng)建方式案例詳解

    這篇文章主要介紹了Android AlertDialog六種創(chuàng)建方式案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn)

    flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn)

    在開發(fā)app的過程中,我們經(jīng)常需要知道app處于前后臺的狀態(tài),本文主要介紹了flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Android利用MediaRecorder實現(xiàn)錄音功能

    Android利用MediaRecorder實現(xiàn)錄音功能

    這篇文章主要為大家詳細介紹了Android利用MediaRecorder實現(xiàn)錄音功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解Flutter如何在單個屏幕上實現(xiàn)多個列表

    詳解Flutter如何在單個屏幕上實現(xiàn)多個列表

    這篇文章主要為大家詳細介紹了Flutter如何在單個屏幕上實現(xiàn)多個列表,這些列表可以水平排列、網(wǎng)格格式、垂直排列,甚至是這些常用布局的組合,感興趣的小伙伴可以了解下
    2023-11-11
  • Android Studio 多層級 Module 對 aar 引用問題解決方法

    Android Studio 多層級 Module 對 aar 引用問題解決方法

    這篇文章主要介紹了Android Studio 多層級 Module 對 aar 引用問題的解決方法,需要的朋友參考下
    2017-12-12
  • Android中ViewPager實現(xiàn)滑動指示條及與Fragment的配合

    Android中ViewPager實現(xiàn)滑動指示條及與Fragment的配合

    這篇文章主要介紹了Android中ViewPager實現(xiàn)滑動指示條及與Fragment的配合,使用Fragment實現(xiàn)ViewPager的滑動是一種比較推薦的做法,需要的朋友可以參考下
    2016-03-03
  • VideoView實現(xiàn)視頻無縫連續(xù)播放

    VideoView實現(xiàn)視頻無縫連續(xù)播放

    這篇文章主要為大家詳細介紹了VideoView實現(xiàn)視頻無縫連續(xù)播放,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 淺析安卓(Android)的性能優(yōu)化

    淺析安卓(Android)的性能優(yōu)化

    性能優(yōu)化是一個大的范疇,如果有人問你在Android中如何做性能優(yōu)化的,也許都不知道從哪開始說起。那么這篇文章我們從布局優(yōu)化和內(nèi)存優(yōu)化兩個方面來展開說如何進行Android的性能優(yōu)化。
    2016-08-08

最新評論

新化县| 柯坪县| 色达县| 靖安县| 蕉岭县| 怀柔区| 临高县| 武穴市| 铅山县| 杭锦后旗| 武宣县| 广饶县| 汾阳市| 鲁甸县| 英山县| 朔州市| 蒙自县| 穆棱市| 三穗县| 永宁县| 类乌齐县| 措美县| 都安| 高青县| 江源县| 游戏| 安福县| 河间市| 瓦房店市| 昆明市| 罗源县| 驻马店市| 宿迁市| 珲春市| 丰城市| 托克逊县| 永康市| 万全县| 曲阳县| 乌拉特后旗| 宝丰县|