درود بر دوستان جذاب و عزیز در این پارت با یک سری دیگر از سوالات کاربردی در فلاتر و جواب های آن آشنا خواهیم شد
چطوری میشه با اسکرول به سمت بالا یک ویجت را پنهان کرد ؟
جواب
Widget _buildCircleImage() { //starting fab position final double defaultTopMargin = SizeConfig.heightMultiplier * 16; //pixels from top where scaling should start final double scaleStart = 96.0; //pixels from top where scaling should end final double scaleEnd = scaleStart / 2; double top = defaultTopMargin; double scale = 1.0; if (scrollController.hasClients) { double offset = scrollController.offset; top -= offset; if (offset < defaultTopMargin - scaleStart) { //offset small => don't scale down scale = 1.0; } else if (offset < defaultTopMargin - scaleEnd) { //offset between scaleStart and scaleEnd => scale down scale = (defaultTopMargin - scaleEnd - offset) / scaleEnd; } else { scale = 0.0; } } return new Positioned( top: top, right: SizeConfig.widthMultiplier * 38, child: new Transform( transform: new Matrix4.identity()..scale(scale), alignment: Alignment.center, child : Hero( tag: 'imgprofile', child: Container( height: 12 * SizeConfig.heightMultiplier, width: 22 * SizeConfig.widthMultiplier, decoration: BoxDecoration( border: Border.all(width : 3 , color: Theme.of(context).primaryColor), borderRadius: BorderRadius.circular(26 * SizeConfig.heightMultiplier), image: DecorationImage( image: AssetImage(Images.puser), fit: BoxFit.cover, ) ), ), ) ), ); }
در ویجت بالا ما یک Container داریم که با استفاده از مقادیر مورد نظر Position دلخواه داده ایم سپس وقتی کاربر به سمت بالا اسکرول می کند با استفاده از Scale آن را با پارامتر عددی مورد نظر به 0 تغییر می دهیم شما به دلخواه خودتان می توانید این پارامتر ها را تغییر دهید و به نتیجه ی دلخواه تان برسید
چطوری می تونیم کیبورد را در فلاتر مدیریت کنم ؟
جواب
child: !_keyboardIsVisible() ? Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ GestureDetector( onTap: () { Navigator.of(context).pushReplacement(goPageRoute.pageSignUp()); }, child: Text("ثبت نام" , style: TextStyle(fontWeight: FontWeight.bold , fontSize: SizeConfig.textMultiplier * 2.8 , color: ColorsApp.white , decoration: TextDecoration.underline,)), ), Text("حساب کاربری ندارید؟ " , style: TextStyle(fontSize: SizeConfig.textMultiplier * 2 , color: ColorsApp.Palewhite )), ], ):Container(), bool _keyboardIsVisible() { return !(MediaQuery.of(context).viewInsets.bottom == 0.0); }
یکی از این راه ها مورد بالا است که با استفاده از متغیر keyboardIsVisible و مقدار False یا True بودن آن میتوانید این کار را مدیریت کنید
چطور می تونم در فلاتر تماس برقرار کنم ؟ یا به یک Url خاصی انتقال پیدا کنم ؟
جواب
import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', home: new Home(), ); } } class Home extends StatelessWidget { Home({Key key}) : super(key: key); @override Widget build(BuildContext context) => new Scaffold( appBar: new AppBar( title: new Text("View"), ), body: new Center( child: new FlatButton( onPressed: () => launch("tel://21213123123"), child: new Text("Call me")), ), ); } void main() { runApp( new MyApp(), ); }
با استفاده از کد بالا و استفاده از پکیج https://pub.dev/packages/url_launcher#-installing-tab-
میتونید این کار را انجام دهید
چطوری می تونم اپ بار مورد نظر را به سایز دلخواه خودم تغییر دهم ؟
جواب
home: Scaffold( appBar: PreferredSize( preferredSize: Size.fromHeight(50.0), // here the desired height child: AppBar( // ... ) ),
با استفاده از PreferredSize هر سایز دلخواهی را می توانید به اپ بار خود اختصاص دهید
چطوری می تونم خطای وارد توسط کاربر در تکس فیلد را نمایش دهم ؟
جواب
class MyHomePage extends StatefulWidget { @override MyHomePageState createState() { return new MyHomePageState(); } } class MyHomePageState extends State<MyHomePage> { final _text = TextEditingController(); bool _validate = false; @override void dispose() { _text.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('TextField Demo'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text('Error Showed if Field is Empty on Submit button Pressed'), TextField( controller: _text, decoration: InputDecoration( labelText: 'Enter the Value', errorText: _validate ? 'Value Can\'t Be Empty' : null, ), ), RaisedButton( onPressed: () { setState(() { _text.text.isEmpty ? _validate = true : _validate = false; }); }, child: Text('Submit'), textColor: Colors.white, color: Colors.blueAccent, ) ], ), ), ); } }
با استفاده از متغیرvalidate مقدار مورد نظر را بررسی و سپس خطای وارده را نمایش دهید
امیدوارم براتون مفید بوده باشه