有没有一种方法可以在Flutter中为TextField设置值,而无需设置选择或在设置值后删除选择?

时间:2020-09-18 04:48:07

标签: android flutter user-interface textfield

当我们通过TextField在Flutter中设置TextEditingController时,如下所示:

textEditingController = TextEditingController();
textEditingController.text = "Some value.";

我们知道这里的text设置器会将TextSelection设置为输入的开头,如以下代码所示:

 set text(String newText) {
    value = value.copyWith(
      text: newText,
      selection: const TextSelection.collapsed(offset: -1),
      composing: TextRange.empty,
    );
  }

我的问题是我不想设置选择,因为在设置TextField之后,我将焦点转移到了另一个字段上。

那么,有什么方法可以设置TextField的值而不设置选择,或者在设置值后删除设置的选择?

谢谢。

1 个答案:

答案 0 :(得分:0)

#import libraries #!/usr/bin/python3 # -*- coding: utf-8 -*- from __future__ import print_function from googleapiclient.discovery import build from httplib2 import Http from oauth2client import file, client, tools from oauth2client.service_account import ServiceAccountCredentials import datetime import RPi.GPIO as GPIO,time import Adafruit_DHT import struct, time, serial, socket, requests import json #library for the MPPT Solar Charge Controller that was found on GitHub import esmart """acquire spreadsheet ID at the URL of the spreadsheet which are enclosed in *//* e.g https://docs.google.com /spreadsheets/d/1KqWlsVCJgGjLFb7YKfrOnqHpl3n3BWGblOXsV22IGOQ/ edit#gid=0""" #declaring spreadsheet ID MY_SPREADSHEET_ID = '1KqWlsVCJgGjLFb7YKfrOnqHpl3n3BWGblOXsV22IGOQ' #defining update_sheet function def update_sheet(sheetname, pv_volt): """acquire .json file from setting up credentials by following this tutorial: https://gspread.readthedocs.io/en/latest/oauth2.html#service-account""" #authentication SCOPES = 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive' """for the next line of code, enter the path of the file where the .json file was acquired from the above linked tutorial e.g /home/pi/gspread/Hydroponics-0b1b25110de8.json *note: the .json file can be placed anywhere as long as the path is declared as shown below*""" creds = ServiceAccountCredentials.from_json_keyfile_name('/home/pi/hydroponicsmonitoring/Hydroponics-0b1b25110de8.json',SCOPES) #authorization service = build('sheets','v4', http=creds.authorize(Http())) #call the sheets API, append the next row of sensor data """values" is the array of rows that we are updating, it is a single row""" values = [[ str(datetime.datetime.now()), 'PV Voltage', pv_volt]] body = {'values':values} result = service.spreadsheets().values().append( spreadsheetId=MY_SPREADSHEET_ID, range=sheetname + '!A1:G1', valueInputOption='USER_ENTERED', insertDataOption='INSERT_ROWS', body=body).execute() STATE_START = 0 STATE_DATA = 1 REQUEST_MSG0 = b"\xaa\x01\x01\x01\x00\x03\x00\x00\x1e\x32" LOAD_OFF = b"\xaa\x01\x01\x02\x04\x04\x01\x00\xfe\x13\x38" LOAD_ON = b"\xaa\x01\x01\x02\x04\x04\x01\x00\xfd\x13\x39" DEVICE_MODE = ["IDLE", "CC", "CV", "FLOAT", "STARTING"] def __init__(self): self.state = STATE_START self.data = [] self.callback = False self.port = "" self.timeout = 0 def __del__(self): self.close() def set_callback(self, function): self.callback = function def open(self, port): self.ser = serial.Serial(port,9600,timeout=0.1) self.port = port def send(self, pl): self.ser.write(self.pack(pl)) def parse(self, data): for c in data: if (self.state == STATE_START): if (c == 0xaa): # Start character detected self.state = STATE_DATA self.data = [] self.target_len = 255 #else: #print c elif (self.state == STATE_DATA): self.data.append(c) # Received enough of the packet to determine length if (len(self.data) == 5): self.target_len = 6 + self.data[4] # Received whole packet if (len(self.data) == self.target_len): self.state = STATE_START #print " ".join("{:02x}".format(ord(c)) for c in self.data) # Source 3 is MPPT device if (self.data[2] == 3): msg_type = self.data[3] # Type 0 packet contains most data if (self.data[3] == 0): fields = {} fields['chg_mode'] = int.from_bytes(self.data[7:9], byteorder='little') fields['pv_volt'] = int.from_bytes(self.data[9:11], byteorder='little') / 10.0 fields['bat_volt'] = int.from_bytes(self.data[11:13], byteorder='little') / 10.0 fields['chg_cur'] = int.from_bytes(self.data[13:15], byteorder='little') / 10.0 fields['load_volt'] = int.from_bytes(self.data[17:19], byteorder='little') / 10.0 fields['load_cur'] = int.from_bytes(self.data[19:21], byteorder='little') / 10.0 fields['chg_power'] = int.from_bytes(self.data[21:23], byteorder='little') fields['load_power'] = int.from_bytes(self.data[23:25], byteorder='little') fields['bat_temp'] = self.data[25] fields['int_temp'] = self.data[27] fields['soc'] = self.data[29] fields['co2_gram'] = int.from_bytes(self.data[33:35], byteorder='little') self.callback(fields) def tick(self): try: while (self.ser.inWaiting()): self.parse(self.ser.read(100)) # Send poll packet to request data every 5 seconds if (time.time() - self.timeout) > 5: self.ser.write(REQUEST_MSG0) self.timeout = time.time() #time.sleep(0.5) #self.ser.write(LOAD_OFF) except IOError: print("Serial port error, fixing") self.ser.close() opened = 0 while not opened: try: self.ser = serial.Serial(self.port,38400,timeout=0) time.sleep(0.5) if self.ser.read(100): opened = 1 else: self.ser.close() except serial.serialutil.SerialException: time.sleep(0.5) self.ser.close() print("Error fixed") pv_volt = parse def handle_data(d): pv_volt = d['pv_volt'] bat_volt = d['bat_volt'] chg_mode = d['chg_mode'] chg_cur = d['chg_cur'] load_volt = d['load_volt'] load_cur = d['load_cur'] load_power = d['load_power'] chg_power = d['chg_power'] bat_temp = d['bat_temp'] int_temp = d['int_temp'] soc = d['soc'] co2_gram = d['co2_gram'] # Correct error in readings d['bat_volt'] *= 1.107 d['load_volt'] *= 1.09 # Only correct if reading is not zero if d['chg_cur']: d['chg_cur'] += 1.5 # chg_power uses uncorrected voltage/current, so recalculate actual_power = d['bat_volt']*d['chg_cur'] print("PV Voltage: %.1f V" % (d['pv_volt'])) print("Battery Voltage: %.1f V" % (d['bat_volt'])) print("Charging (status: %s): %.1f A, %.1f W" % (esmart.DEVICE_MODE[d['chg_mode']], d['chg_cur'], actual_power)) print("Discharging: %.1f V, %.1f A, %.1f W" % (d['load_volt'], d['load_cur'], d['load_power'])) print("Load Voltage: %.1f V" %(d['load_volt'])) print("Load Current: %.1f A" %(d['load_cur'])) print("Charge Power: %.1f W" %(d['chg_power'])) print("Load Power: %.1f W" %(d['load_power'])) print("External Temperature: %.1f °C" %(d['bat_temp'])) print("Internal Temperature: %.1f °C" %(d['int_temp'])) print("State of Charge: %.1f %%" %(d['soc'])) print("CO2 Reduction: %.1f g" %(d['co2_gram'])) e = esmart.esmart() e.open("/dev/ttyUSB0") e.set_callback(handle_data) update_sheet("Sheet1", pv_volt) time.sleep(0.5)

相关问题