0
votes

Hy guys i try two methods to pass variable inside widget in this case shared preferences.i can't pass _counterios or _counterdroid inside Widget build(BuildContext context) {... i try also localstorage wath's the best method and how??? thanks.. Code below

  _loadCounter() async {
    print("inizializzazione versione");
    if (Platform.isAndroid) {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      setState(() {
        _counterdroid = (prefs.getString('counterdroid'));
        print(_counterdroid + "lettura file");
      });
    }
    else if (Platform.isIOS) {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      setState(() {
        _counterios = (prefs.getString('counterios'));
        print(_counterios + "lettura file");
      });
    }
  }



Widget build(BuildContext context) {
    print(_counterdroid + "controllo tablet");
    if (_counterdroid == "ipadpro") {
      return new Scaffold(
        appBar: new AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Image.asset(
                'assets/pngapp/logobianco.png',
                fit: BoxFit.contain,
                height: 20,
              ),
              Container(
                  padding: const EdgeInsets.all(10.0),
                  child: Text('La Corte TakeAway'))
            ],
          ),
        ),
      );
    }
  }
2
Where you declared it ? try widget._counterios and widget._counterdroid in your build method. - Vinoth Vino
i'd declerad in class _MyHomePageState extends State<MyHomePage> { String _counterios = ""; String _counterdroid = ""; - Daniele Angelini

2 Answers

0
votes

ok... code is...

import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:image_picker/image_picker.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:social_share_plugin/social_share_plugin.dart';
import 'package:takeaway/pages/informazioni.dart';
import 'package:takeaway/pages/popup.dart';
import 'package:takeaway/pages/popup_content.dart';
import 'package:map_launcher/map_launcher.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:io';
import 'package:takeaway/pages/ncl.dart';
import 'dart:io' show Platform;

Map<String, dynamic> _readAndroidBuildData(AndroidDeviceInfo build) {
  return <String, dynamic>{
    'model': build.model,
     };
}

Map<String, dynamic> _readIosDeviceInfo(IosDeviceInfo data) {
  return <String, dynamic>{
    'utsname.machine:': data.utsname.machine,
  };
}


deviceInfo() async{

  final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
  Map<String, dynamic> deviceData = <String, dynamic>{};


  try {
    if (Platform.isAndroid) {

      deviceData = _readAndroidBuildData(await deviceInfoPlugin.androidInfo);
      DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
      AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;

      final String droiddevice  = androidInfo.model;
       final prefsdroid = await SharedPreferences.getInstance();
        prefsdroid.setString('counterdroid', droiddevice);
         print(droiddevice);


    } else if (Platform.isIOS) {

      deviceData = _readIosDeviceInfo(await deviceInfoPlugin.iosInfo);
       DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
        IosDeviceInfo iosInfo = await deviceInfo.iosInfo;


      final String iosdevice = iosInfo.utsname.machine;

      final prefsios = await SharedPreferences.getInstance();

       prefsios.setString('counterios', iosdevice);

    }
  } on PlatformException {
    deviceData = <String, dynamic>{
      'Error:': 'Failed to get platform version.'
    };
  }

}

  class CallsAndMessagesService {
  void call(String number) => launch("tel:$number");
  void sendSms(String number) => launch("sms:$number");
  void sendEmail(String email) => launch("mailto:$email");
}

final String telephoneNumber = "+393287875572";


void main() {
  runApp(new MyApp());
  deviceInfo();

}

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'La Corte TakeAway',

      theme: new ThemeData(
        primarySwatch: Colors.red,
        primaryColor: const Color(0xFFc42e2e),
        accentColor: const Color(0xFFfafafa),
        canvasColor: const Color(0xFFfafafa),
      ),

      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);
  @override
  _MyHomePageState createState() => new _MyHomePageState();

}

class _MyHomePageState extends State<MyHomePage> {
  String _counterios = "";
  String _counterdroid = "";

  @override
  void initState() {
    super.initState();
    _loadCounter();
  }


  @override


  Widget textSection = new Container(

    padding: const EdgeInsets.all(32.0),
    child: new Text(
      'Informazioni',
      softWrap: true,
    ),
  );

  _loadCounter() async {
    print("inizializzazione versione");
    if (Platform.isAndroid) {

      SharedPreferences prefs = await SharedPreferences.getInstance();
      setState(() {
        _counterdroid = (prefs.getString('counterdroid'));
        print(_counterdroid+"lettura file");
      });
    }
    else if (Platform.isIOS) {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      setState(() {
        _counterios = (prefs.getString('counterios'));
        print(_counterios+"lettura file");
      });
    }
  }


  Widget build ( BuildContext context ) {
    print(_counterdroid+"controllo tablet"); }

All another pages attach no matter... variable _counterios and _counterdroid have value of device only not pass into widget and i need there...

0
votes

I am not sure weather this solution will work or not, but you can try this.

call _loadCounter in initState.

@override
void initState() {
    super.initState();
}

if this does not work, can you please share code of _MyHomePageState extends State<MyHomePage> ?

Updated after code updated.

try like this, this is working for me.

_loadCounter() async {
    print("inizializzazione versione");
    if (Platform.isAndroid) {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      _counterdroid = (prefs.getString('counterdroid'));
      print(_counterios);
    }
    else if (Platform.isIOS) {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      _counterios = (prefs.getString('counterios'));
      print(_counterios);
    }
  }