# flutter_get **Repository Path**: mzhai/flutter_get ## Basic Information - **Project Name**: flutter_get - **Description**: flutter_get - **Primary Language**: Unknown - **License**: EPL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-18 - **Last Updated**: 2024-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # flutter_get A new Flutter application. ## 环境信息 ``` Flutter 1.22.4 • channel stable • https://github.com/flutter/flutter.git Framework • revision 1aafb3a8b9 (2 weeks ago) • 2020-11-13 09:59:28 -0800 Engine • revision 2c956a31c0 Tools • Dart 2.10.4 ``` ## 已完成 #### webview_flutter ```dart Widget build(BuildContext context) { final String contentBase64 = base64Encode(const Utf8Encoder().convert('${this.appendHead}${widget.content}${this.appendStyle}')); return Scaffold( appBar: AppBar( brightness: Brightness.light, title:Text('${widget.title}'), elevation: 0.5, backgroundColor: widget.appBarBackgroundColor ?? Colors.white, ), body: Container( margin: EdgeInsets.only(left:4.0,right:4.0), width:MediaQuery.of(context).size.width, child: WebView( initialUrl:widget.initUrl ?? 'data:text/html;base64,$contentBase64', javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController webViewController) { _controller.complete(webViewController); }, ), ) ); } ``` #### 图片轮播 carousel_slider ```dart Widget _createCarouselSlider(BuildContext context, AsyncSnapshot snapshot) { List latestLists = [1,2,3,4,5]; return CarouselSlider.builder( itemCount: latestLists.length, itemBuilder: (ctx, index) { return Container( child: Text('TEXT TEXT'), ); }, options: CarouselOptions( height: 200.0, aspectRatio: 16 / 9, viewportFraction: 0.8, initialPage: 0, enableInfiniteScroll: true, autoPlay: true, enlargeCenterPage: false, enlargeStrategy: CenterPageEnlargeStrategy.height, // onPageChanged: (i){ // print(i) // } ), ); } ``` #### 模糊效果 ```dart import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'dart:ui'; class BlurBackCard extends StatelessWidget{ BlurBackCard({@required this.child, this.blurColor}); final Widget child; // 前景Widget final Color blurColor; @override Widget build(BuildContext context) { return ClipRRect( borderRadius: BorderRadius.circular(20.0), child: BackdropFilter( //背景滤镜 filter: ImageFilter.blur(sigmaX: 2, sigmaY: 2), //背景模糊化 child: Container( padding: EdgeInsets.all(16.0), color: this.blurColor ?? Colors.black.withOpacity(0.2), child: child, ), ), ); } } ``` #### 权限获取 ```dart import 'package:permission_handler/permission_handler.dart'; class PermissionGet { // calendar, // camera, // contacts, // location, // locationAlways, // locationWhenInUse, // mediaLibrary, // microphone, // phone, // photos, // reminders, // sensors, // sms, // speech, // storage, // ignoreBatteryOptimizations, // notification, // accessMediaLocation, // activityRecognition, // unknown, // 'calendar', // 'camera', // 'contacts', // 'location', // 'locationAlways', // 'locationWhenInUse', // 'mediaLibrary', // 'microphone', // 'phone', // 'photos', // 'reminders', // 'sensors', // 'sms', // 'speech', // 'storage', // 'ignoreBatteryOptimizations', // 'notification', // 'access_media_location', // 'activity_recognition', // 'unknown', PermissionGet(String permissionName){ final Map permissionNamedMap = { 'location': Permission.location, }; this.permission = permissionNamedMap[permissionName]; } Permission permission; PermissionStatus _permissionStatus = PermissionStatus.undetermined; Future checkPermissionStatus () async { this._permissionStatus = await this.permission.status; return this._permissionStatus; } Future requestPermission() async { final status = await this.permission.request(); this._permissionStatus = status; return this._permissionStatus; } Future requestPermissionWithCheck() async { final permissionStatus = await this.permission.status; if(permissionStatus != PermissionStatus.granted) { final status = await this.permission.request(); this._permissionStatus = status; } else { this._permissionStatus = await checkPermissionStatus(); } return this._permissionStatus; } } ``` #### 高德地图 amap_location + amap_map_fluttify ```dart import 'package:amap_location/amap_location.dart'; import 'package:flutter_get/utils/Permission.dart'; class AmapLocation { AMapLocation _loc; Future startUp() async { bool hasPermission = await PermissionGet('locationAlways').requestPermissionWithCheck(); if(hasPermission) { await AMapLocationClient.startup(new AMapLocationOption( desiredAccuracy:CLLocationAccuracy.kCLLocationAccuracyHundredMeters )); } return true; } Future getLocation() async { bool hasPermission = await PermissionGet('locationAlways').requestPermissionWithCheck(); if(hasPermission) { this._loc = await AMapLocationClient.getLocation(true); } return this._loc; } onLocationUpate () { AMapLocationClient.onLocationUpate.listen((AMapLocation loc){ this._loc = loc; }); AMapLocationClient.startLocation(); } void stopLocation () { AMapLocationClient.stopLocation(); } void shutdown () { AMapLocationClient.shutdown(); } } ``` #### 相机 camera: 0.5.8+11 ```dart import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:camera/camera.dart'; import 'dart:io'; import 'package:flutter_get/components/FaceAttr.dart'; import 'package:path_provider/path_provider.dart'; class CreateCamera extends StatefulWidget { @override _CreateCameraState createState() => _CreateCameraState(); } class _CreateCameraState extends State { List _cameras; CameraController _controller; String imageFilePathPreview; List imageFiles; Future initCamera; @override void initState() { _init(); super.initState(); } _initCamera() async { _cameras = await availableCameras(); _controller = CameraController(_cameras[0], ResolutionPreset.max); await _controller.initialize(); return _controller; } Future _init() async { CameraController con = await _initCamera(); return con; } String _timestamp() { return '${DateTime.now()}'; } void _captureImage() async { if (_controller.value.isInitialized) { final Directory extDir = await getApplicationDocumentsDirectory(); final String dirPath = '${extDir.path}/media'; await Directory(dirPath).create(recursive: true); final String filePath = '$dirPath/${_timestamp()}.jpg'; await _controller.takePicture(filePath); var directory = new Directory(dirPath); List files = directory.listSync(); List imageFilePathList = []; for(var f in files){ print(f.path); imageFilePathList.add(f.path); var bool = FileSystemEntity.isFileSync(f.path); if(bool){ print(f.path); } } setState(() { imageFilePathPreview = filePath; imageFiles = imageFilePathList; }); } } Widget cameraPreview(BuildContext context) { if (this._controller == null || !this._controller.value.isInitialized) { return RaisedButton( child: Text('openCamera'), onPressed: () async { // await _initCamera(); // initCamera = await _init(); }, ); } else { return Container( width: MediaQuery.of(context).size.width / 2, child: CameraPreview(this._controller), ); } } @override Widget build(BuildContext context) { return FutureBuilder( builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.done) { return InkWell( child: Row( children: [ Expanded( child: Container( width: MediaQuery.of(context).size.width / 2, child: cameraPreview(context), ), ), Expanded( child: Container( width: MediaQuery.of(context).size.width / 2, child: Column( children: [ Expanded(child: FaceAttr(path: this.imageFilePathPreview)), ], ) ), ) ], ), onLongPress: () { _captureImage(); }, ); } else { return Center( child: CircularProgressIndicator(), ); } }, future: _init(), ); } } ``` #### 文件存储/读取 path_provider: 1.6.24 ```dart void _captureImage() async { if (_controller.value.isInitialized) { final Directory extDir = await getApplicationDocumentsDirectory(); final String dirPath = '${extDir.path}/media'; await Directory(dirPath).create(recursive: true); final String filePath = '$dirPath/${_timestamp()}.jpg'; await _controller.takePicture(filePath); var directory = new Directory(dirPath); List files = directory.listSync(); List imageFilePathList = []; for(var f in files){ print(f.path); imageFilePathList.add(f.path); var bool = FileSystemEntity.isFileSync(f.path); if(bool){ print(f.path); } } setState(() { imageFilePathPreview = filePath; imageFiles = imageFilePathList; }); } } ``` #### 图片上传 ```dart import 'dart:io'; import 'dart:convert'; class Image2Base64 { static Future image2Base64(String path) async { File file = new File(path); List imageBytes = await file.readAsBytes(); return base64Encode(imageBytes); } } ``` #### 振动反馈 ```dart if (_canVibrate) { Vibrate.feedback(FeedbackType.success); } ``` ## 待完成 #### 水印 #### 路由改造 #### 基础模糊组件 #### 角标 #### 蓝牙 #### 视频播放