Get click form ScrollGallery Image Flutter - dart

I am trying to implement flutter scrollGallery in my app like this.
ScrollGallery(
<ImageProvider>[
AssetImage('images/y1.jpg'),
AssetImage('images/z3.jpg'),
AssetImage('images/z7.jpg'),
],
fit: BoxFit.contain,
),
But i need click from large image. ie from AssetImage. it will not allow wrap any other widget as imageprovider. how can i get that click?. Is ImageProvider an option? From where i get help for that?

Related

Why Tab Indent is not Consistent in VSCode ? (Dart Language)

I want to ask about the "Format Document" feature, why when using the "document format" feature in VScode, the tabulation becomes irregular like the code that I attached below.
I have tried to set "Editor: tab size" to 2 but when I use "Format Document", my code becomes irregular.
#override
Widget build(BuildContext context) {
````return new Container(
````````child: new Column(
``````children: <Widget>[
````````new Row(
``````````children: <Widget>[
````````````//slideshow
````````````new Expanded(
````````````````child: new CarouselSlider(
``````````````height: 150.0,
I expect the code like this :
#override
``Widget build(BuildContext context) {
````return new Container(
``````child: new Column(
````````children: <Widget>[
``````````new Row(
````````````children: <Widget>[
``````````````//slideshow
``````````````new Expanded(
````````````````child: new CarouselSlider(
````````````````height: 150.0,
The formatting is done by dart_style/dartfmt, and its convention is 2-space indenting, with 4 spaces for continued lines.
For Flutter code this often isn't the best formatting, so trailing commas can be used to change the formatting a little that works better:
https://flutter.dev/docs/development/tools/formatting#using-trailing-commas
(source: flutter.dev)
After poking around for solutions to this for months, thinking it must have something to do with the line length, the word wrapping, or other things, and none of it worked, I realized that if one has "Enable SDK Formatter" checked, it will seemingly override all of that with dart_style's choices.
Kind of sad to turn it off, as I'm sure it must be doing some other things that are useful. But I just can't live with that odd formatting that obfuscates the actual structure of the code as soon as I hit Save. So, if you're doing it manually in the settings.json, I would do:
"dart.enableSdkFormatter": false,

How to boost flutter performance?

How to boost flutter performance and speed up our application.
As I am working on a larg application and I worried about performance issue, becuase I need a supper fast app.
Here I have a large list of items like a chat application and there is something mentioned below that I am worry about:
1: I need scrolling more than 3000 items smoothly
2: I need to update specific item during chat, like: seen, delived, sent or deleted.
3: and navigation
In react-native there is a lot of way like using PureComponent
or shouldComponentUpdate(nextProps, nextState) function to decrease rendering.
for example in react-native we can split a big list Component into sub Component of items, then we can use shouldComponentUpdate(nextProps, nextState) and prevent any rendering does not depends to the current Item.
This aprroach help us to just render the item we need to update.
and also there is alot of other way we can use for speed up our application.
although One big problem I encounted in react-native is, if we scroll very fast more than 300 items there a blank space appears instaed of list items.
So my question is how to find same tips in FLUTTER, I mean Is there a tips/trick for flutter like I mentioned above in react-native? if yes please help me with a simple examples.
Thank you in befor
Here I have a large list of items like a chat application and there is something mentioned below that I am worry about: 1: I need scrolling more than 3000 items smoothly 2: I need to update specific item during chat, like: seen, delived, sent or deleted. 3: and navigation
Use ListView.builder() widget to create smooth scrollable list without any length without any performance issue.
It's functionality basically corresponds to RecyclerView (Native Android).
The items which are not visible on the screen are not rendered so it doesn't practically matter how many items exist in the list in total.
Flutter handles all those minor things for you so that you can focus on other important aspects of your app. Flutter and RN are similar to some extent but they are not the same.
Working Example:
import 'package:flutter/material.dart';
List<String> litems = ["1","2","Third","4"];
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext ctxt) {
return new MaterialApp(
home: new ListDisplay(),
);
}
}
class ListDisplay extends StatelessWidget {
#override
Widget build (BuildContext ctxt) {
return new Scaffold(
appBar: new AppBar(title: new Text("Dynamic Demo"),),
body: new ListView.builder(
itemCount: litems.length,
itemBuilder: (BuildContext ctxt, int index) {
return new Text(litems[index]);
}
)
),
);
}
}
If you still face the same issue, then try running the app in release mode. That should surely solve your issue for the above example.
If you want some more tips on increasing your app's overall performance head over to the links given below,
https://flutter.dev/docs/testing/best-practices
https://medium.com/flutter-community/improve-your-flutter-app-performance-split-your-widgets-935f97e93f7d
To run your app in release mode execute flutter run --release in your app's terminal to run your app in release mode.
While using the provider for example if have data that you will need only on a specific page and this data will be temporarily viewed avoid adding it to the provider I highly advise you to use multiple providers. so you avoid rebuiding all the screen components when changing the state. also if you have too many stateless widgets in a screen and you have only few widgets that are stateful. you should wrap those with state changeable components (stateful) with consumer so when notifying the UI of a state change only those concerne will be updated. that will help avoiding rebuid entire screen.
Use Stateless widgets instead of Stateful widgets in the cases that you dont have to use it so you dont have always to rebuild your application , and try to not Use setState() methode because it is heavy and expensive and use instead of it StreamBuilder()
Split Larger Widgets into smaller widgets
Use Const keyword , Using the const keyword wherever applicable can be a great way to reduce memory usage , and you can use the Const KeyWord in lot of places like EdgeInsets, Color and Text , and Also in Constructors
const EdgeInsets.fromLTRB(16, 4, 16, 8); const Color lightGray = Color(0xFFFEFEFE); const Text('This is a static text')
Also in the constructors:
Column(children: [
const JDSearchIcon(),
InkWell(....),
const JDSearchIcon(),],),
Render only widgets that are visible on the screen , When you are dealing with a large vertical or horizontal list of widgets, you should avoid using a solution that creates all the widgets visible on the screen at once. Instead, try using ListView.builder to improve the performance of your flutter app.
ListView.builder(
itemCount: dataSource.length,
itemBuilder: (context, index) {
return Tweet(dataSource[index]);
},
)

Is there a way to display an image if the requested image is not in my assets?

the title might be a bit confusing but i'll try to explain it better with an example.
I am using the widget
Image.asset(
'assets/images/${object.name}.jpg',
),
but i want to show a default image (from assets or network) if the selected one is not available.
Is this possible?
Thanks.
You can use the errorBuilder function to return another widget if the asset loading fails.
Widget createImage(String iconName) {
return Image.asset('assets/icons/${iconName}.png',
errorBuilder: (context, object, stacktrace) =>
Image.asset('assets/icons/default.png'));
}
If you are looking for a placeholder you could use the following package here.
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
placeholder: new CircularProgressIndicator(),
errorWidget: new Icon(Icons.error),
),

Flutter Android PreferenceScreen settings page

Android has PreferenceScreen which provides you the consistent Settings interface and handles a lot of SharedPreferences functionality on its own.
Is there anything similar in Flutter or do I have to create it by my own using custom ListView?
So, there doesn't exist any widget like that, you will have to create it on your own and handle their action in onChanged or onTap events. For example:
CheckBoxPreference
CheckboxListTile(
value: true,
title: Text("This is a CheckBoxPreference"),
onChanged: (value) {},
),
SwitchPreference
SwitchListTile(
value: false,
title: Text("This is a SwitchPreference"),
onChanged: (value) {},
),
ListPreference
ListTile(
title: Text("This is a ListPreference"),
subtitle: Text("Subtitle goes here"),
onTap: (){},
)
In Flutter the easiest way to make a PreferenceScreen page is with a ListView and ListTiles.
ListView(children: <Widget>[
ListTile(
title: Text('Enable Feature'),
trailing: Checkbox(
value: PrefService.getBool('feature_enabled'),
onChanged: (val) {
setState(() {
PrefService.setBool('feature_enabled', val);
});
},
),
onTap: () {
setState(() {
PrefService.setBool(
'feature_enabled', !PrefService.getBool('feature_enabled'));
});
},
)
]),
But you still need to listen for changes and save them.
To make that easier you can use the package preferences. It removes the boilerplate code and manages saving the changes. The example above would look like this with preferences:
PreferencePage([
CheckboxPreference(
'Enable Feature',
'feature_enabled',
)
]),
You can find it under https://pub.dartlang.org/packages/preferences.
For more features like subpages, hiding of preferences or more widgets look at the example.
According to my research now (I checked the https://pub.dartlang.org and other resources), the answer to your question is, no there is no page like that in Flutter (Check the official documentation). There is one plugin to have SharedPreferences which is from Flutter team, but if you check out its source code, you can see that it just does data modification. Other alternatives from other developers doesn't have anything visual too (I will keep checking, if I find one, I will edit my post).
There are some ways to do it, you can do it by calling android bridge and having android specific screen for only android (yeah I know, it doesn't make much sense) when you are with flutter or my real answer would be you can implement it by using list view as you mentioned and assign different child elements according to your needs.

About ExpansionPanel and SQFlite

Can i make a ExpansionPanel with header and body content from SQFLite database?
this is my code paste.ofcode.org/b8Mns5bSQxqyjX6BwD8DL8 I want to load the header and body from database
You are using ListView.builder to build the List. ListView.builder is meant for building UI widgets.
As it is not attached to the view (it's hanging in initState), ListView.builder will not have iterated once (you can put a print inside and see).
Solution is to use normal list
List.generate(data.length, (index) => new ItemKu(
false,
data[index]["category"],
new Container(
padding: new EdgeInsets.all(10.0),
child: new Text('Hello World'),
)
));

Resources