# flutter_muka **Repository Path**: Spicely/flutter_muka ## Basic Information - **Project Name**: flutter_muka - **Description**: No description available - **Primary Language**: Dart - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-02 - **Last Updated**: 2021-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # flutter_muka Flutter样式组件 ## 引入方式 ``` muka: git: https://github.com/Spicely/flutter-muka.git /// 在pubspec.yaml中增加 dev_dependencies: flutter_test: sdk: flutter + json_serializable: ``` #### Ios `Info.plist` ``` NSFaceIDUsageDescription Why is my app authenticating using face id? ``` #### GridBox、GridItem 网格组件 ``` GridBox( padding: EdgeInsets.symmetric(horizontal: 10), children: [ GridItem( image: CachedNetworkImage( width: 50, height: 50, imageUrl: 'https://img.muka.site/icon/activity.png', ), text: Text('帮助'), ), GridItem( image: CachedNetworkImage( width: 50, height: 50, imageUrl: 'https://img.muka.site/icon/activity.png', ), text: Text('帮助'), ), GridItem( image: CachedNetworkImage( width: 50, height: 50, imageUrl: 'https://img.muka.site/icon/activity.png', ), text: Text('帮助'), ), ], ) ``` #### Empty ``` /// 全局样式 Empty.GLOBAL_EMPTY_DATA_URL = 'assets/images/empty.png'; Empty.GLOBAL_NOT_NETWORK_URL = 'assets/images/empty.png'; Empty.WIDTH = 240; Empty( initLoad: _getData, /// 覆盖全局 empty: Text('无数据'), /// 覆盖全局 network: Text('无网络'), child: Text('111'), ); ``` #### PageInit ``` /// 监听返回按键 点击空白处关闭键盘 PageInit( exitLabel: '再按一次推辞' child: Text('111) ); ``` #### 指纹验证 `已删除` ``` // 修改 MainActivity.kt 修改为 import androidx.annotation.NonNull import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.android.FlutterFragmentActivity import io.flutter.plugins.GeneratedPluginRegistrant class MainActivity : FlutterFragmentActivity() { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine) } } ``` #### AppUpdate ``` /// 检测更新 请求返回数据是固定的 AppUpdate.checkUpdate( context, url: '/home/app', appId: 'io.cordova.maixiaobu', ); /// 要求返回的数据格式 { 'data': { /// 是否更新 bool hasUpdate; /// 是否强制更新 bool isIgnorable; /// 是否跳转appStore bool isAppStore; /// app版本号 String versionCode; /// app大小 String apkSize; /// 下载地址 String downloadUrl; /// 更新内容 String updateContent; }, 'code': 200, 'msg': '请求成功' } ``` #### ListItem ``` /// 列表组件 ListItem( height: 30, title: Text("左标题"), value: Text("右值"), showArrow: true, fieldType: FieldType.TITLE, ); ``` #### CustomStepper ``` /// 步骤条组件 和flutter的使用方式基本一致 CustomStepper( type: CustomStepperType.horizontal, currentStep: 0, lineHeight: 10.0, lineMargin: EdgeInsets.all(0), steps: [ CustomStep( title: Text('身份信息'), content: Text('显示内容'), // state: CustomStepState.complete, isActive: true, ), CustomStep( title: Text('个人资料'), content: Container(), ), ], ); ``` #### StartUp ``` StartUp( timer: StartupTimerType.bottom, child: Image.asset( 'assets/images/3.png', width: double.infinity, fit: BoxFit.cover, ), logo: Center( child: Image.asset( 'assets/images/btm.jpg', width: 140, ), ), onTimeEnd: () { Navigator.push( context, MaterialPageRoute(builder: (BuildContext context) => Welcome()), // (route) => false, ); }, ) ``` #### DialogUtils ``` /// 弹出签名 并获取签名 Uint8List? image = await DialogUtils.signature(context); final tempDir = await getTemporaryDirectory(); final file = await File('${tempDir.path}/image.png').create(); file.writeAsBytesSync(image!); ```