Flutter 問題解決總結

1. 路由開啓下一個頁面的,後退黑屏問題

當Navigator.push開啓下一個頁面,這個頁面Navigator.pop(context)回到上一個頁面出現黑屏,把當前頁面的MaterialApp去掉就好android

2. 彈軟鍵盤,佈局隨鍵盤頂上去問題

在Scaffold加屬性resizeToAvoidBottomPadding: false網絡

3. 彈軟鍵盤,iOS關閉不了軟鍵盤

在佈局外層包裹一層點擊事件ide

InkWell(
        onTap: () {
            FocusScope.of(context).requestFocus(FocusNode());
        },
        child: child
     )
複製代碼

4. ScrollView 嵌套 ListView 滾動問題

ListView.builder(
        shrinkWrap: true,
        physics: NeverScrollableScrollPhysics(),// 主要這個
        padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
        itemCount: subjects.length,
        itemBuilder: (BuildContext context, int position) {
            return getItem(context, subjects[position]);
      });
複製代碼

5. Android 嵌套Flutter 後退鍵返回上一級頁面處理

override fun onBackPressed() {
    if (flutterView != null) {
        flutterView?.popRoute()
    } else {
        super.onBackPressed()
    }
}
複製代碼

6. 國際化 當用一些控件時 默認是英文這時候就須要國際化了(例如:選擇日期組件)

依賴:flutter_localizations:
             sdk: flutter

  import 'package:flutter_localizations/flutter_localizations.dart';
  
  return MaterialApp(
     home: child,
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('zh', 'CH'),
        // const Locale('en', 'US'),
      ],
    );
複製代碼

7. Rxdart 進行網絡請求 例如:

ProgressDialog _progressDialog = ProgressDialog(context);
  ApiRepository.resetPassword(_phoneController.text, _codeController.text,
          _newPasswordContrpller.text)
      .doOnDone(() => _progressDialog.hide())
      .doOnListen(() => _progressDialog.show())
      .doOnError((error, stacktrace) {
    if (error is DioError) {
      showToast("加載失敗,請檢查網絡鏈接");
    }
  }).listen((baseResp) {
    if (baseResp != null && baseResp.isSuccess()) {
      showToast("重置成功");
      Navigator.pop(context);
    } else {
      showToast(baseResp.msg);
    }
  });
複製代碼

8. 集成image_pick不回調(Android端集成Flutter)

Android端添加回調代碼佈局

override fun onActivityResult(requestCode: Int, resultCode:Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    flutterView?.pluginRegistry?.onActivityResult(requestCode, resultCode, data)
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    flutterView?.pluginRegistry?.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
複製代碼

9. Flutter 在iPhone輸入框中長按複製粘貼彈窗報錯的問題

有一種方法在iOS中顯示Android的風格
Theme(
    data: ThemeData(platform: TargetPlatform.android),
    child: TextField(
    *****)
    )
複製代碼
還有一種方法實現iOS原本的風格 參考此文章

flutter cupertino 複製粘貼彈窗報錯的問題post

相關文章
相關標籤/搜索